X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fgrab.c;h=43e9a8155a6bfeb3eb5dcb384be6d2f0278a7e20;hb=df73dfa049b9d0bb81e09b27ecf678dce9b46301;hp=ac91a6bcdb692f442c5aa3b9f9b565b2949061ad;hpb=47d63718c664f2ef58f5dfde42ebfc5cc57e123c;p=chaz%2Fopenbox diff --git a/openbox/grab.c b/openbox/grab.c index ac91a6bc..43e9a815 100644 --- a/openbox/grab.c +++ b/openbox/grab.c @@ -39,8 +39,9 @@ static guint kgrabs = 0; static guint pgrabs = 0; /*! The time at which the last grab was made */ static Time grab_time = CurrentTime; +static gint passive_count = 0; -static Time ungrab_time() +static Time ungrab_time(void) { Time t = event_curtime; if (grab_time == CurrentTime || @@ -57,12 +58,12 @@ static Time ungrab_time() return t; } -gboolean grab_on_keyboard() +gboolean grab_on_keyboard(void) { return kgrabs > 0; } -gboolean grab_on_pointer() +gboolean grab_on_pointer(void) { return pgrabs > 0; } @@ -78,8 +79,10 @@ gboolean grab_keyboard_full(gboolean grab) event_curtime) == Success; if (!ret) --kgrabs; - else + else { + passive_count = 0; grab_time = event_curtime; + } } else ret = TRUE; } else if (kgrabs > 0) { @@ -207,3 +210,20 @@ void ungrab_all_keys(Window win) { XUngrabKey(ob_display, AnyKey, AnyModifier, win); } + +void grab_key_passive_count(int change) +{ + if (grab_on_keyboard()) return; + passive_count += change; + if (passive_count < 0) passive_count = 0; +} + +void ungrab_passive_key(void) +{ + /*ob_debug("ungrabbing %d passive grabs\n", passive_count);*/ + if (passive_count) { + /* kill out passive grab */ + XUngrabKeyboard(ob_display, event_curtime); + passive_count = 0; + } +}