2014-11-20 4 views
0

Я использую C с GTK для создания диалогового окна для подтверждения выхода.GTK закрыть диалоговое окно?

Мое главное окно имеет кнопку Quit -> Диалоговое окно с Да и Нет
Да должны выйти из программы полностью
Нет следует закрыть диалоговое окно.

Я попытался

dialog = gtk_dialog_new(); 
... 
button = gtk_button_new_with_label("Yes"); 
g_signal_connect(button, "clicked", G_CALLBACK(close), NULL); 

Моя функция обратного вызова близко

static void close(GtkWidget* widget, gpointer data) 
{ 
gtk_main_quit(); 
} 

Однако, моя кнопку Да ничего не выйдет. Для этого есть причина?

ответ

3

gtk_main_quit() только оставляет текущую вложенную основную петлю. gtk_dialog_run() создает собственный вложенный основной контур, поэтому ваш gtk_main_quit() вылетает только из gtk_dialog_run(), а не из gtk_main().

0

Используйте delete-event вашего главного окна, чтобы вызвать свое всплывающее окно, когда пользователь пытается закрыть окно. Затем в обратном вызове on_delete_event используйте значение, возвращаемое gtk_dialog_run, чтобы вернуть правильное значение. Ваше возвращаемое значение возвращаемого значения управляет, если событие распространяется и отправляет сигнал destroy. Позвоните по телефону gtk_main_quit с вашего обратного вызова on_destroy. Подключите свой ответ on_destroy к сигналу destroy вашего главного окна. Войла!

0

Поскольку вам не нужно основной цикл для этого, вы должны проверить, что работает возврат:

/* pseudo code*/ 
if (gtk_dialog_run(dlg) == RESPONSE_YES) { 
gtk_widget_destroy (dlg); # destroys dialog and exits 
} 
Смежные вопросы