У меня есть одно необычное использование диалога GTK.Это диалоговое окно находится в отдельном файле кода и имеет отдельный файл Glade для пользовательского интерфейса.Это потому, что я хочу, чтобы это диалоговое окно было «заменяемым» для использования в разных проектах.После задания диалог уничтожается и каждый раз снова загружается, когда нужно.Но вот проблемы с модальностью.
Вот как я называю диалог:
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;
}
Когда всплывает диалоговое окно, явсе еще можете выбрать что-нибудь в главном окне, даже запустить новый диалог, несколько раз.Это означает, что мой диалог не является модальным для моего основного приложения.
Можно ли это сделать указанным способом?Что не так, моя идея или мой код?
Программа хорошо компилируется, и у меня нет ошибок на терминале при выполнении.