summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1998-11-22 00:06:57 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-11-22 00:06:57 +0000
commitd88375e9c3b37572f934e96de3bfc8ca11997cc3 (patch)
treea4d79cded1f1f037537974ddbd53113c59e123cb /gdk
parent06d68566df52826658b2741001ce341b429894b6 (diff)
downloadgtk+-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.h2
-rw-r--r--gdk/gdkwindow.c51
-rw-r--r--gdk/x11/gdkwindow-x11.c51
3 files changed, 55 insertions, 49 deletions
diff --git a/gdk/gdk.h b/gdk/gdk.h
index b002d626ed..a0aa173e3b 100644
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -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;
}