all repos — openbox @ 8a05ae261d640df3844fdae942556793c62bd073

openbox fork - make it a bit more like ryudo

split out the linear cycling into focuscycle.py.
some better comments about what options can be used.
Dana Jansens danakj@orodu.net
commit

8a05ae261d640df3844fdae942556793c62bd073

parent

00978e674a53cf95693d3a58c28508f557ec6a0f

4 files changed, 79 insertions(+), 57 deletions(-)

jump to
M scripts/Makefile.amscripts/Makefile.am

@@ -2,7 +2,7 @@ scriptdir = $(libdir)/openbox/python

MAINTAINERCLEANFILES = Makefile.in script_DATA = config.py defaults.py focus.py callbacks.py \ focusmodel.py windowplacement.py behavior.py motion.py \ - historyplacement.py stackedcycle.py + historyplacement.py stackedcycle.py focuscycle.py EXTRA_DIST = $(script_DATA) distclean-local:
M scripts/focus.pyscripts/focus.py

@@ -9,21 +9,10 @@ avoid_skip_taskbar = 1

"""Don't focus windows which have requested to not be displayed in taskbars. You will still be able to focus the windows, but not through cycling, and they won't be focused as a fallback if 'fallback' is enabled.""" -raise_window = 1 -"""When cycling focus, raise the window chosen as well as focusing it. This - does not affect fallback focusing behavior.""" fallback = 0 """Send focus somewhere when nothing is left with the focus, if possible.""" ########################################################################### -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) - ########################################################################### ###########################################################################

@@ -31,7 +20,6 @@ ###########################################################################

### Internal stuff, should not be accessed outside the module. ### ########################################################################### -import otk import ob # maintain a list of clients, stacked in focus order

@@ -78,46 +66,4 @@ ob.ebind(ob.EventAction.NewWindow, _newwindow)

ob.ebind(ob.EventAction.CloseWindow, _closewindow) ob.ebind(ob.EventAction.Focus, _focused) -def _cycle(data, num, forward): - global avoid_skip_taskbar - - 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 _focusable(client, desktop) and client.focus(): - if cycle_raise: - 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 focus.py"
A 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"
M scripts/stackedcycle.pyscripts/stackedcycle.py

@@ -4,7 +4,6 @@ ###########################################################################

########################################################################### ### Options that affect the behavior of the stackedcycle module. ### -### Also see the options in the focus module. ### ########################################################################### include_all_desktops = 0 """If this is non-zero then windows from all desktops will be included in

@@ -22,6 +21,8 @@ center."""

activate_while_cycling = 1 """If this is non-zero then windows will be activated as they are highlighted in the cycling list (except iconified windows).""" +# See focus.avoid_skip_taskbar +# See focuscycle.raise_window ########################################################################### def next(data):

@@ -48,6 +49,7 @@

import otk import ob import focus +import focuscycle class cycledata: def __init__(self):

@@ -166,7 +168,7 @@ root, client.desktop())

# send a net_active_window message for the target if final or not client.iconic(): - if final: r = focus.raise_window + if final: r = focuscycle.raise_window else: r = 0 ob.send_client_msg(self.screeninfo.rootWindow(), otk.Property_atoms().openbox_active_window,

@@ -235,3 +237,5 @@ ob.ebind(ob.EventAction.NewWindow, _newwindow)

ob.ebind(ob.EventAction.CloseWindow, _closewindow) _o = cycledata() + +print "Loaded stackedcycle.py"