Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.90.141] |
|
Сообщ.
#1
,
|
|
|
Итак.
после открытия основного окна windowMain_create (); gtk_widget_show (windowMain); g_signal_connect ((gpointer) windowMain, "destroy", G_CALLBACK(gtk_main_quit), NULL); вызывается диалог логина с кнопками "Вход" и "Выход" void on_windowMain_show (GtkWidget *widget, gpointer user_data) { on_toExit_activate(NULL, NULL); } по нажатию "Вход" осуществляется проверка логин/пароля и вход в порграмму иначе закрвается не только диалог, но и основное окно void on_toExit_activate (GtkMenuItem *menuitem, gpointer user_data) { dialogLogin_create(); gint result = dialogLogin_run(); dialogLogin_destroy(); if (result!=GTK_RESPONSE_OK) windowMain_destroy(); } Однако хотя окно и закрывается порцесс остается в памяти... void windowMain_destroy (void) { // gtk_signal_emit_by_name (GTK_OBJECT(windowMain),"destroy"); gtk_widget_destroy(windowMain); windowMain=NULL; } здесь закоментирована попытка послать окну сообщение - не прокатила ПОЧЕМУ? как с этим бороться? ------------------------------ исходники прилагаются Прикреплённый файлnoDOSgtk.zip (126.55 Кбайт, скачиваний: 93) |
Сообщ.
#2
,
|
|
|
Кажется для полного завершения процесса нужно еще вызвать gtk_main_quit
|
Сообщ.
#3
,
|
|
|
Цитата mrco @ Кажется для полного завершения процесса нужно еще вызвать gtk_main_quit Цитата nawok78 @ g_signal_connect ((gpointer) windowMain, "destroy", G_CALLBACK(gtk_main_quit), NULL); при нажатии "Х" на главном окне - закрывается как надо Добавлено void windowMain_destroy (void) { // gtk_signal_emit_by_name (GTK_OBJECT(windowMain),"destroy"); gtk_main_quit(); gtk_widget_destroy(windowMain); gtk_main_quit(); windowMain=NULL; gtk_main_quit(); } даже 3 gtk_main_quit не помогли!!! |
Сообщ.
#4
,
|
|
|
скиньте плиз исходники этой самой gtk_main_quit и gtk_window у кого есть лучше прям сюда
|
Сообщ.
#5
,
|
|
|
путем эксперимента выявлено, что
g_signal_connect ((gpointer) windowMain, "destroy", G_CALLBACK(gtk_main_quit),NULL); необходимое условие "чистого" выхода из программы достаточным является нажатие "X" на окне КАК ИМИТИРОВАТЬ ЕГО НАЖАТИЕ???? Добавлено проблемма действительно в том что , что войдя в цикл он не может выйти gtk_main_quit() не срабатывает void gtk_main_quit (void) { g_return_if_fail (main_loops != NULL); g_main_loop_quit (main_loops->data); } скорее всего не выполняется условие main_loops != NULL |
Сообщ.
#6
,
|
|
|
Хоть бы кто помог!!!
int main (int argc, char *argv[]) { //... windowMain_create (); //... } void windowMain_create (void) { _windowMain.window = create_windowMain (); gtk_widget_show (_windowMain.window); g_signal_connect ((gpointer) _windowMain.window, "destroy", G_CALLBACK(gtk_main_quit), NULL); } void windowMain_destroy (void) { // gtk_main_quit(); gtk_object_destroy(GTK_OBJECT(_windowMain.window)); _windowMain.window=NULL; } void on_windowMain_show (GtkWidget *widget, gpointer user_data) { on_toExit_activate(NULL, NULL); } void on_toExit_activate (GtkMenuItem *menuitem, gpointer user_data) { dialogLogin_create(); gint result = dialogLogin_run(); dialogLogin_destroy(); if (result!=GTK_RESPONSE_OK) { windowMain_destroy(); } else gtk_main (); } теперь ситуация противоположная - программа "висит" если после входа нажать "Х" Добавлено Ура!!! Вот так решается этот геморрой!!! int main (int argc, char *argv[]) { //... windowMain_create (); dialogLogin_create(); gint result = dialogLogin_run(); dialogLogin_destroy(); if (result!=GTK_RESPONSE_OK) { windowMain_destroy(); } else gtk_main (); //... } void windowMain_create (void) { _windowMain.window = create_windowMain (); gtk_widget_show (_windowMain.window); g_signal_connect ((gpointer) _windowMain.window, "destroy", G_CALLBACK(gtk_main_quit), NULL); // widget=lookup_widget(windowMain, "toExit") } void windowMain_destroy (void) { gtk_object_destroy(GTK_OBJECT(_windowMain.window)); _windowMain.window=NULL; } void on_windowMain_show (GtkWidget *widget, gpointer user_data) { } void on_toExit_activate (GtkMenuItem *menuitem, gpointer user_data) { dialogLogin_create(); gint result = dialogLogin_run(); dialogLogin_destroy(); if (result!=GTK_RESPONSE_OK) { windowMain_destroy(); } } |