From 1fa952fb041ca57e3c462a025e93d16c05dac175 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Tue, 5 Apr 2011 10:43:04 +0200 Subject: [PATCH] [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 261d1f2299..a63b755bc1 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 54389f3a13..0440b08f0c 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;