From 8a05ae261d640df3844fdae942556793c62bd073 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 4 Feb 2003 09:34:17 +0000 Subject: split out the linear cycling into focuscycle.py. some better comments about what options can be used. --- scripts/focuscycle.py | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 scripts/focuscycle.py (limited to 'scripts/focuscycle.py') diff --git a/scripts/focuscycle.py b/scripts/focuscycle.py new file mode 100644 index 00000000..36354af2 --- /dev/null +++ b/scripts/focuscycle.py @@ -0,0 +1,72 @@ +########################################################################### +### Functions for cycling focus (in a 'linear' order) between windows. ### +########################################################################### + +########################################################################### +### Options that affect the behavior of the focuscycle module. ### +########################################################################### +raise_window = 1 +"""When cycling focus, raise the window chosen as well as focusing it. This + does not affect fallback focusing behavior.""" +# See focus.avoid_skip_taskbar +########################################################################### + +def next(data, num=1): + """Focus the next window.""" + _cycle(data, num, 1) + +def previous(data, num=1): + """Focus the previous window.""" + _cycle(data, num, 0) + +########################################################################### +########################################################################### + +########################################################################### +### Internal stuff, should not be accessed outside the module. ### +########################################################################### + +import ob +import focus + +def _cycle(data, num, forward): + screen = ob.openbox.screen(data.screen) + count = screen.clientCount() + + if not count: return # no clients + + target = 0 + if data.client: + client_win = data.client.window() + found = 0 + r = range(count) + if not forward: + r.reverse() + for i in r: + if found: + target = i + found = 2 + break + elif screen.client(i).window() == client_win: + found = 1 + if found == 1: # wraparound + if forward: target = 0 + else: target = count - 1 + + t = target + desktop = screen.desktop() + while 1: + client = screen.client(t) + if client and focus._focusable(client, desktop) and client.focus(): + if raise_window: + screen.raiseWindow(client) + return + if forward: + t += num + if t >= count: t -= count + else: + t -= num + if t < 0: t += count + if t == target: return # nothing to focus + +print "Loaded focuscycle.py" -- cgit v1.2.3