[gtk+] Bug 607628 - DnD operation doesn't work when using offscreen
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Bug 607628 - DnD operation doesn't work when using offscreen
- Date: Wed, 26 May 2010 15:39:45 +0000 (UTC)
commit 6b4e19a132b5f88cb07c967d144cafc372d4fb65
Author: Michael Natterer <mitch gimp org>
Date: Wed May 26 17:09:11 2010 +0200
Bug 607628 - DnD operation doesn't work when using offscreen
Turn find_widget_under_pointer() into internal API
_gtk_widget_find_at_coords() which is needed for fixing above
bug. This should actually be a public utility function, and will be
moved to another file when its final API has been decided.
(cherry picked from commit c4b1bbf3e201099e5fed38d7a60b343662b88b21)
gtk/gtktooltip.c | 36 +++++++++++++++++++-----------------
gtk/gtktooltip.h | 6 ++++++
2 files changed, 25 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtktooltip.c b/gtk/gtktooltip.c
index d5a301b..67c2f6c 100644
--- a/gtk/gtktooltip.c
+++ b/gtk/gtktooltip.c
@@ -647,14 +647,18 @@ window_to_alloc (GtkWidget *dest_widget,
/* Translates coordinates from window relative (x, y) to
* allocation relative (x, y) of the returned widget.
*/
-static GtkWidget *
-find_widget_under_pointer (GdkWindow *window,
- gint *x,
- gint *y)
+GtkWidget *
+_gtk_widget_find_at_coords (GdkWindow *window,
+ gint window_x,
+ gint window_y,
+ gint *widget_x,
+ gint *widget_y)
{
GtkWidget *event_widget;
struct ChildLocation child_loc = { NULL, NULL, 0, 0 };
+ g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
+
gdk_window_get_user_data (window, (void **)&event_widget);
if (!event_widget)
@@ -663,12 +667,12 @@ find_widget_under_pointer (GdkWindow *window,
#ifdef DEBUG_TOOLTIP
g_print ("event window %p (belonging to %p (%s)) (%d, %d)\n",
window, event_widget, gtk_widget_get_name (event_widget),
- *x, *y);
+ window_x, window_y);
#endif
/* Coordinates are relative to event window */
- child_loc.x = *x;
- child_loc.y = *y;
+ child_loc.x = window_x;
+ child_loc.y = window_y;
/* We go down the window hierarchy to the widget->window,
* coordinates stay relative to the current window.
@@ -725,14 +729,13 @@ find_widget_under_pointer (GdkWindow *window,
gtk_widget_translate_coordinates (container, event_widget,
child_loc.x, child_loc.y,
&child_loc.x, &child_loc.y);
-
}
/* We return (x, y) relative to the allocation of event_widget. */
- if (x)
- *x = child_loc.x;
- if (y)
- *y = child_loc.y;
+ if (widget_x)
+ *widget_x = child_loc.x;
+ if (widget_y)
+ *widget_y = child_loc.y;
return event_widget;
}
@@ -750,11 +753,9 @@ find_topmost_widget_coords_from_event (GdkEvent *event,
GtkWidget *tmp;
gdk_event_get_coords (event, &dx, &dy);
- tx = dx;
- ty = dy;
/* Returns coordinates relative to tmp's allocation. */
- tmp = find_widget_under_pointer (event->any.window, &tx, &ty);
+ tmp = _gtk_widget_find_at_coords (event->any.window, dx, dy, &tx, &ty);
if (!tmp)
return NULL;
@@ -1084,8 +1085,9 @@ gtk_tooltip_show_tooltip (GdkDisplay *display)
tooltip->last_x = tx;
tooltip->last_y = ty;
- pointer_widget = tooltip_widget = find_widget_under_pointer (window,
- &x, &y);
+ pointer_widget = tooltip_widget = _gtk_widget_find_at_coords (window,
+ x, y,
+ &x, &y);
}
if (!tooltip_widget)
diff --git a/gtk/gtktooltip.h b/gtk/gtktooltip.h
index ac310c9..7fa4a22 100644
--- a/gtk/gtktooltip.h
+++ b/gtk/gtktooltip.h
@@ -66,6 +66,12 @@ void _gtk_tooltip_toggle_keyboard_mode (GtkWidget *widget);
void _gtk_tooltip_handle_event (GdkEvent *event);
void _gtk_tooltip_hide (GtkWidget *widget);
+GtkWidget * _gtk_widget_find_at_coords (GdkWindow *window,
+ gint window_x,
+ gint window_y,
+ gint *widget_x,
+ gint *widget_y);
+
G_END_DECLS
#endif /* __GTK_TOOLTIP_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]