From 4546925b589d30c46f3bced74a02b3d531de894c Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Wed, 9 May 2007 04:04:53 +0000 Subject: [PATCH] get the mouse pointer position if it is on another screen too. let you move/resize from the client menu if the mouse is on another screen --- openbox/client_menu.c | 12 ++++++------ openbox/screen.c | 15 ++++++++++++--- openbox/screen.h | 2 ++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/openbox/client_menu.c b/openbox/client_menu.c index 35acd4fd..a44fcbcc 100644 --- a/openbox/client_menu.c +++ b/openbox/client_menu.c @@ -133,18 +133,18 @@ static void client_menu_execute(ObMenuEntry *e, ObMenuFrame *f, menu_frame_hide_all(); f = NULL; /* and don't update */ - if (screen_pointer_pos(&x, &y)) - moveresize_start(c, x, y, 0, - prop_atoms.net_wm_moveresize_move_keyboard); + screen_pointer_pos(&x, &y); + moveresize_start(c, x, y, 0, + prop_atoms.net_wm_moveresize_move_keyboard); break; case CLIENT_RESIZE: /* this needs to grab the keyboard so hide the menu */ menu_frame_hide_all(); f = NULL; /* and don't update */ - if (screen_pointer_pos(&x, &y)) - moveresize_start(c, x, y, 0, - prop_atoms.net_wm_moveresize_size_keyboard); + screen_pointer_pos(&x, &y); + moveresize_start(c, x, y, 0, + prop_atoms.net_wm_moveresize_size_keyboard); break; case CLIENT_CLOSE: client_close(c); diff --git a/openbox/screen.c b/openbox/screen.c index d48d0dda..dea9d020 100644 --- a/openbox/screen.c +++ b/openbox/screen.c @@ -1267,7 +1267,16 @@ gboolean screen_pointer_pos(gint *x, gint *y) Window w; gint i; guint u; - - return !!XQueryPointer(ob_display, RootWindow(ob_display, ob_screen), - &w, &w, x, y, &i, &i, &u); + gboolean ret; + + ret = !!XQueryPointer(ob_display, RootWindow(ob_display, ob_screen), + &w, &w, x, y, &i, &i, &u); + if (!ret) { + for (i = 0; i < ScreenCount(ob_display); ++i) + if (i != ob_screen) + if (XQueryPointer(ob_display, RootWindow(ob_display, i), + &w, &w, x, y, &i, &i, &u)) + break; + } + return ret; } diff --git a/openbox/screen.h b/openbox/screen.h index ccaa4f57..a84170f8 100644 --- a/openbox/screen.h +++ b/openbox/screen.h @@ -107,6 +107,8 @@ guint screen_find_monitor(Rect *search); gotta call it to let it know it should change. */ void screen_set_root_cursor(); +/*! Gives back the pointer's position in x and y. Returns TRUE if the pointer + is on this screen and FALSE if it is on another screen. */ gboolean screen_pointer_pos(gint *x, gint *y); #endif -- 2.44.0