[gtk+] [broadway] Add helper for processing input at idle



commit 1fa952fb041ca57e3c462a025e93d16c05dac175
Author: Alexander Larsson <alexl redhat com>
Date:   Tue Apr 5 10:43:04 2011 +0200

    [broadway] Add helper for processing input at idle

 gdk/broadway/gdkdisplay-broadway.c |   20 +++++++++++---------
 gdk/broadway/gdkdisplay-broadway.h |    1 +
 2 files changed, 12 insertions(+), 9 deletions(-)
---
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
index 261d1f2..a63b755 100644
--- a/gdk/broadway/gdkdisplay-broadway.c
+++ b/gdk/broadway/gdkdisplay-broadway.c
@@ -304,12 +304,21 @@ parse_input (BroadwayInput *input)
 static gboolean
 process_input_idle_cb (GdkBroadwayDisplay *display)
 {
+  display->process_input_idle = 0;
   process_input_messages (display);
   return FALSE;
 }
 
 static void
-_gdk_broadway_display_read_all_input_nonblocking (GdkDisplay *display )
+queue_process_input_at_idle (GdkBroadwayDisplay *broadway_display)
+{
+  if (broadway_display->process_input_idle == 0)
+    broadway_display->process_input_idle =
+      g_idle_add_full (GDK_PRIORITY_EVENTS, (GSourceFunc)process_input_idle_cb, broadway_display, NULL);
+}
+
+static void
+_gdk_broadway_display_read_all_input_nonblocking (GdkDisplay *display)
 {
   GdkBroadwayDisplay *broadway_display;
   GInputStream *in;
@@ -375,15 +384,12 @@ _gdk_broadway_display_block_for_input (GdkDisplay *display, char op,
 {
   GdkBroadwayDisplay *broadway_display;
   BroadwayInputMsg *message;
-  gboolean queued_idle;
   gssize res;
   guint8 buffer[1024];
   BroadwayInput *input;
   GInputStream *in;
   GList *l;
 
-  queued_idle = FALSE;
-
   gdk_display_flush (display);
 
   broadway_display = GDK_BROADWAY_DISPLAY (display);
@@ -424,11 +430,7 @@ _gdk_broadway_display_block_for_input (GdkDisplay *display, char op,
     /* Since we're parsing input but not processing the resulting messages
        we might not get a readable callback on the stream, so queue an idle to
        process the messages */
-    if (!queued_idle)
-      {
-	queued_idle = TRUE;
-	g_idle_add_full (G_PRIORITY_DEFAULT, (GSourceFunc)process_input_idle_cb, display, NULL);
-      }
+    queue_process_input_at_idle (broadway_display);
   }
 }
 
diff --git a/gdk/broadway/gdkdisplay-broadway.h b/gdk/broadway/gdkdisplay-broadway.h
index 54389f3..0440b08 100644
--- a/gdk/broadway/gdkdisplay-broadway.h
+++ b/gdk/broadway/gdkdisplay-broadway.h
@@ -147,6 +147,7 @@ struct _GdkBroadwayDisplay
   guint32 saved_serial;
   BroadwayInput *input;
   GList *input_messages;
+  guint process_input_idle;
 
   guint64 last_event_time;
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]