Как вызывается событие Gtk, когда окно сворачивается? - PullRequest
4 голосов
/ 05 ноября 2011

Если я хочу, чтобы какая-то функция вызывалась при закрытии окна, я соединяюсь с delete_event. С чем мне следует связаться, если я хочу, чтобы функция вызывалась, когда пользователь свернул окно Gtk. Что-то вроде: minimize_event? Я не смог ничего найти в документах.

1 Ответ

5 голосов
/ 23 ноября 2011

Я был на том же перекрестке, только с некоторой информацией и кодом на Python GTK, но не на C.

Просматривая документы снова и снова, я понял, что меня смущают однотипные имена, союзы, структуры, перечисления и битовые поля. Я обращался с вещами как с логическими значениями, когда все это время было чем-то вроде битового поля.

Во-первых:

g_signal_connect(
    G_OBJECT(window), 
    "window-state-event", 
    G_CALLBACK(callback_func), 
    userDataPointer);

Тогда:

gboolean callback_func(
    GtkWidget *widget,
    GdkEventWindowState *event,
    gpointer user_data)
{
    //some code
    //Minimized window check
    if(event->new_window_state & GDK_WINDOW_STATE_ICONIFIED){
    //some other code
}
//some more other code
return TRUE;
}

Помните, что это битовые поля, а & - это оператор "бит и" , а не - логическое &&. GDK_WINDOW_STATE_ICONIFIED =2 или 10 в двоичном event->new_window_state - это int, из которых второй бит активен

Виджет может быть увеличен до 1021 * и одновременно, GDK_WINDOW_STATE_MAXIMIZED = 4 или 100

Если вы свернули развернутое окно, его event->new_window_state = 6 или 110

Вы можете поэкспериментировать и посмотреть, что лучше для вас работает.

Подробнее:

Финал Остерегайтесь и предостережения:

Я использую gtk + 2 из-за разработки двойного выигрыша и лин. Более новая версия gtk + 3 может сделать что-то другое.

На сайте Gnome Developer некоторые ссылки повреждены или неверны, или частично переписаны, с некоторыми ошибками. Страница на первом URL, который я разместил выше, имеет

gboolean user_function (GtkWidget *widget,GdkEvent  *event,gpointer user_data){}

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

gboolean user_function (
    GtkWidget *widget,
    GdkEventWindowState *event, 
    gpointer user_data){}

На странице также есть неверная или неработающая ссылка на страницу gtk3 для GdkEventWindowState. Версия gtk + 3 выглядит так же неправильно, как версия gtk + 2, я не видел руководств gtk + 3 с исходным кодом или отдельно, поэтому я не знаю, действительно ли gtk + 3 изменяет обратный вызов для события и структур gdk

На данный момент, когда gtk + 3 стабилизируется * ожидаем * несоответствий. Желательно использовать руководства, прилагаемые к исходному коду или дистрибутиву Linux и версии GTK + 2.

Надеюсь, это поможет.

...