diff options
Diffstat (limited to 'gdk/gdkevents.c')
-rw-r--r-- | gdk/gdkevents.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gdk/gdkevents.c b/gdk/gdkevents.c index 83c313cd34..86ea3570fb 100644 --- a/gdk/gdkevents.c +++ b/gdk/gdkevents.c @@ -88,20 +88,20 @@ _gdk_event_queue_find_first (GdkDisplay *display) GList *tmp_list; GList *pending_motion = NULL; - if (display->event_pause_count > 0) - return NULL; + gboolean paused = display->event_pause_count > 0; tmp_list = display->queued_events; while (tmp_list) { GdkEventPrivate *event = tmp_list->data; - if (!(event->flags & GDK_EVENT_PENDING)) + if ((event->flags & GDK_EVENT_PENDING) == 0 && + (!paused || (event->flags & GDK_EVENT_FLUSHED) != 0)) { if (pending_motion) return pending_motion; - if (event->event.type == GDK_MOTION_NOTIFY && !display->flushing_events) + if (event->event.type == GDK_MOTION_NOTIFY && (event->flags & GDK_EVENT_FLUSHED) == 0) pending_motion = tmp_list; else return tmp_list; @@ -321,6 +321,18 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display) } } +void +_gdk_event_queue_flush (GdkDisplay *display) +{ + GList *tmp_list; + + for (tmp_list = display->queued_events; tmp_list; tmp_list = tmp_list->next) + { + GdkEventPrivate *event = tmp_list->data; + event->flags |= GDK_EVENT_FLUSHED; + } +} + /** * gdk_event_handler_set: * @func: the function to call to handle events from GDK. |