[gtk+/client-side-windows] Make window_get_pointer a window impl virtual
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Subject: [gtk+/client-side-windows] Make window_get_pointer a window impl virtual
- Date: Mon, 8 Jun 2009 14:13:46 -0400 (EDT)
commit 4720bbc15ebc7cebd60a9f6e6c6d8e0991af5c2e
Author: Alexander Larsson <alexl redhat com>
Date: Thu Jun 4 19:21:20 2009 +0200
Make window_get_pointer a window impl virtual
---
gdk/gdkdisplay.c | 35 +++++++++++++++++------------------
gdk/gdkinternals.h | 5 -----
gdk/gdkoffscreenwindow.c | 16 ++++++++++++++++
gdk/gdkwindowimpl.h | 4 ++++
gdk/x11/gdkwindow-x11.c | 36 +++++++++++++++++++-----------------
5 files changed, 56 insertions(+), 40 deletions(-)
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
index 7ee0048..cb9d72a 100644
--- a/gdk/gdkdisplay.c
+++ b/gdk/gdkdisplay.c
@@ -539,16 +539,15 @@ gdk_window_real_window_get_pointer (GdkDisplay *display,
GdkModifierType *mask)
{
GdkWindowObject *private;
- GdkWindow *pointer_window;
gint tmpx, tmpy;
GdkModifierType tmp_mask;
+ gboolean normal_child;
private = (GdkWindowObject *) window;
- _gdk_windowing_window_get_pointer (display,
- window,
- &tmpx, &tmpy,
- mask);
+ normal_child = GDK_WINDOW_IMPL_GET_IFACE (private->impl)->get_pointer (window,
+ &tmpx, &tmpy,
+ &tmp_mask);
/* We got the coords on the impl, conver to the window */
tmpx -= private->abs_x;
tmpy -= private->abs_y;
@@ -557,8 +556,12 @@ gdk_window_real_window_get_pointer (GdkDisplay *display,
*x = tmpx;
if (y)
*y = tmpy;
+ if (mask)
+ *mask = tmp_mask;
- return _gdk_window_find_child_at (window, x, y);
+ if (normal_child)
+ return _gdk_window_find_child_at (window, tmpx, tmpy);
+ return NULL;
}
/**
@@ -853,9 +856,8 @@ synthesize_crossing_events (GdkDisplay *display,
src_toplevel == dest_toplevel)
{
/* Same toplevels */
- _gdk_windowing_window_get_pointer (display,
- dest_toplevel,
- &x, &y, &state);
+ gdk_window_get_pointer (dest_toplevel,
+ &x, &y, &state);
_gdk_syntesize_crossing_events (display,
src_window,
dest_window,
@@ -867,9 +869,8 @@ synthesize_crossing_events (GdkDisplay *display,
}
else if (dest_toplevel == NULL)
{
- _gdk_windowing_window_get_pointer (display,
- src_toplevel,
- &x, &y, &state);
+ gdk_window_get_pointer (src_toplevel,
+ &x, &y, &state);
_gdk_syntesize_crossing_events (display,
src_window,
NULL,
@@ -882,9 +883,8 @@ synthesize_crossing_events (GdkDisplay *display,
else
{
/* Different toplevels */
- _gdk_windowing_window_get_pointer (display,
- src_toplevel,
- &x, &y, &state);
+ gdk_window_get_pointer (src_toplevel,
+ &x, &y, &state);
_gdk_syntesize_crossing_events (display,
src_window,
NULL,
@@ -893,9 +893,8 @@ synthesize_crossing_events (GdkDisplay *display,
time,
NULL,
serial);
- _gdk_windowing_window_get_pointer (display,
- dest_toplevel,
- &x, &y, &state);
+ gdk_window_get_pointer (dest_toplevel,
+ &x, &y, &state);
_gdk_syntesize_crossing_events (display,
NULL,
dest_window,
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index f1124a3..f8b5990 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -448,11 +448,6 @@ void _gdk_windowing_get_pointer (GdkDisplay *display,
gint *x,
gint *y,
GdkModifierType *mask);
-GdkWindow* _gdk_windowing_window_get_pointer (GdkDisplay *display,
- GdkWindow *window,
- gint *x,
- gint *y,
- GdkModifierType *mask);
GdkWindow* _gdk_windowing_window_at_pointer (GdkDisplay *display,
gint *win_x,
gint *win_y,
diff --git a/gdk/gdkoffscreenwindow.c b/gdk/gdkoffscreenwindow.c
index efdfcd9..c68f72a 100644
--- a/gdk/gdkoffscreenwindow.c
+++ b/gdk/gdkoffscreenwindow.c
@@ -698,6 +698,21 @@ gdk_offscreen_window_get_origin (GdkWindow *window,
return TRUE;
}
+static gboolean
+gdk_offscreen_window_get_pointer (GdkWindow *window,
+ gint *x,
+ gint *y,
+ GdkModifierType *mask)
+{
+ *x = 0;
+ *y = 0;
+ *mask = 0;
+
+ /* TODO: Implement this by signal emission */
+
+ return TRUE;
+}
+
/**
* gdk_window_get_offscreen_pixmap:
* @window: a #GdkWindow
@@ -1079,6 +1094,7 @@ gdk_offscreen_window_impl_iface_init (GdkWindowImplIface *iface)
iface->queue_antiexpose = gdk_offscreen_window_queue_antiexpose;
iface->queue_translation = gdk_offscreen_window_queue_translation;
iface->get_origin = gdk_offscreen_window_get_origin;
+ iface->get_pointer = gdk_offscreen_window_get_pointer;
iface->destroy = gdk_offscreen_window_destroy;
}
diff --git a/gdk/gdkwindowimpl.h b/gdk/gdkwindowimpl.h
index 1bedb35..7babfea 100644
--- a/gdk/gdkwindowimpl.h
+++ b/gdk/gdkwindowimpl.h
@@ -86,6 +86,10 @@ struct _GdkWindowImplIface
gint (* get_deskrelative_origin) (GdkWindow *window,
gint *x,
gint *y);
+ gboolean (* get_pointer) (GdkWindow *window,
+ gint *x,
+ gint *y,
+ GdkModifierType *mask);
void (* shape_combine_region) (GdkWindow *window,
const GdkRegion *shape_region,
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 6bbc1b1..9513843 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -3087,14 +3087,14 @@ _gdk_windowing_get_pointer (GdkDisplay *display,
*mask = xmask;
}
-GdkWindow*
-_gdk_windowing_window_get_pointer (GdkDisplay *display,
- GdkWindow *window,
- gint *x,
- gint *y,
- GdkModifierType *mask)
+static gboolean
+gdk_window_x11_get_pointer (GdkWindow *window,
+ gint *x,
+ gint *y,
+ GdkModifierType *mask)
{
- GdkWindow *return_val;
+ GdkDisplay *display = GDK_WINDOW_DISPLAY (window);
+ gboolean return_val;
Window root;
Window child;
int rootx, rooty;
@@ -3102,37 +3102,38 @@ _gdk_windowing_window_get_pointer (GdkDisplay *display,
int winy = 0;
unsigned int xmask = 0;
- g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
+ g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), FALSE);
+
- return_val = NULL;
- if (!GDK_WINDOW_DESTROYED (window))
+ return_val = TRUE;
+ if (!GDK_WINDOW_DESTROYED (window))
{
- if (G_LIKELY (GDK_DISPLAY_X11 (display)->trusted_client))
+ if (G_LIKELY (GDK_DISPLAY_X11 (display)->trusted_client))
{
if (XQueryPointer (GDK_WINDOW_XDISPLAY (window),
GDK_WINDOW_XID (window),
&root, &child, &rootx, &rooty, &winx, &winy, &xmask))
{
if (child)
- return_val = gdk_window_lookup_for_display (GDK_WINDOW_DISPLAY (window), child);
+ return_val = gdk_window_lookup_for_display (GDK_WINDOW_DISPLAY (window), child) != NULL;
}
- }
- else
+ }
+ else
{
GdkScreen *screen;
int originx, originy;
- _gdk_windowing_get_pointer (gdk_drawable_get_display (window), &screen,
+ _gdk_windowing_get_pointer (gdk_drawable_get_display (window), &screen,
&rootx, &rooty, &xmask);
gdk_window_get_origin (window, &originx, &originy);
winx = rootx - originx;
winy = rooty - originy;
}
}
-
+
*x = winx;
*y = winy;
*mask = xmask;
-
+
return return_val;
}
@@ -5575,6 +5576,7 @@ gdk_window_impl_iface_init (GdkWindowImplIface *iface)
iface->set_cursor = gdk_window_x11_set_cursor;
iface->get_geometry = gdk_window_x11_get_geometry;
iface->get_origin = gdk_window_x11_get_origin;
+ iface->get_pointer = gdk_window_x11_get_pointer;
iface->get_deskrelative_origin = gdk_window_x11_get_deskrelative_origin;
iface->shape_combine_region = gdk_window_x11_shape_combine_region;
iface->input_shape_combine_region = gdk_window_x11_input_shape_combine_region;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]