From ee1657d88ec911582d137205d0457f890a3943d0 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Fri, 1 Apr 2011 17:07:17 +0200 Subject: [PATCH] [broadway] Break out _gdk_broadway_display_read_all_input_nonblocking This is useful in other places, like when we want to iterate over all messages recieved so far. --- gdk/broadway/gdkdisplay-broadway.c | 39 +++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c index cb9235b449..cb3a1382a5 100644 --- a/gdk/broadway/gdkdisplay-broadway.c +++ b/gdk/broadway/gdkdisplay-broadway.c @@ -298,17 +298,30 @@ parse_input (BroadwayInput *input) g_byte_array_remove_range (input->buffer, 0, buf - (char *)input->buffer->data); } + static gboolean -input_data_cb (GObject *stream, - BroadwayInput *input) +process_input_idle_cb (GdkBroadwayDisplay *display) +{ + process_input_messages (display); + return FALSE; +} + +static void +_gdk_broadway_display_read_all_input_nonblocking (GdkDisplay *display ) { GdkBroadwayDisplay *broadway_display; GInputStream *in; gssize res; guint8 buffer[1024]; GError *error; + BroadwayInput *input; + + broadway_display = GDK_BROADWAY_DISPLAY (display); + if (broadway_display->input == NULL) + return; + + input = broadway_display->input; - broadway_display = GDK_BROADWAY_DISPLAY (input->display); in = g_io_stream_get_input_stream (G_IO_STREAM (input->connection)); error = NULL; @@ -321,7 +334,7 @@ input_data_cb (GObject *stream, g_error_matches (error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK)) { g_error_free (error); - return TRUE; + return; } broadway_display->input = NULL; @@ -331,22 +344,26 @@ input_data_cb (GObject *stream, g_print ("input error %s", error->message); g_error_free (error); } - return FALSE; + return; } g_byte_array_append (input->buffer, buffer, res); parse_input (input); - process_input_messages (broadway_display); - - return TRUE; } static gboolean -process_input_idle_cb (GdkBroadwayDisplay *display) +input_data_cb (GObject *stream, + BroadwayInput *input) { - process_input_messages (display); - return FALSE; + GdkBroadwayDisplay *broadway_display; + + broadway_display = GDK_BROADWAY_DISPLAY (input->display); + _gdk_broadway_display_read_all_input_nonblocking (input->display); + + process_input_messages (broadway_display); + + return TRUE; } /* Note: This may be called while handling a message (i.e. sorta recursively) */