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 cannot be determined the event is thrown away unless it belongs to a INCR transaction. In that case it is passed to the gtk_selection_incr_event()
function.
-
Then the event is pushed onto a stack so you can query the currently handled event with the gtk:current-event function.
-
The event is sent to a widget. If a grab is active all events for
widgets that are not in the contained 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 the gtk_key_snooper_install() function if you need this feature.
-
After finishing the delivery the event is popped from the event stack.