我有一個非常用的gtk對話框。此對話框位於單獨的代碼文件中,並具有用於UI的單獨glade文件。這是因爲我想讓這個對話框「可替換」,以用於不同的項目。作業對話框被銷燬後,每次需要時再次加載。 但這裏有模態問題。Gtk,模態對話框
這是我如何調用對話框:
int dlgresult;
dlgresult = main_art(GTK_WIDGET(window), get_sif());
這是有趣的對話:
int main_art(GtkWidget *caller, int artSif)
{
GtkDialog *dlg_art;
char *xmlFile = "art.glade";
builder = gtk_builder_new();
gtk_builder_add_from_file(builder, xmlFile, NULL);
dlg_artikl = GTK_DIALOG(gtk_builder_get_object(builder, "dlg_art"));
... other widgets...
gtk_builder_connect_signals(builder, NULL);
g_object_unref(G_OBJECT(builder));
gtk_window_set_modal(GTK_WINDOW(GTK_DIALOG(dlg_art)), TRUE);
gtk_window_set_transient_for(GTK_WINDOW(GTK_DIALOG(dlg_art)), GTK_WINDOW(GTK_WIDGET(caller)));
//placing dialog window relative to parent window
int x, y;
gdk_window_get_origin(GDK_WINDOW(GTK_WIDGET(caller)->window), &x, &y);
gtk_window_move(GTK_WINDOW(dlg_artikl), x+8, y);
//
int dlgresponse;
dlgresponse = gtk_dialog_run(GTK_DIALOG(dlg_art));
if (dlgresponse == 1)
{
//Save changes
}
gtk_widget_destroy(GTK_WIDGET(dlg_art));
return dlgresponse;
}
當彈出對話框我還可以選擇在主窗口中任何東西,甚至推出新的對話框,幾次。這意味着我的對話不適合我的主要應用。
這可以以圖示的方式完成嗎? 什麼是不正確的,我的想法或我的代碼?
程序編譯良好,執行時終端沒有錯誤。
我還爲messageboxex等使用了這樣的「經典」對話框。但請注意,這裏是不同的情況。整個對話框在其他文件中,甚至在主文件中沒有引用。但應該阻止主窗口。兩者共享相同的「main_loop」。 – 2012-01-28 07:43:11