[glade] Utils: Added glade_util_get_pointer()



commit 975eefe76cce05d916f8e69b77344e83cac15f19
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Wed Apr 3 18:06:20 2013 +0900

    Utils: Added glade_util_get_pointer()
    
    This is a more reliable way of getting the widget relative pointer.

 gladeui/glade-utils.c |   35 +++++++++++++++++++++++++++++++++++
 gladeui/glade-utils.h |    8 ++++++++
 2 files changed, 43 insertions(+), 0 deletions(-)
---
diff --git a/gladeui/glade-utils.c b/gladeui/glade-utils.c
index dd772bf..0be5a95 100644
--- a/gladeui/glade-utils.c
+++ b/gladeui/glade-utils.c
@@ -1918,3 +1918,38 @@ glade_utils_pointer_mode_render_icon (GladePointerMode mode, GtkIconSize size)
 
   return pix;
 }
+
+void
+glade_utils_get_pointer (GtkWidget *widget,
+                        GdkWindow *window,
+                        GdkDevice *device,
+                        gint      *x,
+                        gint      *y)
+{
+  gint device_x = 0, device_y = 0;
+  gint final_x = 0, final_y = 0;
+  GtkWidget *event_widget = NULL;
+
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+  g_return_if_fail (GDK_IS_WINDOW (window));
+  g_return_if_fail (GDK_IS_DEVICE (device));
+
+  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);
+  else
+    {
+      final_x = device_x;
+      final_y = device_y;
+    }
+
+  if (x)
+    *x = final_x;
+  if (y)
+    *y = final_y;
+}
diff --git a/gladeui/glade-utils.h b/gladeui/glade-utils.h
index 11f09a1..2eb7d9b 100644
--- a/gladeui/glade-utils.h
+++ b/gladeui/glade-utils.h
@@ -122,6 +122,14 @@ GtkWidget        *glade_util_get_placeholder_from_pointer (GtkContainer *contain
 gboolean          glade_util_object_is_loading     (GObject *object);
 
 GdkPixbuf        *glade_utils_pointer_mode_render_icon (GladePointerMode mode, GtkIconSize size);
+
+void              glade_utils_get_pointer (GtkWidget *widget,
+                                          GdkWindow *window,
+                                          GdkDevice *device,
+                                          gint      *x,
+                                          gint      *y);
+
+
 G_END_DECLS
 
 #endif /* __GLADE_UTILS_H__ */


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