#c #events #signals #gtk
#c #Мероприятия #сигналы #gtk
Вопрос:
Если я хочу, чтобы какая-либо функция вызывалась при закрытии окна, я подключаюсь к delete_event
. С чем мне следует подключиться, если я хочу, чтобы функция вызывалась, когда пользователь сворачивает окно Gtk. Что-то вроде: minimize_event
? Я ничего не смог найти в документах.
Ответ №1:
Я был на том же перекрестке, только с некоторой информацией и кодом на 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 amp; GDK_WINDOW_STATE_ICONIFIED){
//some other code
}
//some more other code
return TRUE;
}
Помните, что это битовые поля, а amp;
это оператор «бит и», не логическое amp;amp;
значение.
GDK_WINDOW_STATE_ICONIFIED =2
или 10
в двоичном формате
и event->new_window_state
является int
событием, второй бит которого активен
Виджет может быть одновременно развернут и свернут GDK_WINDOW_STATE_MAXIMIZED = 4
или 100
Если вы свернули развернутое окно, его event->new_window_state = 6
или 110
Вы можете поэкспериментировать и посмотреть, что работает лучше для вас.
Подробная информация:
- http://developer.gnome.org/gtk/stable/GtkWidget.html#GtkWidget-window-state-event
- http://developer.gnome.org/gdk/stable/gdk-Event-Structures.html#GdkEventWindowState
Последнее предостережение и предостережения:
Я использую gtk 2 из-за двойной разработки win amp; lin. Более новый gtk 3 может выполнять некоторые действия по-другому.
На сайте разработчика Gnome некоторые ссылки неработающие или неправильные, или частично перезаписаны, с некоторыми ошибками. Страница на первом 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.
Я надеюсь, что это поможет.
Комментарии:
1. Вау, спасибо. Я должен отдать вам должное, я не ожидал такого полного ответа после всех предыдущих. Спасибо, проблема решена. 🙂