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
This commit is contained in:
Dana Jansens 2007-05-09 04:04:53 +00:00
parent 65eb46bd1f
commit 4546925b58
3 changed files with 19 additions and 8 deletions

View file

@ -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);

View file

@ -1267,7 +1267,16 @@ gboolean screen_pointer_pos(gint *x, gint *y)
Window w;
gint i;
guint u;
gboolean ret;
return !!XQueryPointer(ob_display, RootWindow(ob_display, ob_screen),
&w, &w, x, y, &i, &i, &u);
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;
}

View file

@ -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