void gtk_main_do_event ( GdkEvent* event )
Processes a single GDK event.
This is public only to allow filtering of events between GDK and GTK+. You will not usually need to call this function directly.
While you should not call this function directly, you might want to know how exactly events are handled. So here is what this function does with the event:
Compress enter/leave notify events. If the event passed build an enter/leave pair together with the next event (peeked from GDK), both events are thrown away. This is to avoid a backlog of (de-)highlighting widgets crossed by the pointer.
Find the widget which got the event. If the widget can’t be determined the event is thrown away unless it belongs to a INCR transaction.
Then the event is pushed onto a stack so you can query the currently handled event with gtk_get_current_event().
The event is sent to a widget. If a grab is active all events for widgets that are not in the contained in the grab widget are sent to the latter with a few exceptions:
- Deletion and destruction events are still sent to the event widget for obvious reasons.
- Events which directly relate to the visual representation of the event widget.
- Leave events are delivered to the event widget if there was an enter event delivered to it before without the paired leave event.
Drag events are not redirected because it is unclear what the semantics of that would be. Another point of interest might be that all key events are first passed through the key snooper functions if there are any. Read the description of
gtk_key_snooper_install()if you need this feature.
After finishing the delivery the event is popped from the event stack.
An event to process (normally passed by GDK)
|The data is owned by the caller of the function.|