summaryrefslogtreecommitdiff
path: root/openbox/grab.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-06-12 15:53:14 +0000
committerDana Jansens <danakj@orodu.net>2007-06-12 15:53:14 +0000
commit124303ab7233734273eeccbc7c7507b09ddb2675 (patch)
treecb356b2631f72dabae3901e19ee697fb52ae013a /openbox/grab.c
parent8deaf1c239bf65221918ac06c77ea6fdec04b27c (diff)
only xungrabkeyboard when we actually have a passive grab on it
Diffstat (limited to 'openbox/grab.c')
-rw-r--r--openbox/grab.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/openbox/grab.c b/openbox/grab.c
index ac91a6bc..85027d5d 100644
--- a/openbox/grab.c
+++ b/openbox/grab.c
@@ -39,6 +39,7 @@ 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()
{
@@ -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()
+{
+ ob_debug("ungrabbing %d passive grabs\n", passive_count);
+ if (passive_count) {
+ /* kill out passive grab */
+ XUngrabKeyboard(ob_display, event_curtime);
+ passive_count = 0;
+ }
+}