GTK+ 2.0 Tutorial

<<< Previous

Getting Started

Next >>>


События

В дополнение к механизму сигналов, описанному выше, есть ряд событий, которые отражают механизм событий X. Обратные вызовы также могут быть связаны с событиями. Вот эти события:

Чтобы ассоциировать функцию обратного вызова с одним из этих событий нужно использовать функцию g_signal_connect(), как описано выше, в качестве параметра нужно использовать название одного из событий. Формат функции обратного вызова для событий имеет отличия от аналогичных для сигналов:

gint callback_func( GtkWidget *widget, GdkEvent *event, gpointer callback_data );

GdkEvent это C объединение(union) структур, тип которых зависит от выбранного события. Для того чтобы понять какое событие произошло каждая из возможных альтернатив имеет свой тип, который отражает произошедшее событие. Многие компоненты структуры событий зависят от типа события. Возможные варианты типов событий:

GDK_NOTHING GDK_DELETE GDK_DESTROY GDK_EXPOSE GDK_MOTION_NOTIFY GDK_BUTTON_PRESS GDK_2BUTTON_PRESS GDK_3BUTTON_PRESS GDK_BUTTON_RELEASE GDK_KEY_PRESS GDK_KEY_RELEASE GDK_ENTER_NOTIFY GDK_LEAVE_NOTIFY GDK_FOCUS_CHANGE GDK_CONFIGURE GDK_MAP GDK_UNMAP GDK_PROPERTY_NOTIFY GDK_SELECTION_CLEAR GDK_SELECTION_REQUEST GDK_SELECTION_NOTIFY GDK_PROXIMITY_IN GDK_PROXIMITY_OUT GDK_DRAG_ENTER GDK_DRAG_LEAVE GDK_DRAG_MOTION GDK_DRAG_STATUS GDK_DROP_START GDK_DROP_FINISHED GDK_CLIENT_EVENT GDK_VISIBILITY_NOTIFY GDK_NO_EXPOSE GDK_SCROLL GDK_WINDOW_STATE GDK_SETTING

Так, для ассоциации функции обратного вызова с событием можно использовать следующее:

g_signal_connect (G_OBJECT (button), "button_press_event", G_CALLBACK (button_press_callback), NULL);

Это предполагает что кнопка(button) это кнопка виджета (Button widget). Когда курсор находится на кнопке и кнопка мыши нажата, то вызывается функция button_press_callback(). Эта функция может быть объявлена так:

static gint button_press_callback( GtkWidget *widget, GdkEventButton *event, gpointer data );

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

Значение возвращенное функцией указывает механизму обработки событий GTK о дальнейших действиях. Возвращенное TRUE указывает на прекращение дальнейшего выполнения события. Возвращенное FALSE продолжает нормальное выполнение события. Для более подробной информации смотрите секцию Advanced Event and Signal Handling.

Детально типы данных GdkEvent, рассматриваются в GDK Event Types.

GDK selection и drag-and-drop APIs также создают множество событий которые отражены сигналами GTK. Смотрите Signals on the source widget и Signals on the destination widget для детального изучения функций обратного вызова сигналов:


<<< Previous

Home

Next >>>

Theory of Signals and Callbacks

Up

Stepping Through Hello World