簡體   English   中英

有時GTK模態對話框不是模態的 - bug或功能?

[英]Sometimes GTK modal dialogs are not modal — bug or feature?

當我在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的覆蓋滾動條時問題消失。 所以它還沒有解決,但我知道我必須在哪里舉報......

肯定是一個bug。 發布錯誤報告和/或升級您的GTK + lib。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM