[glade] Cleanup glade_utils_get_pointer()



commit 650bc9a8ac1daf9b39c100fd0f5c66621251b858
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Thu Apr 4 16:01:09 2013 +0900

    Cleanup glade_utils_get_pointer()
    
    Now accepts a NULL window or device when one cannot be provided.

 gladeui/glade-utils.c      |   31 ++++++++++++++++++++++++++++---
 plugins/gtk+/glade-fixed.c |    9 +--------
 2 files changed, 29 insertions(+), 11 deletions(-)
---
diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
index 0be5a95..f6c64ac 100644
--- a/gladeui/glade-utils.c
+++ b/gladeui/glade-utils.c
@@ -1919,6 +1919,18 @@ glade_utils_pointer_mode_render_icon (GladePointerMode mode, GtkIconSize size)
   return pix;
 }
 
+/**
+ * glade_utils_get_pointer:
+ * @widget: The widget to get the mouse position relative for
+ * @window: The window of the current event, or %NULL
+ * @device: The device, if not specified, the current event will be expected to have a @device.
+ * @x: The location to store the mouse pointer X position
+ * @y: The location to store the mouse pointer Y position
+ *
+ * Get's the pointer position relative to @widget, while @window and @device
+ * are not absolutely needed, they should be passed wherever possible.
+ *
+ */
 void
 glade_utils_get_pointer (GtkWidget *widget,
                         GdkWindow *window,
@@ -1931,17 +1943,30 @@ glade_utils_get_pointer (GtkWidget *widget,
   GtkWidget *event_widget = NULL;
 
   g_return_if_fail (GTK_IS_WIDGET (widget));
-  g_return_if_fail (GDK_IS_WINDOW (window));
+
+  if (!device)
+    {
+      GdkEvent *event = gtk_get_current_event ();
+
+      device = gdk_event_get_device (event);
+      gdk_event_free (event);
+    }
+
   g_return_if_fail (GDK_IS_DEVICE (device));
 
-  gdk_window_get_device_position (window, device, &device_x, &device_y, NULL);
+  if (!window)
+    window = gtk_widget_get_window (widget);
 
+  gdk_window_get_device_position (window, device, &device_x, &device_y, NULL);
   gdk_window_get_user_data (window, (gpointer)&event_widget);
 
   if (event_widget != widget)
+    {
       gtk_widget_translate_coordinates (event_widget,
                                         widget,
-                                        device_x, device_y, &final_x, &final_y);
+                                        device_x, device_y,
+                                       &final_x, &final_y);
+    }
   else
     {
       final_x = device_x;
diff --git a/plugins/gtk+/glade-fixed.c b/plugins/gtk+/glade-fixed.c
index bc3b4a9..a965d71 100644
--- a/plugins/gtk+/glade-fixed.c
+++ b/plugins/gtk+/glade-fixed.c
@@ -839,20 +839,13 @@ glade_fixed_add_child_impl (GladeWidget *gwidget_fixed,
   GdkRectangle rect;
   gboolean handled;
   GtkWidget *widget;
-  GdkWindow *window;
-  GdkDevice *device;
-  GdkEvent *event;
 
   g_return_if_fail (GLADE_IS_FIXED (fixed));
   g_return_if_fail (GLADE_IS_WIDGET (child));
 
   /* Need to explicitly find the pointer location at drag_drop time */
   widget = GTK_WIDGET (glade_widget_get_object (gwidget_fixed));
-  window = gtk_widget_get_window (widget);
-  event = gtk_get_current_event ();
-  if ((device = gdk_event_get_device (event)))
-    glade_utils_get_pointer (widget, window, device, &fixed->mouse_x, &fixed->mouse_y);
-  gdk_event_free (event);
+  glade_utils_get_pointer (widget, NULL, NULL, &fixed->mouse_x, &fixed->mouse_y);
 
   /* Chain up for the basic parenting */
   GLADE_WIDGET_CLASS (parent_class)->add_child


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