[gtk+/broadway: 57/71] Move event generation to gdkeventsource.c



commit ccab600fb441cb0e8fb3da670a8a7bf6e97bbf2a
Author: Alexander Larsson <alexl redhat com>
Date:   Thu Nov 25 12:33:07 2010 +0100

    Move event generation to gdkeventsource.c

 gdk/broadway/gdkdisplay-broadway.c |  141 +---------------------------------
 gdk/broadway/gdkeventsource.c      |  147 ++++++++++++++++++++++++++++++++++++
 gdk/broadway/gdkprivate-broadway.h |    3 +
 3 files changed, 154 insertions(+), 137 deletions(-)
---
diff --git a/gdk/broadway/gdkdisplay-broadway.c b/gdk/broadway/gdkdisplay-broadway.c
index cb07877..e752b6a 100644
--- a/gdk/broadway/gdkdisplay-broadway.c
+++ b/gdk/broadway/gdkdisplay-broadway.c
@@ -176,18 +176,11 @@ got_input (GInputStream *stream,
 	   GAsyncResult *result,
 	   HttpRequest *request)
 {
-  GdkScreen *screen;
-  GdkWindow *root, *window;
-  char *message, *p;
+  GError *error;
+  char *message;
   gsize len;
-  GError *error = NULL;
-  int x, y, button, id;
-  guint64 time;
-  GdkEvent *event = NULL;
-  char cmd;
-  GList *node;
-  GdkDisplayBroadway *display_broadway = GDK_DISPLAY_BROADWAY (request->display);
 
+  error = NULL;
   message = g_data_input_stream_read_upto_finish (G_DATA_INPUT_STREAM (stream), result, &len, &error);
   if (message == NULL)
     {
@@ -196,133 +189,7 @@ got_input (GInputStream *stream,
       exit (1);
     }
   g_assert (message[0] == 0);
-
-  screen = gdk_display_get_default_screen (request->display);
-  root = gdk_screen_get_root_window (screen);
-
-  p = message + 1;
-  cmd = *p++;
-  switch (cmd) {
-  case 'm':
-    id = strtol(p, &p, 10);
-    p++; /* Skip , */
-    x = strtol(p, &p, 10);
-    p++; /* Skip , */
-    y = strtol(p, &p, 10);
-    p++; /* Skip , */
-    time = strtol(p, &p, 10);
-    display_broadway->last_x = x;
-    display_broadway->last_y = y;
-
-    window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (id));
-
-    if (display_broadway->mouse_in_toplevel != window)
-      {
-	if (display_broadway->mouse_in_toplevel != NULL)
-	  {
-	    event = gdk_event_new (GDK_LEAVE_NOTIFY);
-	    event->crossing.window = g_object_ref (display_broadway->mouse_in_toplevel);
-	    event->crossing.time = time;
-	    event->crossing.x = x - GDK_WINDOW_OBJECT (display_broadway->mouse_in_toplevel)->x;
-	    event->crossing.y = y - GDK_WINDOW_OBJECT (display_broadway->mouse_in_toplevel)->y;
-	    event->crossing.x_root = x;
-	    event->crossing.y_root = y;
-	    event->crossing.mode = GDK_CROSSING_NORMAL;
-	    event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-	    gdk_event_set_device (event, request->display->core_pointer);
-
-	    node = _gdk_event_queue_append (request->display, event);
-	    _gdk_windowing_got_event (request->display, node, event, 0);
-
-	    event = gdk_event_new (GDK_FOCUS_CHANGE);
-	    event->focus_change.window = g_object_ref (display_broadway->mouse_in_toplevel);
-	    event->focus_change.in = FALSE;
-	    gdk_event_set_device (event, request->display->core_pointer);
-
-	    node = _gdk_event_queue_append (request->display, event);
-	    _gdk_windowing_got_event (request->display, node, event, 0);
-	  }
-
-	/* TODO: Unset when it dies */
-	display_broadway->mouse_in_toplevel = window;
-
-	if (window)
-	  {
-	    event = gdk_event_new (GDK_ENTER_NOTIFY);
-	    event->crossing.window = g_object_ref (window);
-	    event->crossing.time = time;
-	    event->crossing.x = x - GDK_WINDOW_OBJECT (window)->x;
-	    event->crossing.y = y - GDK_WINDOW_OBJECT (window)->y;
-	    event->crossing.x_root = x;
-	    event->crossing.y_root = y;
-	    event->crossing.mode = GDK_CROSSING_NORMAL;
-	    event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-	    gdk_event_set_device (event, request->display->core_pointer);
-
-	    node = _gdk_event_queue_append (request->display, event);
-	    _gdk_windowing_got_event (request->display, node, event, 0);
-
-	    event = gdk_event_new (GDK_FOCUS_CHANGE);
-	    event->focus_change.window = g_object_ref (window);
-	    event->focus_change.in = TRUE;
-	    gdk_event_set_device (event, request->display->core_pointer);
-
-	    node = _gdk_event_queue_append (request->display, event);
-	    _gdk_windowing_got_event (request->display, node, event, 0);
-
-	  }
-      }
-
-    if (window)
-      {
-	event = gdk_event_new (GDK_MOTION_NOTIFY);
-	event->motion.window = g_object_ref (window);
-	event->motion.time = time;
-	event->motion.x = x - GDK_WINDOW_OBJECT (window)->x;
-	event->motion.y = y - GDK_WINDOW_OBJECT (window)->y;
-	event->motion.x_root = x;
-	event->motion.y_root = y;
-	gdk_event_set_device (event, request->display->core_pointer);
-
-	node = _gdk_event_queue_append (request->display, event);
-	_gdk_windowing_got_event (request->display, node, event, 0);
-      }
-
-    break;
-  case 'b':
-  case 'B':
-    id = strtol(p, &p, 10);
-    p++; /* Skip , */
-    x = strtol(p, &p, 10);
-    p++; /* Skip , */
-    y = strtol(p, &p, 10);
-    p++; /* Skip , */
-    button = strtol(p, &p, 10);
-    p++; /* Skip , */
-    time = strtol(p, &p, 10);
-    display_broadway->last_x = x;
-    display_broadway->last_y = y;
-
-    window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (id));
-
-    if (window)
-      {
-	event = gdk_event_new (cmd == 'b' ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
-	event->button.window = g_object_ref (window);
-	event->button.time = time;
-	event->button.x = x - GDK_WINDOW_OBJECT (window)->x;
-	event->button.y = y - GDK_WINDOW_OBJECT (window)->y;
-	event->button.x_root = x;
-	event->button.y_root = y;
-	event->button.button = button + 1;
-	gdk_event_set_device (event, request->display->core_pointer);
-
-	node = _gdk_event_queue_append (request->display, event);
-	_gdk_windowing_got_event (request->display, node, event, 0);
-      }
-
-    break;
-  }
+  _gdk_events_got_input (request->display, message + 1);
 
   /* Skip past ending 0xff */
   g_data_input_stream_read_byte (request->data, NULL, NULL);
diff --git a/gdk/broadway/gdkeventsource.c b/gdk/broadway/gdkeventsource.c
index 6c34f60..7ba9bd5 100644
--- a/gdk/broadway/gdkeventsource.c
+++ b/gdk/broadway/gdkeventsource.c
@@ -23,6 +23,8 @@
 
 #include "gdkinternals.h"
 
+#include <stdlib.h>
+
 static gboolean gdk_event_source_prepare  (GSource     *source,
                                            gint        *timeout);
 static gboolean gdk_event_source_check    (GSource     *source);
@@ -87,6 +89,151 @@ gdk_event_source_check (GSource *source)
 }
 
 void
