summaryrefslogtreecommitdiff
path: root/gdk/gdkevents.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkevents.c')
-rw-r--r--gdk/gdkevents.c20
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.