GTK模态对话框有时不是模态的 --- 是bug还是特性?

38

当我在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

我有什么遗漏吗?这种行为是想要的吗?还是一个bug?如果是bug,有没有解决方法?

编辑:我进一步调查了一下:当Ubuntu的覆盖滚动条被卸载时,问题就消失了。所以它还没有解决,但我知道应该在哪里报告这个问题...


可能是一个bug。你应该在bugzilla.gnome.org上报告它。 - ptomato
我在Launchpad上发现了一个相关的错误报告。让我们看看什么时候会修复它... - Simme
3
看起来这是Ubuntu的一个漏洞。总是讨厌那些所谓的“功能”。 - Mattias Cibien
它在f16上运行良好,增加更多元素也没问题,你应该关闭那个问题。 - elmarco
1个回答

1

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


这不是 Gtk+ 库的问题。在我的 Linux Mint 系统中它完美地运行。 - theGtknerd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接