static guint mask_list[MASK_LIST_SIZE];
static guint kgrabs = 0;
static guint pgrabs = 0;
+/*! The time at which the last grab was made */
+static Time grab_time = CurrentTime;
gboolean grab_on_keyboard()
{
event_curtime) == Success;
if (!ret)
--kgrabs;
+ else
+ grab_time = event_curtime;
} else
ret = TRUE;
} else if (kgrabs > 0) {
- if (--kgrabs == 0)
- XUngrabKeyboard(ob_display, event_curtime);
+ if (--kgrabs == 0) {
+ Time t = event_curtime;
+ if (t != 0 && t < grab_time)
+ t = grab_time;
+ XUngrabKeyboard(ob_display, t);
+ }
ret = TRUE;
}
ob_cursor(cur), event_curtime) == Success;
if (!ret)
--pgrabs;
+ else
+ grab_time = event_curtime;
} else
ret = TRUE;
} else if (pgrabs > 0) {
if (--pgrabs == 0) {
+ Time t = event_curtime;
+ if (t != 0 && t < grab_time)
+ t = grab_time;
XUngrabPointer(ob_display, event_curtime);
}
ret = TRUE;
event_curtime) == Success;
if (!ret)
--pgrabs;
+ else
+ grab_time = event_curtime;
} else
ret = TRUE;
} else if (pgrabs > 0) {
if (--pgrabs == 0) {
+ Time t = event_curtime;
+ if (t != 0 && t < grab_time)
+ t = grab_time;
XUngrabPointer(ob_display, event_curtime);
}
ret = TRUE;