Как узнать, какие события GDK необходимы для сигнала GTK+?
Вопрос
Я использую Glade-3 для разработки графического интерфейса, но продолжаю сталкиваться с этой проблемой.Я не вижу ничего в документации 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
Решение
Хорошо, думаю, теперь я понимаю, что вы имеете в виду, я нашел эту таблицу, соответствующую сигналам gtk и событиям gdk. Вот.
Другие советы
Предполагая, что я правильно интерпретировал ваш вопрос, вы хотите связать сигналы, указанные вами в файле 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 скоро устареет.
Ссылки
Вот ссылки на соответствующую документацию о двух упомянутых выше функциях.
Вы можете запечатлеть события с помощью 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+
}