From 8a05ae261d640df3844fdae942556793c62bd073 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 4 Feb 2003 09:34:17 +0000 Subject: [PATCH] split out the linear cycling into focuscycle.py. some better comments about what options can be used. --- scripts/Makefile.am | 2 +- scripts/focus.py | 54 ------------------------------- scripts/focuscycle.py | 72 +++++++++++++++++++++++++++++++++++++++++ scripts/stackedcycle.py | 8 +++-- 4 files changed, 79 insertions(+), 57 deletions(-) create mode 100644 scripts/focuscycle.py diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 16a61f13..b4d8138c 100644 --- a/scripts/Makefile.am +++ b/scripts/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: diff --git a/scripts/focus.py b/scripts/focus.py index 03c50f41..97030013 100644 --- a/scripts/focus.py +++ b/scripts/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 @@ def previous(data, num=1): ### 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" 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" diff --git a/scripts/stackedcycle.py b/scripts/stackedcycle.py index 4c549d66..5731a564 100644 --- a/scripts/stackedcycle.py +++ b/scripts/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 @@ title_size_limit = 80 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 @@ def previous(data): import otk import ob import focus +import focuscycle class cycledata: def __init__(self): @@ -166,7 +168,7 @@ class cycledata: # 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" -- 2.39.2