]> Dogcows Code - chaz/openbox/blobdiff - openbox/grab.c
remove debug print
[chaz/openbox] / openbox / grab.c
index 1fd2493f735bea7bcb029b20849695786b31d711..3fa45b7c3d106eb2794a7029f7a40579cd079a72 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,13 +79,15 @@ 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) {
         if (--kgrabs == 0) {
-            XUngrabKeyboard(ob_display, CurrentTime);
+            XUngrabKeyboard(ob_display, ungrab_time());
         }
         ret = TRUE;
     }
@@ -113,7 +116,7 @@ gboolean grab_pointer_full(gboolean grab, gboolean owner_events,
             ret = TRUE;
     } else if (pgrabs > 0) {
         if (--pgrabs == 0) {
-            XUngrabPointer(ob_display, CurrentTime);
+            XUngrabPointer(ob_display, ungrab_time());
         }
         ret = TRUE;
     }
@@ -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.022444 seconds and 4 git commands to generate.