summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-23 15:46:19 +0000
committerDana Jansens <danakj@orodu.net>2003-01-23 15:46:19 +0000
commitff98438acca3ae7ca0b2be66cb39cc29643ecaba (patch)
treeb3d83b59f52528c5e374ddb378a46755baf34bc4
parentf4b87e04a2a1d285f7b6f93b3db08f040ba5c32c (diff)
keep a list of clients in the order that they have been focused
-rw-r--r--scripts/focus.py46
1 files changed, 26 insertions, 20 deletions
diff --git a/scripts/focus.py b/scripts/focus.py
index c0d60b1e..4c3e5a13 100644
--- a/scripts/focus.py
+++ b/scripts/focus.py
@@ -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):