From ff98438acca3ae7ca0b2be66cb39cc29643ecaba Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Thu, 23 Jan 2003 15:46:19 +0000 Subject: [PATCH] keep a list of clients in the order that they have been focused --- scripts/focus.py | 46 ++++++++++++++++++++++++++-------------------- 1 file 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): -- 2.39.2