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 ||
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;
}
event_curtime) == Success;
if (!ret)
--kgrabs;
- else
+ else {
+ passive_count = 0;
grab_time = event_curtime;
+ }
} else
ret = TRUE;
} else if (kgrabs > 0) {
{
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;
+ }
+}