diff options
author | Owen Taylor <otaylor@redhat.com> | 1998-11-22 00:06:57 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-11-22 00:06:57 +0000 |
commit | d88375e9c3b37572f934e96de3bfc8ca11997cc3 (patch) | |
tree | a4d79cded1f1f037537974ddbd53113c59e123cb /gdk | |
parent | 06d68566df52826658b2741001ce341b429894b6 (diff) | |
download | gtk+-d88375e9c3b37572f934e96de3bfc8ca11997cc3.tar.gz |
Fixed so it at least works with window managers other than Enlightenment,
Sat Nov 21 18:53:13 1998 Owen Taylor <otaylor@redhat.com>
* gdk/gdkwindow.c (gdk_window_get_deskrelative_origin):
Fixed so it at least works with window managers other
than Enlightenment, though it probably needs to be
removed altogether.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdk.h | 2 | ||||
-rw-r--r-- | gdk/gdkwindow.c | 51 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 51 |
3 files changed, 55 insertions, 49 deletions
@@ -308,7 +308,7 @@ GdkWindowType gdk_window_get_type (GdkWindow *window); gint gdk_window_get_origin (GdkWindow *window, gint *x, gint *y); -gint gdk_window_get_deskrelative_origin (GdkWindow *window, +gboolean gdk_window_get_deskrelative_origin (GdkWindow *window, gint *x, gint *y); void gdk_window_get_root_origin (GdkWindow *window, diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 0d0b9a0489..302fc3734f 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1302,13 +1302,14 @@ gdk_window_get_origin (GdkWindow *window, return return_val; } -gint +gboolean gdk_window_get_deskrelative_origin (GdkWindow *window, gint *x, gint *y) { GdkWindowPrivate *private; - gint return_val, num_children, format_return; + gboolean return_val = FALSE; + gint num_children, format_return; Window win, *child, parent, root; gint tx = 0; gint ty = 0; @@ -1321,46 +1322,48 @@ gdk_window_get_deskrelative_origin (GdkWindow *window, private = (GdkWindowPrivate*) window; - return_val = 0; if (!private->destroyed) { if (!atom) atom = XInternAtom(private->xdisplay, "ENLIGHTENMENT_DESKTOP", False); win = private->xwindow; + while (XQueryTree(private->xdisplay, win, &root, &parent, &child, (unsigned int *)&num_children)) { if ((child) && (num_children > 0)) XFree(child); - win = parent; + + if (!parent) + break; + else + win = parent; + + if (win == root) + break; + data_return = NULL; - XGetWindowProperty(private->xdisplay, win, atom, 0, 0x7fffffff, + XGetWindowProperty(private->xdisplay, win, atom, 0, 0, False, XA_CARDINAL, &type_return, &format_return, &number_return, &bytes_after_return, &data_return); - if (data_return) + if (type_return == XA_CARDINAL) { - if (data_return) - XFree(data_return); - return_val = XTranslateCoordinates (private->xdisplay, - private->xwindow, - win, - 0, 0, &tx, &ty, - &root); + XFree(data_return); break; } } + + return_val = XTranslateCoordinates (private->xdisplay, + private->xwindow, + win, + 0, 0, &tx, &ty, + &root); + if (x) + *x = tx; + if (y) + *y = ty; } - if (!return_val) - return_val = XTranslateCoordinates (private->xdisplay, - private->xwindow, - gdk_root_window, - 0, 0, &tx, &ty, - &root); - - if (x) - *x = tx; - if (y) - *y = ty; + return return_val; } diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 0d0b9a0489..302fc3734f 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -1302,13 +1302,14 @@ gdk_window_get_origin (GdkWindow *window, return return_val; } -gint +gboolean gdk_window_get_deskrelative_origin (GdkWindow *window, gint *x, gint *y) { GdkWindowPrivate *private; - gint return_val, num_children, format_return; + gboolean return_val = FALSE; + gint num_children, format_return; Window win, *child, parent, root; gint tx = 0; gint ty = 0; @@ -1321,46 +1322,48 @@ gdk_window_get_deskrelative_origin (GdkWindow *window, private = (GdkWindowPrivate*) window; - return_val = 0; if (!private->destroyed) { if (!atom) atom = XInternAtom(private->xdisplay, "ENLIGHTENMENT_DESKTOP", False); win = private->xwindow; + while (XQueryTree(private->xdisplay, win, &root, &parent, &child, (unsigned int *)&num_children)) { if ((child) && (num_children > 0)) XFree(child); - win = parent; + + if (!parent) + break; + else + win = parent; + + if (win == root) + break; + data_return = NULL; - XGetWindowProperty(private->xdisplay, win, atom, 0, 0x7fffffff, + XGetWindowProperty(private->xdisplay, win, atom, 0, 0, False, XA_CARDINAL, &type_return, &format_return, &number_return, &bytes_after_return, &data_return); - if (data_return) + if (type_return == XA_CARDINAL) { - if (data_return) - XFree(data_return); - return_val = XTranslateCoordinates (private->xdisplay, - private->xwindow, - win, - 0, 0, &tx, &ty, - &root); + XFree(data_return); break; } } + + return_val = XTranslateCoordinates (private->xdisplay, + private->xwindow, + win, + 0, 0, &tx, &ty, + &root); + if (x) + *x = tx; + if (y) + *y = ty; } - if (!return_val) - return_val = XTranslateCoordinates (private->xdisplay, - private->xwindow, - gdk_root_window, - 0, 0, &tx, &ty, - &root); - - if (x) - *x = tx; - if (y) - *y = ty; + return return_val; } |