有时GTKmodal dialog不是模态 – 错误或特征?

当我在GTK中创build一个自定义对话框( 包括GTK2或GTK3 )并将其设置为模态时,我的应用程序的其他窗口的所有input都将被忽略。 这几乎总是有效的,但是在某些条件下失败了。

当我添加一个包含TreeView的ScrolledWindow到我的对话框时,它仍然按照假定的方式工作。 但是,如果我用条目填充TreeView,直到ScrolledWindow开始显示滚动条 – 模式突然丢失 ,我可以点击我的其他窗口!

这是我能够设置的最基本的例子。 它写在瓦拉,但你会明白:

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

编译它:

 valac --pkg gtk+-3.0 main.vala 

我错过了什么吗? 这是行为吗? 或者是一个错误? 如果是这样,是否有解决方法?

编辑:我进一步调查:从Ubuntu的覆盖滚动条卸载时,问题消失。 所以它还没有解决,但我知道我必须报告这个…

绝对是一个错误。 发布错误报告和/或升级您的GTK +库。