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 ...
Probablemente un error. Debe informarlo en bugzilla.gnome.org. – ptomato
Descubrí un informe de error relacionado en [Launchpad] (https://bugs.launchpad.net/ubuntu/+source/overlay-scrollbar/+bug/903302) Veamos cuando se solucione ... – Simme
Parece que es un error de Ubuntu. Siempre he odiado esas 'características' –