]> Dogcows Code - chaz/openbox/blobdiff - openbox/grab.c
only xungrabkeyboard when we actually have a passive grab on it
[chaz/openbox] / openbox / grab.c
index ac91a6bcdb692f442c5aa3b9f9b565b2949061ad..85027d5dceb02c2931ffbc0e4f67018e88272803 100644 (file)
@@ -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;
+    }
+}
This page took 0.021181 seconds and 4 git commands to generate.