当我在GTK中创建自定义对话框(两者,GTK2或GTK3 )并将其设置为模态时,我的应用程序的其他窗口的所有输入都将被忽略。这几乎总是有效,但在某些条件下会失败。
当我将包含TreeView的ScrolledWindow添加到我的对话框时,它仍然可以正常工作。 但是,如果我用条目填充TreeView,直到ScrolledWindow开始显示其滚动条 - 模态突然丢失,我可以点击我的其他窗口!
这是我能够设置的最基本的例子。它是用Vala编写的,但你会明白这个想法:
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的叠加滚动条时,问题就消失了。所以它还没有解决,但我知道我必须在哪里报告......
答案 0 :(得分:1)
绝对是一个错误。发布错误报告和/或升级您的GTK + lib。