]> Dogcows Code - chaz/openbox/commitdiff
keep a list of clients in the order that they have been focused
authorDana Jansens <danakj@orodu.net>
Thu, 23 Jan 2003 15:46:19 +0000 (15:46 +0000)
committerDana Jansens <danakj@orodu.net>
Thu, 23 Jan 2003 15:46:19 +0000 (15:46 +0000)
scripts/focus.py

index c0d60b1ee7bb06308f05cd65d5ea268e3738a42a..4c3e5a136db98d8afd25665d27f9a20ec3298d89 100644 (file)
@@ -4,35 +4,41 @@
 
 ob_focus_raise = 1
 ob_focus_fallback = 0
-ob_focus_stack = []
+
+# maintain a list of clients, stacked in focus order
+ob_clients = []
+# maintaint he current focused window
+ob_focused = 0;
+
+def ob_new_win(data):
+    global ob_clients
+    if not len(ob_clients): ob_clients.append(data.client.window())
+    else: ob_clients.insert(1, data.client.window()) # insert in 2nd slot
+
+def ob_close_win(data):
+    global ob_clients
+    ob_clients.remove(data.client.window())
 
 def ob_focused(data):
-    global ob_focus_raise
-    global ob_focus_fallback
-    global ob_focus_stack
+    global ob_clients
     if data.client:
-        window = data.client.window()
-        # add/move to front the stack
-        if window in ob_focus_stack:
-            ob_focus_stack.remove(window)
-        ob_focus_stack.insert(0, window)
+        win = data.client.window()
+        ob_focused = win
+        # move it to the top
+        ob_clients.remove(win)
+        ob_clients.insert(0, win)
     elif ob_focus_fallback:
         # pass around focus
+        ob_focused = 0
         desktop = openbox.screen(data.screen).desktop()
-        l = len(ob_focus_stack)
-        i = 0
-        while i < l:
-            w = ob_focus_stack[i]
+        for w in ob_clients:
             client = openbox.findClient(w)
-            if not client: # window is gone, remove it
-                ob_focus_stack.pop(i)
-                l = l - 1
-            elif client.desktop() == desktop and \
-                     client.normal() and client.focus():
+            if client and (client.desktop() == desktop and \
+                           client.normal() and client.focus()):
                 break
-            else:
-                i = i + 1
 
+ebind(EventNewWindow, ob_new_win)
+ebind(EventCloseWindow, ob_close_win)
 ebind(EventFocus, ob_focused)
 
 def focus_next(data, num=1, forward=1):
This page took 0.023865 seconds and 4 git commands to generate.