Spec-Zone.ru › GTK 4.0

Распространение событий

Функция, которая первоначально получает входные события на стороне GTK, отвечает за ряд задач.

  1. Найти виджет, получивший событие.

  2. Генерировать события перехода (т.е. вход и выход) при изменении фокуса или области наведения с одного виджета на другой.

  3. Отправить событие виджетам.

Событие распространяется вниз и вверх по иерархии виджетов в трех фазах (см. GtkPropagationPhase) к целевому виджету.

Рисунок 14. Фазы распространения событий

Event propagation phases

Для событий нажатия клавиш верхнее окно получает первую возможность активировать мнемоники и акселераторы. Если это не потребляет события, целевой виджет для распространения событий — текущий виджет фокуса окна (см. gtk_window_get_focus()).

Для событий указателя целевой виджет определяется путем выбора виджета в координатах событий (см. gtk_widget_pick()).

В первой фазе («захват») событие доставляется каждому виджету сверху вниз (от верхнего уровня GtkWindow или виджета захвата) до целевого GtkWidget. Контроллеры событий, прикрепленные с помощью GTK_PHASE_CAPTURE, получают возможность отреагировать на событие.

После фазы «захвата» виджет, который должен быть местом назначения события, выполнит контроллеры событий, прикрепленные к нему с помощью GTK_PHASE_TARGET. Это известно как фаза «цель», и происходит только на этом виджете.

В последней фазе («пузырьковая») событие доставляется каждому виджету от целевого к верхнему, и выполняются контроллеры событий, прикрепленные с помощью GTK_PHASE_BUBBLE.

События не доставляются виджету, который не чувствителен или не отображен.

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

© 2005–2020 The GNOME Project
Licensed under the GNU Lesser General Public License version 2.1 or later.
https://developer-old.gnome.org/gtk4/4.0/event-propagation.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API