+_gdk_events_got_input (GdkDisplay *display,
+		       const char *message)
+{
+  GdkDisplayBroadway *display_broadway = GDK_DISPLAY_BROADWAY (display);
+  GdkScreen *screen;
+  GdkWindow *root, *window;
+  char *p;
+  int x, y, button, id;
+  guint64 time;
+  GdkEvent *event = NULL;
+  char cmd;
+  GList *node;
+
+  screen = gdk_display_get_default_screen (display);
+  root = gdk_screen_get_root_window (screen);
+
+  p = (char *)message;
+  cmd = *p++;
+  switch (cmd) {
+  case 'm':
+    id = strtol(p, &p, 10);
+    p++; /* Skip , */
+    x = strtol(p, &p, 10);
+    p++; /* Skip , */
+    y = strtol(p, &p, 10);
+    p++; /* Skip , */
+    time = strtol(p, &p, 10);
+    display_broadway->last_x = x;
+    display_broadway->last_y = y;
+
+    window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (id));
+
+    if (display_broadway->mouse_in_toplevel != window)
+      {
+	if (display_broadway->mouse_in_toplevel != NULL)
+	  {
+	    event = gdk_event_new (GDK_LEAVE_NOTIFY);
+	    event->crossing.window = g_object_ref (display_broadway->mouse_in_toplevel);
+	    event->crossing.time = time;
+	    event->crossing.x = x - GDK_WINDOW_OBJECT (display_broadway->mouse_in_toplevel)->x;
+	    event->crossing.y = y - GDK_WINDOW_OBJECT (display_broadway->mouse_in_toplevel)->y;
+	    event->crossing.x_root = x;
+	    event->crossing.y_root = y;
+	    event->crossing.mode = GDK_CROSSING_NORMAL;
+	    event->crossing.detail = GDK_NOTIFY_ANCESTOR;
+	    gdk_event_set_device (event, display->core_pointer);
+
+	    node = _gdk_event_queue_append (display, event);
+	    _gdk_windowing_got_event (display, node, event, 0);
+
+	    event = gdk_event_new (GDK_FOCUS_CHANGE);
+	    event->focus_change.window = g_object_ref (display_broadway->mouse_in_toplevel);
+	    event->focus_change.in = FALSE;
+	    gdk_event_set_device (event, display->core_pointer);
+
+	    node = _gdk_event_queue_append (display, event);
+	    _gdk_windowing_got_event (display, node, event, 0);
+	  }
+
+	/* TODO: Unset when it dies */
+	display_broadway->mouse_in_toplevel = window;
+
+	if (window)
+	  {
+	    event = gdk_event_new (GDK_ENTER_NOTIFY);
+	    event->crossing.window = g_object_ref (window);
+	    event->crossing.time = time;
+	    event->crossing.x = x - GDK_WINDOW_OBJECT (window)->x;
+	    event->crossing.y = y - GDK_WINDOW_OBJECT (window)->y;
+	    event->crossing.x_root = x;
+	    event->crossing.y_root = y;
+	    event->crossing.mode = GDK_CROSSING_NORMAL;
+	    event->crossing.detail = GDK_NOTIFY_ANCESTOR;
+	    gdk_event_set_device (event, display->core_pointer);
+
+	    node = _gdk_event_queue_append (display, event);
+	    _gdk_windowing_got_event (display, node, event, 0);
+
+	    event = gdk_event_new (GDK_FOCUS_CHANGE);
+	    event->focus_change.window = g_object_ref (window);
+	    event->focus_change.in = TRUE;
+	    gdk_event_set_device (event, display->core_pointer);
+
+	    node = _gdk_event_queue_append (display, event);
+	    _gdk_windowing_got_event (display, node, event, 0);
+
+	  }
+      }
+
+    if (window)
+      {
+	event = gdk_event_new (GDK_MOTION_NOTIFY);
+	event->motion.window = g_object_ref (window);
+	event->motion.time = time;
+	event->motion.x = x - GDK_WINDOW_OBJECT (window)->x;
+	event->motion.y = y - GDK_WINDOW_OBJECT (window)->y;
+	event->motion.x_root = x;
+	event->motion.y_root = y;
+	gdk_event_set_device (event, display->core_pointer);
+
+	node = _gdk_event_queue_append (display, event);
+	_gdk_windowing_got_event (display, node, event, 0);
+      }
+
+    break;
+  case 'b':
+  case 'B':
+    id = strtol(p, &p, 10);
+    p++; /* Skip , */
+    x = strtol(p, &p, 10);
+    p++; /* Skip , */
+    y = strtol(p, &p, 10);
+    p++; /* Skip , */
+    button = strtol(p, &p, 10);
+    p++; /* Skip , */
+    time = strtol(p, &p, 10);
+    display_broadway->last_x = x;
+    display_broadway->last_y = y;
+
+    window = g_hash_table_lookup (display_broadway->id_ht, GINT_TO_POINTER (id));
+
+    if (window)
+      {
+	event = gdk_event_new (cmd == 'b' ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
+	event->button.window = g_object_ref (window);
+	event->button.time = time;
+	event->button.x = x - GDK_WINDOW_OBJECT (window)->x;
+	event->button.y = y - GDK_WINDOW_OBJECT (window)->y;
+	event->button.x_root = x;
+	event->button.y_root = y;
+	event->button.button = button + 1;
+	gdk_event_set_device (event, display->core_pointer);
+
+	node = _gdk_event_queue_append (display, event);
+	_gdk_windowing_got_event (display, node, event, 0);
+      }
+
+    break;
+  default:
+    g_print ("Unknown input command %s\n", message);
+    break;
+  }
+}
+
+void
 _gdk_events_queue (GdkDisplay *display)
 {
 }
diff --git a/gdk/broadway/gdkprivate-broadway.h b/gdk/broadway/gdkprivate-broadway.h
index 49ed803..c3e6c7e 100644
--- a/gdk/broadway/gdkprivate-broadway.h
+++ b/gdk/broadway/gdkprivate-broadway.h
@@ -125,6 +125,9 @@ void _gdk_screen_broadway_events_init   (GdkScreen *screen);
 
 void _gdk_events_init           (GdkDisplay *display);
 void _gdk_events_uninit         (GdkDisplay *display);
+void _gdk_events_got_input      (GdkDisplay *display,
+				 const char *message);
+
 void _gdk_windowing_window_init (GdkScreen *screen);
 void _gdk_visual_init           (GdkScreen *screen);
 void _gdk_dnd_init		(GdkDisplay *display);



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