]> Pileus Git - ~andy/gtk/commitdiff
wayland: don't attempt to unqueue events when events are paused
authorThomas Wood <thomas.wood@intel.com>
Wed, 20 Feb 2013 13:53:59 +0000 (13:53 +0000)
committerOwen W. Taylor <otaylor@fishsoup.net>
Thu, 21 Feb 2013 14:59:58 +0000 (09:59 -0500)
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

gdk/wayland/gdkeventsource.c

index 1eff3fbb94e3301b647043fdaefb730218a16448..93f68dc3b67b145bfd0b424a12ecc913ab386156 100644 (file)
@@ -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;
 }