]> Dogcows Code - chaz/openbox/blobdiff - scripts/focus.py
remove debug print
[chaz/openbox] / scripts / focus.py
index 970300131051137b1690c0d01bf58c0ee629dfa2..3bbf600fed1a9dcb6f0fa9eeb23a67c30ea89439 100644 (file)
@@ -5,11 +5,11 @@
 ###########################################################################
 ###         Options that affect the behavior of the focus module.       ###
 ###########################################################################
 ###########################################################################
 ###         Options that affect the behavior of the focus module.       ###
 ###########################################################################
-avoid_skip_taskbar = 1
+AVOID_SKIP_TASKBAR = 1
 """Don't focus windows which have requested to not be displayed in taskbars.
    You will still be able to focus the windows, but not through cycling, and
    they won't be focused as a fallback if 'fallback' is enabled."""
 """Don't focus windows which have requested to not be displayed in taskbars.
    You will still be able to focus the windows, but not through cycling, and
    they won't be focused as a fallback if 'fallback' is enabled."""
-fallback = 0
+FALLBACK = 0
 """Send focus somewhere when nothing is left with the focus, if possible."""
 ###########################################################################
 
 """Send focus somewhere when nothing is left with the focus, if possible."""
 ###########################################################################
 
@@ -24,43 +24,60 @@ import ob
 
 # maintain a list of clients, stacked in focus order
 _clients = []
 
 # maintain a list of clients, stacked in focus order
 _clients = []
-_disable = 0
+_skip = 0
 
 def _focusable(client, desktop):
     if not client.normal(): return 0
     if not (client.canFocus() or client.focusNotify()): return 0
 
 def _focusable(client, desktop):
     if not client.normal(): return 0
     if not (client.canFocus() or client.focusNotify()): return 0
-    if avoid_skip_taskbar and client.skipTaskbar(): return 0
+    if client.iconic(): return 0
+    if AVOID_SKIP_TASKBAR and client.skipTaskbar(): return 0
 
     desk = client.desktop()
     if not (desk == 0xffffffff or desk == desktop): return 0
 
     return 1
 
 
     desk = client.desktop()
     if not (desk == 0xffffffff or desk == desktop): return 0
 
     return 1
 
+def _remove(client):
+    """This function exists because Swig pointers don't define a __eq__
+       function, so list.remove(ptr) does not work."""
+    win = client.window()
+    for i in range(len(_clients)):
+        if _clients[i].window() == win:
+            _clients.pop(i)
+            return
+    raise ValueError("_remove(x): x not in _clients list.")
+
 def _focused(data):
     global _clients
 
 def _focused(data):
     global _clients
 
-    if _disable: return
+    if _skip:
+        global _skip
+        _skip -= 1
+        return
 
     if data.client:
 
     if data.client:
-        win = data.client.window()
         # move it to the top
         # move it to the top
-        _clients.remove(win)
-        _clients.insert(0, win)
-    elif fallback:
+        try:
+            _remove(data.client)
+        except ValueError: pass # happens if _focused comes before _newwindow
+        _clients.insert(0, data.client)
+    elif FALLBACK:
         # pass around focus
         desktop = ob.openbox.screen(data.screen).desktop()
         # pass around focus
         desktop = ob.openbox.screen(data.screen).desktop()
-        for w in _clients:
-            client = ob.openbox.findClient(w)
-            if client and _focusable(client, desktop) and client.focus():
+        for c in _clients:
+            if _focusable(c, desktop) and c.focus():
                 break
 
 def _newwindow(data):
                 break
 
 def _newwindow(data):
-    _clients.append(data.client.window())
+    # make sure its not already in the list
+    win = data.client.window()
+    for i in range(len(_clients)):
+        if _clients[i].window() == win:
+            return
+    _clients.append(data.client)
         
 def _closewindow(data):
         
 def _closewindow(data):
-    try:
-        _clients.remove(data.client.window())
-    except ValueError: pass
+    _remove(data.client)
 
 ob.ebind(ob.EventAction.NewWindow, _newwindow)
 ob.ebind(ob.EventAction.CloseWindow, _closewindow)
 
 ob.ebind(ob.EventAction.NewWindow, _newwindow)
 ob.ebind(ob.EventAction.CloseWindow, _closewindow)
This page took 0.024051 seconds and 4 git commands to generate.