diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-02-04 09:34:17 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-02-04 09:34:17 +0000 |
| commit | 8a05ae261d640df3844fdae942556793c62bd073 (patch) | |
| tree | f279dbdb0f79f487c8b827b817e26a51c040e884 /scripts/focuscycle.py | |
| parent | 00978e674a53cf95693d3a58c28508f557ec6a0f (diff) | |
split out the linear cycling into focuscycle.py.
some better comments about what options can be used.
Diffstat (limited to 'scripts/focuscycle.py')
| -rw-r--r-- | scripts/focuscycle.py | 72 |
1 files changed, 72 insertions, 0 deletions
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" |
