Какое событие Gtk вызывается при сворачивании окна?

#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

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

Подробная информация:

Последнее предостережение и предостережения:

Я использую 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. Вау, спасибо. Я должен отдать вам должное, я не ожидал такого полного ответа после всех предыдущих. Спасибо, проблема решена. 🙂