2012-01-20 16 views
36

GTK'da (, GTK2 veya GTK3'un her ikisi de) özel bir iletişim kutusu oluşturduğumda ve bunu kalıcı olacak şekilde ayarladığımda, uygulamanızın diğer pencerelerine yapılan tüm girdiler yoksayılır. Bu neredeyse her zaman çalışır, ancak belirli koşullar altında başarısız olur.Bazen GTK mod iletişim kutuları modal --- hata veya özellik değil midir?

İletişim penceremde bir TreeView içeren bir ScrolledWindow eklediğimde, hala olduğu gibi çalışır. Ancak TreeView, ScrolledWindow kaydırma çubuklarını görüntülemeye başlayana kadar girdilerle doluysa, modalite aniden kaybolur ve diğer pencereleri tıklayabilirim!

Yapabildiğim en temel örnek aşağıdadır. Bu Vala yazılmış, ama fikir alırsınız: Bir şey eksik

valac --pkg gtk+-3.0 main.vala 

Am:

class MyDialog: Gtk.Dialog { 

    public MyDialog() { 
     this.modal = true; 

     var data = new Gtk.ListStore(1, typeof(string)); 

     // increase this number -- the dialog is not modal anymore! 
     for (int i=0; i<2; ++i) { 
      Gtk.TreeIter current; 
      data.append(out current); 
      data.set(current, 0, "Lorem Ipsum"); 
     } 

     var render = new Gtk.CellRendererText(); 

     var column = new Gtk.TreeViewColumn(); 
      column.pack_start(render, true); 
      column.add_attribute(render, "text", 0); 

     var treeview = new Gtk.TreeView.with_model(data); 
      treeview.append_column(column); 
      treeview.show(); 

     var scroll = new Gtk.ScrolledWindow(null, null); 
      scroll.set_size_request(100, 100); 
      scroll.add(treeview); 
      scroll.show(); 

     (this.get_content_area() as Gtk.Box).add(scroll); 
    } 
} 

int main (string[] args) { 
    Gtk.init (ref args); 

    var window = new Gtk.Window(); 

    window.set_default_size(350, 170); 
    window.destroy.connect(Gtk.main_quit); 

    var button = new Gtk.Button.with_label("Click me!"); 
    button.clicked.connect(() => { 
     var dialog = new MyDialog(); 
     dialog.set_transient_for(window); 
     dialog.run(); 
     dialog.destroy(); 
    }); 

    window.add(button); 
    window.show_all(); 

    Gtk.main(); 
    return 0; 
} 

ile derleme? Bu davranış istedim mi? Yoksa bu bir hata mı? Öyleyse, bir geçici çözüm var mı?

DÜZENLEME: Biraz daha araştırdım: Ubuntu'nun bindirme kaydırma çubukları kaldırıldığında sorun ortadan kalkar. Bu yüzden henüz çözülmedi, ama bunu bildirmek zorunda olduğumu biliyorum ...

+0

Muhtemelen bir böcek. Bugzilla.gnome.org adresinden bildirmelisiniz. – ptomato

+0

[Launchpad] 'de ilgili bir hata raporunu keşfettim (https://bugs.launchpad.net/ubuntu/+source/overlay-scrollbar/+bug/903302) Bakalım ne zaman düzeltileceğini ... – Simme

+3

Şunun gibi görünüyor: Ubuntu'nun hatası. Her zaman '' özellikler ' –

cevap

1

Kesinlikle bir hata. Bir hata raporu gönderin ve/veya GTK + lib'inizi yükseltin.

İlgili konular