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()
{
event_curtime) == Success;
if (!ret)
--kgrabs;
- else
+ else {
+ passive_count = 0;
grab_time = event_curtime;
+ }
} else
ret = TRUE;
} else if (kgrabs > 0) {
if (--kgrabs == 0) {
- XUngrabKeyboard(ob_display, CurrentTime);
+ XUngrabKeyboard(ob_display, ungrab_time());
}
ret = TRUE;
}
ret = TRUE;
} else if (pgrabs > 0) {
if (--pgrabs == 0) {
- XUngrabPointer(ob_display, CurrentTime);
+ XUngrabPointer(ob_display, ungrab_time());
}
ret = TRUE;
}
{
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()
+{
+ /*ob_debug("ungrabbing %d passive grabs\n", passive_count);*/
+ if (passive_count) {
+ /* kill out passive grab */
+ XUngrabKeyboard(ob_display, event_curtime);
+ passive_count = 0;
+ }
+}