GTK C - Как редактировать функцию кнопки закрытия окна (кнопка X в правом верхнем углу)? - PullRequest
5 голосов
/ 11 июля 2011

Мне интересно, как отредактировать кнопку «Закрыть» (или кнопки «Свернуть / Развернуть») в верхнем правом углу окна, созданного с помощью библиотеки GTK.Я пытаюсь убрать возможность пользователя уничтожить это окно и разрешить уничтожать его только в окне верхнего уровня, поэтому я хочу, чтобы кнопка X (закрыть окно) в верхнем правом углу только скрывала окно, а не закрывала его - все еще разрешая егодля запуска в фоновом режиме.

Я немного новичок в gtk, и я прошел несколько уроков для начинающих с точки зрения создания окон и добавления кнопок, но ничего очень сложного.

Я предполагаю, что этоможет быть достигнуто с помощью вызова gtk_window_hide в окне вместо текущей функциональности кнопки X, но я не уверен, где его использовать, потому что функции для кнопок по умолчанию не кажутся легко доступными.

Ответы [ 3 ]

8 голосов
/ 11 июля 2011

В GTK вы слушаете сигналы, отправляемые виджетами.В других языках, таких как Java (в которых вы, возможно, лучше знакомы с терминологией), они часто называются «События».

Если происходит событие, например, «удаление» виджета, срабатывает соответствующий сигнал, чтобыкоторый вы можете применить, подключившись с помощью g_signal_connect и т. п.

Я предлагаю вам установить devhelp для хорошей документации / онлайн-справки для GTK.

Этот небольшой код должен вас поддерживать, я надеюсьэто самоочевидно для вас.

    #include <stdio.h>
    #include <gtk/gtk.h>
    #include <stdlib.h>

    int
    main (int argc, char **argv)
    {
      GtkWidget *window;

      gtk_init (&argc, &argv);

      window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      g_signal_connect (window, "delete_event", G_CALLBACK (gtk_window_iconify), NULL);

      gtk_widget_show (window);
      gtk_main ();

      return EXIT_SUCCESS;
    }
4 голосов
/ 12 июля 2011

Это то, для чего используется gtk_widget_hide_on_delete .

g_signal_connect (window, "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL);

В этом случае ваше дочернее окно будет только скрыто.Просто поместите меню или кнопку инструментов в главном окне, чтобы снова показать / скрыть его.

«Событие удаления» - это то, которое вызывается при нажатии кнопки «Закрыть» в оконном менеджере.

1 голос
/ 11 июля 2011

Вам нужно прослушать delete-event для виджета окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...