LINUX.ORG.RU

gtk: как запустить диалог без создания main window?


0

0

Как выполнить диалог без создания основного окна?

Вот так не работает:

int main(int argc, char** argv)
{
  gtk_init(&argc, &argv);

  GtkWidget* dialog = gtk_message_dialog_new(...);
  g_signal_connect(dialog, "response", G_CALLBACK(gtk_main_quit), NULL);

  gtk_dialog_run(GTK_DIALOG(dialog));

  gtk_main();
  gtk_widget_destroy(dialog);

  return 0;
}

Точнее работает, но нужно дважды нажать на кнопку и в терминале появляется вот такое: Gtk-CRITICAL **: gtk_main_quit: assertion `main_loops != NULL' failed

Как это сделать правильно? Спасибо.

anonymous

#include <gtk/gtk.h>

int main(int argc, char** argv)
{
  gtk_init(&argc, &argv);

  GtkWidget* dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, 
                                     GTK_MESSAGE_ERROR, 
                                     GTK_BUTTONS_CLOSE, 
                                     "Error loading file", NULL);
  g_signal_connect(dialog, "response", G_CALLBACK(gtk_main_quit), NULL);

  gtk_widget_show_all(GTK_WIDGET(dialog));

  gtk_main();
  gtk_widget_destroy(dialog);

  return 0;
}

welkam ★★
()
Ответ на: комментарий от welkam

Работает, спасибо!

А можно, пожалуйста, объяснить популярно почему так кардинально иначе ведут себя gtk_widget_show_all() и gtk_dialog_run()?

anonymous
()
Ответ на: комментарий от anonymous

gtk_dialog_run() как бе подразумевает, что у тебя уже есть mainloop

gtk_widget_show_all() тупо показывает виджет с его потрохами на экране, без там всяких mainloop-ов

mint
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.