Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Закрытие основного окна GTK+ 2.10.1/glade/Dev-C++/winXP  (Прочитано 7669 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nawok78
Гость
« : 13-03-2008 06:11 » 

Итак.
после открытия основного окна
Код:
  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;
}

здесь закоментирована попытка послать окну сообщение - не прокатила
ПОЧЕМУ? как с этим бороться?
------------------------------
исходники прилагаются(на исходниках Улыбаюсь )

при нажатии "Х" на главном окне - закрывается как надо

Добавлено Вчера, 08:02
Код: (C++)
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 не помогли!!!

Код:
g_signal_connect ((gpointer) windowMain, "destroy", G_CALLBACK(gtk_main_quit),NULL);

необходимое условие "чистого" выхода из программы
достаточным является нажатие "X" на окне
КАК ИМИТИРОВАТЬ ЕГО НАЖАТИЕ?Не понял

Добавлено Вчера, 12:40
проблемма действительно в том что ,
что войдя в цикл он не может выйти gtk_main_quit() не срабатывает
Записан
nawok78
Гость
« Ответ #1 : 17-03-2008 13:30 » 

Ура!!! Вот так решается этот геморрой!!!
Код: (C++)
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 ();
//...
}
Код: (C++)
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;
}
Код: (C++)
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();
  }
}
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #2 : 18-03-2008 04:30 » new

nawok78, молодец Улыбаюсь комунибуть твой пост поможет Улыбаюсь
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines