X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=scripts%2Ffocus.py;h=9eb6bfb8177c5391052d8a0b9085892c5f03c334;hb=3b0b41ba81f46250f68111f7116a7f8e5c2a8dbe;hp=de426c720a2484d05d869242bedd7e88fcaabc33;hpb=82d147b5d74757ce6f1676aab16c9e6e1e837b4e;p=chaz%2Fopenbox diff --git a/scripts/focus.py b/scripts/focus.py index de426c72..9eb6bfb8 100644 --- a/scripts/focus.py +++ b/scripts/focus.py @@ -2,26 +2,28 @@ ### Functions for helping out with your window focus. ### ########################################################################### -########################################################################### -### Options that affect the behavior of the focus module. ### -########################################################################### -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.""" -FALLBACK = 0 -"""Send focus somewhere when nothing is left with the focus, if possible.""" -########################################################################### - -########################################################################### -########################################################################### +import config, ob -########################################################################### -### Internal stuff, should not be accessed outside the module. ### -########################################################################### +export_functions = () -import ob +config.add('focus', + 'avoid_skip_taskbar', + 'Avoid SkipTaskbar Windows', + "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 'Focus Fallback' is enabled.", + 'boolean', + 1) +config.add('focus', + 'fallback', + 'Focus Fallback', + "Send focus somewhere when nothing is left with the focus, if " + \ + "possible.", + 'boolean', + 1) + # maintain a list of clients, stacked in focus order _clients = [] _skip = 0 @@ -30,7 +32,8 @@ def _focusable(client, desktop): if not client.normal(): return 0 if not (client.canFocus() or client.focusNotify()): return 0 if client.iconic(): return 0 - if AVOID_SKIP_TASKBAR and client.skipTaskbar(): return 0 + if config.get('focus', 'avoid_skip_taskbar') and \ + client.skipTaskbar(): return 0 desk = client.desktop() if not (desk == 0xffffffff or desk == desktop): return 0 @@ -48,25 +51,24 @@ def _remove(client): raise ValueError("_remove(x): x not in _clients list.") def _focused(data): - global _clients + global _clients, _skip if _skip: - global _skip _skip -= 1 return if data.client: - print data.client.window() # move it to the top try: _remove(data.client) except ValueError: pass # happens if _focused comes before _newwindow _clients.insert(0, data.client) - elif FALLBACK: + elif config.get('focus', 'fallback'): # pass around focus desktop = ob.openbox.screen(data.screen).desktop() for c in _clients: - if _focusable(c, desktop) and c.focus(): + if _focusable(c, desktop): + c.focus() break def _newwindow(data):