Как узнать, какие события GDK требуются для сигнала GTK +? - PullRequest
2 голосов
/ 30 апреля 2009

Я использую Glade-3 для дизайна GUI, но продолжаю решать эту проблему. Я не вижу ничего в документации GTK +, отображающей сигналы на события или в Glade-3 (3.4.5). Есть ли место в исходном коде GTK +, чтобы найти эту информацию?

Примечание. В этом вопросе важно понимать, что события и сигналы НЕ являются одним и тем же в GTK.

Пример:

У меня есть окно событий, требующее следующих событий для получения следующих сигналов. Как определить, какие события требуются для данного сигнала?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK
Signals: leave_notify_event, enter_notify_event

Ответы [ 3 ]

3 голосов
/ 07 сентября 2009

Хорошо, я думаю, что теперь знаю, что вы имеете в виду, я нашел эту таблицу, сопоставляющую сигналы gtk и события gdk. Вот оно .

2 голосов
/ 30 мая 2009

Предполагая, что я правильно истолковал ваш вопрос, вы хотите соединить сигналы, которые вы указали в файле Glade, с функциями в исходном коде. То, как вы это сделаете, зависит от того, используете ли вы libglade для загрузки сгенерированных файлов или GtkBuilder, оба схожи, но я приведу примеры на C просто для завершения.

Используя libglade, вы сделаете это так:

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file
glade_xml_signal_autoconnect(xml); // Connect the signals

Используя GtkBuilder, это будет выглядеть так:

GtkBuilder *xml = gtk_builder_new();
gtk_builder_add_from_file(xml, filename, NULL); // Load the file
gtk_builder_connect_signals(xml, NULL); // Connect the signals

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

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

Ссылки

Вот ссылки на соответствующую документацию о двух упомянутых выше функциях

1 голос
/ 07 сентября 2011

Вы можете захватить события с помощью gdk_event_handler_set()

Сначала зарегистрируйте свой собственный обработчик событий GDK при запуске:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL);

... Затем используйте его, чтобы распечатать любую полезную информацию, и не забудьте передать событие в GTK + через gtk_main_do_event() как здесь:

void my_gdk_event_handler(GdkEvent *event, gpointer data)
{
    printf("Received GdkEvent of type %d", event->type);

    gtk_main_do_event(event); // Pass event to GTK+
}
...