summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-03-28 01:11:40 +0000
committerDana Jansens <danakj@orodu.net>2007-03-28 01:11:40 +0000
commit0ec2282e2ca6b80fa8c85dc366596cd009acc8a9 (patch)
treecd2460c55928e5e85786c9cdbc2cd095445ad41d /openbox
parent35c8d482fcc5fb5b83e11d8f2adef8ca39878156 (diff)
make sure the ungrab happens after the grab. fracking X server doesn't have a monatomic clock..
Diffstat (limited to 'openbox')
-rw-r--r--openbox/grab.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/openbox/grab.c b/openbox/grab.c
index 36a0d124..f63da5e9 100644
--- a/openbox/grab.c
+++ b/openbox/grab.c
@@ -35,6 +35,8 @@
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()
{
@@ -57,11 +59,17 @@ gboolean grab_keyboard(gboolean grab)
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;
}
@@ -80,10 +88,15 @@ gboolean grab_pointer(gboolean grab, ObCursor cur)
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;
@@ -103,10 +116,15 @@ gboolean grab_pointer_window(gboolean grab, ObCursor cur, Window win)
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;