2012-01-20 11 views
36

Cuando creo un cuadro de diálogo personalizado en GTK (ambos, GTK2 o GTK3) y lo configuro como modal, se ignora toda la entrada a otras ventanas de mi aplicación. Esto funciona casi siempre, pero falla bajo ciertas condiciones.A veces, los diálogos modales de GTK no son modales, ¿error o característica?

Cuando agrego un ScrolledWindow que contiene un TreeView a mi cuadro de diálogo, todavía funciona como se supone. Pero si llego a TreeView con las entradas hasta que ScrolledWindow comience a mostrar sus barras de desplazamiento --- ¡la modalidad se pierde repentinamente y puedo hacer clic en mis otras ventanas!

Este es el ejemplo más básico que pude configurar. Está escrito en Vala, pero usted consigue la idea:

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; 
} 

compilarlo con:

valac --pkg gtk+-3.0 main.vala 

Me estoy perdiendo algo? ¿Se quiere este comportamiento? O se trata de un error? Si es así, ¿hay alguna solución?

EDIT: Investigué un poco más: El problema desaparece cuando se desinstalan las barras de desplazamiento superpuestas de Ubuntu. Así que aún no está resuelto, pero sé dónde tengo que informar esto ...

+0

Probablemente un error. Debe informarlo en bugzilla.gnome.org. – ptomato

+0

Descubrí un informe de error relacionado en [Launchpad] (https://bugs.launchpad.net/ubuntu/+source/overlay-scrollbar/+bug/903302) Veamos cuando se solucione ... – Simme

+3

Parece que es un error de Ubuntu. Siempre he odiado esas 'características' –

Respuesta

1

Definitivamente un error. Publique un informe de error y/o actualice su GTK + lib.

Cuestiones relacionadas