summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Wood <thomas.wood@intel.com>2013-02-20 13:53:59 +0000
committerOwen W. Taylor <otaylor@fishsoup.net>2013-02-21 09:59:58 -0500
commit00a107cc4c16ed95142468735969fa82b2b8588f (patch)
tree064b0faf64e9b86032878161f9223d3702073327
parent919a5e3e24fb347e2f59b3c4192f73b94d8e0b28 (diff)
downloadgtk+-00a107cc4c16ed95142468735969fa82b2b8588f.tar.gz
wayland: don't attempt to unqueue events when events are paused
When events are paused, we should not return TRUE from prepare() or check(). GTK+ handles this for events that are already in the GTK+ queue, but we also need suppress checks for events that are in the system queue - if we return TRUE indicating that there are events in the system queue, then we'll call dispatch(), and do nothing. The event source will spin, and will never run the other phases of the paint clock. https://bugzilla.gnome.org/show_bug.cgi?id=694274
-rw-r--r--gdk/wayland/gdkeventsource.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gdk/wayland/gdkeventsource.c b/gdk/wayland/gdkeventsource.c
index 1eff3fbb94..93f68dc3b6 100644
--- a/gdk/wayland/gdkeventsource.c
+++ b/gdk/wayland/gdkeventsource.c
@@ -37,6 +37,9 @@ gdk_event_source_prepare(GSource *base, gint *timeout)
*timeout = -1;
+ if (source->display->event_pause_count > 0)
+ return FALSE;
+
/* We have to add/remove the GPollFD if we want to update our
* poll event mask dynamically. Instead, let's just flush all
* write on idle instead, which is what this amounts to. */
@@ -57,6 +60,9 @@ gdk_event_source_check(GSource *base)
if (source->pfd.revents & (G_IO_ERR | G_IO_HUP))
g_error ("Lost connection to wayland compositor");
+ if (source->display->event_pause_count > 0)
+ return FALSE;
+
return _gdk_event_queue_find_first (source->display) != NULL ||
source->pfd.revents;
}