diff --git a/ChangeLog b/ChangeLog index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 00f2f41a33..dee0be2d42 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +Tue Nov 17 1998 The Rasterman + * gdk/gdk.h, gdk/gdkwindow.c: Added gdk_window_get_deskrelative_origin + function to correctly determine gdk window position relative to + its "root window" - contains check for an Enlightenment + virtual root window. + * gtk/gtkhandlebox.c: changed gdk_window_get_origin -> + gdk_window_get_deskrelative_origin to get the origin of dragged + handleboxes correctly. Now it works correctly with E. + Tue Nov 17 1998 Tuomas Lukka * gtk/gtktypeutils.c: Fix vital bug where LOOKUP was used when diff --git a/gdk/gdk.h b/gdk/gdk.h index 84563cf8fe..68feea9f7c 100644 --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -308,6 +308,9 @@ 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, + gint *x, + gint *y); void gdk_window_get_root_origin (GdkWindow *window, gint *x, gint *y); diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 002696b872..0d0b9a0489 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1302,6 +1302,69 @@ gdk_window_get_origin (GdkWindow *window, return return_val; } +gint +gdk_window_get_deskrelative_origin (GdkWindow *window, + gint *x, + gint *y) +{ + GdkWindowPrivate *private; + gint return_val, num_children, format_return; + Window win, *child, parent, root; + gint tx = 0; + gint ty = 0; + Atom type_return; + static Atom atom = 0; + gulong number_return, bytes_after_return; + guchar *data_return; + + g_return_val_if_fail (window != NULL, 0); + + 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; + data_return = NULL; + XGetWindowProperty(private->xdisplay, win, atom, 0, 0x7fffffff, + False, XA_CARDINAL, &type_return, &format_return, + &number_return, &bytes_after_return, &data_return); + if (data_return) + { + if (data_return) + XFree(data_return); + return_val = XTranslateCoordinates (private->xdisplay, + private->xwindow, + win, + 0, 0, &tx, &ty, + &root); + break; + } + } + } + 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; +} + void gdk_window_get_root_origin (GdkWindow *window, gint *x, diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index 002696b872..0d0b9a0489 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -1302,6 +1302,69 @@ gdk_window_get_origin (GdkWindow *window, return return_val; } +gint +gdk_window_get_deskrelative_origin (GdkWindow *window, + gint *x, + gint *y) +{ + GdkWindowPrivate *private; + gint return_val, num_children, format_return; + Window win, *child, parent, root; + gint tx = 0; + gint ty = 0; + Atom type_return; + static Atom atom = 0; + gulong number_return, bytes_after_return; + guchar *data_return; + + g_return_val_if_fail (window != NULL, 0); + + 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; + data_return = NULL; + XGetWindowProperty(private->xdisplay, win, atom, 0, 0x7fffffff, + False, XA_CARDINAL, &type_return, &format_return, + &number_return, &bytes_after_return, &data_return); + if (data_return) + { + if (data_return) + XFree(data_return); + return_val = XTranslateCoordinates (private->xdisplay, + private->xwindow, + win, + 0, 0, &tx, &ty, + &root); + break; + } + } + } + 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; +} + void gdk_window_get_root_origin (GdkWindow *window, gint *x, diff --git a/gtk/gtkhandlebox.c b/gtk/gtkhandlebox.c index a4d8bac299..da6d8cea72 100644 --- a/gtk/gtkhandlebox.c +++ b/gtk/gtkhandlebox.c @@ -859,7 +859,7 @@ gtk_handle_box_motion (GtkWidget *widget, ox = 0; oy = 0; - gdk_window_get_origin (hb->float_window, &ox, &oy); + gdk_window_get_deskrelative_origin (hb->float_window, &ox, &oy); new_x = 0; new_y = 0; gdk_window_get_pointer (hb->float_window, &new_x, &new_y, NULL);