diff options
author | Federico Mena <federico@nuclecu.unam.mx> | 1998-03-17 04:20:47 +0000 |
---|---|---|
committer | Arturo Espinosa <unammx@src.gnome.org> | 1998-03-17 04:20:47 +0000 |
commit | 63955ec2e2c8f43daa6f4832b9f535adbdecd34f (patch) | |
tree | 30d8c7612061a08f38f1bc0796237013aa69646d /gdk | |
parent | 077b5109a4a29187ccf8388fe90251e435089f5b (diff) | |
download | gdk-pixbuf-63955ec2e2c8f43daa6f4832b9f535adbdecd34f.tar.gz |
Use signed integers so that testing will not fail for windows that are
Mon Mar 16 22:31:02 1998 Federico Mena <federico@nuclecu.unam.mx>
* gdk/gdkwindow.c (gdk_window_xid_at): Use signed integers so that
testing will not fail for windows that are off-screen.
(gdk_window_xid_at_coords): Only considers visible windows.
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/gdkwindow.c | 72 | ||||
-rw-r--r-- | gdk/x11/gdkwindow-x11.c | 72 |
2 files changed, 80 insertions, 64 deletions
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index a9ec5f783..3ce3beccb 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -63,7 +63,7 @@ gdk_window_xid_at(Window base, gint bx, gint by, gint x, gint y, Display *disp; Window *list=NULL; Window child=0,parent_win=0,root_win=0; - unsigned int num,i,ww,wh,wb,wd; + int num,i,ww,wh,wb,wd; int wx,wy; window=(GdkWindow*)&gdk_root_parent; @@ -82,11 +82,11 @@ gdk_window_xid_at(Window base, gint bx, gint by, gint x, gint y, { if ((!excl_child)||(!g_list_find(excludes,(gpointer *)list[i]))) { - if ((child=gdk_window_xid_at(list[i],wx,wy,x,y,excludes,excl_child))!=0) - { - XFree(list); - return child; - } + if ((child=gdk_window_xid_at(list[i],wx,wy,x,y,excludes,excl_child))!=0) + { + XFree(list); + return child; + } } if (!i) break; } @@ -116,7 +116,8 @@ gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child) Display *disp; Window *list=NULL; Window root,child=0,parent_win=0,root_win=0; - unsigned int num,i; + unsigned int num; + int i; GList *gl; window=(GdkWindow*)&gdk_root_parent; @@ -129,31 +130,38 @@ gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child) return root; if (list) { - for (i=num-1;;i--) - { - if ((!excl_child)||(!g_list_find(excludes,(gpointer *)list[i]))) - { - if ((child=gdk_window_xid_at(list[i],0,0,x,y,excludes,excl_child))!=0) - { - if (excludes) - { - if (!g_list_find(excludes,(gpointer *)child)) - { - XFree(list); - XUngrabServer(disp); - return child; - } - } - else - { - XFree(list); - XUngrabServer(disp); - return child; - } - } - } - if (!i) break; - } + i = num - 1; + do + { + XWindowAttributes xwa; + + XGetWindowAttributes (disp, list [i], &xwa); + + if (xwa.map_state != IsViewable) + continue; + + if (excl_child && g_list_find(excludes,(gpointer *)list[i])) + continue; + + if ((child = gdk_window_xid_at (list[i], 0, 0, x, y, excludes, excl_child)) == 0) + continue; + + if (excludes) + { + if (!g_list_find(excludes,(gpointer *)child)) + { + XFree(list); + XUngrabServer(disp); + return child; + } + } + else + { + XFree(list); + XUngrabServer(disp); + return child; + } + } while (--i > 0); XFree(list); } XUngrabServer(disp); diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c index a9ec5f783..3ce3beccb 100644 --- a/gdk/x11/gdkwindow-x11.c +++ b/gdk/x11/gdkwindow-x11.c @@ -63,7 +63,7 @@ gdk_window_xid_at(Window base, gint bx, gint by, gint x, gint y, Display *disp; Window *list=NULL; Window child=0,parent_win=0,root_win=0; - unsigned int num,i,ww,wh,wb,wd; + int num,i,ww,wh,wb,wd; int wx,wy; window=(GdkWindow*)&gdk_root_parent; @@ -82,11 +82,11 @@ gdk_window_xid_at(Window base, gint bx, gint by, gint x, gint y, { if ((!excl_child)||(!g_list_find(excludes,(gpointer *)list[i]))) { - if ((child=gdk_window_xid_at(list[i],wx,wy,x,y,excludes,excl_child))!=0) - { - XFree(list); - return child; - } + if ((child=gdk_window_xid_at(list[i],wx,wy,x,y,excludes,excl_child))!=0) + { + XFree(list); + return child; + } } if (!i) break; } @@ -116,7 +116,8 @@ gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child) Display *disp; Window *list=NULL; Window root,child=0,parent_win=0,root_win=0; - unsigned int num,i; + unsigned int num; + int i; GList *gl; window=(GdkWindow*)&gdk_root_parent; @@ -129,31 +130,38 @@ gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child) return root; if (list) { - for (i=num-1;;i--) - { - if ((!excl_child)||(!g_list_find(excludes,(gpointer *)list[i]))) - { - if ((child=gdk_window_xid_at(list[i],0,0,x,y,excludes,excl_child))!=0) - { - if (excludes) - { - if (!g_list_find(excludes,(gpointer *)child)) - { - XFree(list); - XUngrabServer(disp); - return child; - } - } - else - { - XFree(list); - XUngrabServer(disp); - return child; - } - } - } - if (!i) break; - } + i = num - 1; + do + { + XWindowAttributes xwa; + + XGetWindowAttributes (disp, list [i], &xwa); + + if (xwa.map_state != IsViewable) + continue; + + if (excl_child && g_list_find(excludes,(gpointer *)list[i])) + continue; + + if ((child = gdk_window_xid_at (list[i], 0, 0, x, y, excludes, excl_child)) == 0) + continue; + + if (excludes) + { + if (!g_list_find(excludes,(gpointer *)child)) + { + XFree(list); + XUngrabServer(disp); + return child; + } + } + else + { + XFree(list); + XUngrabServer(disp); + return child; + } + } while (--i > 0); XFree(list); } XUngrabServer(disp); |