Я был на том же перекрестке, только с некоторой информацией и кодом на 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.
Надеюсь, это поможет.