summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-01-10 09:44:59 +0000
committerDana Jansens <danakj@orodu.net>2003-01-10 09:44:59 +0000
commit05039de135846b69f2ef0741b03afb63318f31ac (patch)
tree1b4bf9127422642d4e93d398d38c384889faf083 /scripts
parent52e881dc9992f341ff88d05be64dae2b74d64240 (diff)
add setup_fallback_focus() to handle focus when nothing is left focused
Diffstat (limited to 'scripts')
-rw-r--r--scripts/builtins.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/scripts/builtins.py b/scripts/builtins.py
index 9b909d01..4204d315 100644
--- a/scripts/builtins.py
+++ b/scripts/builtins.py
@@ -269,6 +269,38 @@ def setup_scroll():
mbind("C-A-4", MC_Frame, MouseClick, send_to_next_desktop)
mbind("C-A-5", MC_Frame, MouseClick, send_to_prev_desktop)
+focus_stack = []
+def setup_fallback_focus():
+ """Sets up a focus fallback routine so that when no windows are focused,
+ the last window on the desktop that had focus will be focused."""
+ def focused(data):
+ global focus_stack
+ if data.client:
+ window = data.client.window()
+ # add to front the stack
+ if window in focus_stack:
+ focus_stack.remove(window)
+ focus_stack.insert(0, window)
+ else:
+ # pass around focus
+ desktop = openbox.screen(data.screen).desktop()
+ l = len(focus_stack)
+ i = 0
+ while i < l:
+ w = focus_stack[i]
+ client = openbox.findClient(w)
+ if not client: # window is gone, remove it
+ focus_stack.pop(i)
+ l = l - 1
+ elif client.desktop() == desktop and \
+ client.normal() and client.focus():
+ break
+ else:
+ i = i + 1
+
+ ebind(EventFocus, focused)
+
+
############################################################################
### Window placement algorithms, choose one of these and ebind it to the ###
### EventPlaceWindow action. ###