X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fgrab.c;h=ac91a6bcdb692f442c5aa3b9f9b565b2949061ad;hb=ed4d0ca31a9c1c6c815cb87a058bb1d36a0888c1;hp=3e1066ba0f31eda4379ce8321778123c2047a4c6;hpb=7e946f68d9f8ec7c880664b437edbbaa5d49ac10;p=chaz%2Fopenbox diff --git a/openbox/grab.c b/openbox/grab.c index 3e1066ba..ac91a6bc 100644 --- a/openbox/grab.c +++ b/openbox/grab.c @@ -43,7 +43,8 @@ static Time grab_time = CurrentTime; static Time ungrab_time() { Time t = event_curtime; - if (!(t == CurrentTime || event_time_after(t, grab_time))) + if (grab_time == CurrentTime || + !(t == CurrentTime || event_time_after(t, grab_time))) /* When the time moves backward on the server, then we can't use the grab time because that will be in the future. So instead we have to use CurrentTime. @@ -66,7 +67,7 @@ gboolean grab_on_pointer() return pgrabs > 0; } -gboolean grab_keyboard(gboolean grab) +gboolean grab_keyboard_full(gboolean grab) { gboolean ret = FALSE; @@ -91,7 +92,8 @@ gboolean grab_keyboard(gboolean grab) return ret; } -gboolean grab_pointer(gboolean grab, gboolean owner_events, ObCursor cur) +gboolean grab_pointer_full(gboolean grab, gboolean owner_events, + gboolean confine, ObCursor cur) { gboolean ret = FALSE; @@ -99,7 +101,9 @@ gboolean grab_pointer(gboolean grab, gboolean owner_events, ObCursor cur) if (pgrabs++ == 0) { ret = XGrabPointer(ob_display, screen_support_win, owner_events, GRAB_PTR_MASK, - GrabModeAsync, GrabModeAsync, None, + GrabModeAsync, GrabModeAsync, + (confine ? RootWindow(ob_display, ob_screen) : + None), ob_cursor(cur), event_curtime) == Success; if (!ret) --pgrabs; @@ -157,8 +161,8 @@ void grab_shutdown(gboolean reconfig) { if (reconfig) return; - while (grab_keyboard(FALSE)); - while (grab_pointer(FALSE, FALSE, OB_CURSOR_NONE)); + while (ungrab_keyboard()); + while (ungrab_pointer()); while (grab_server(FALSE)); }