X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=scripts%2Ffocus.py;h=6bb6499283c13d2d659796dc4109b7ec7c376d83;hb=f6085d780192b805ef61678cdc0935a917cc2b3f;hp=d12ae191ed6881f169aacbd6b2494f0a1e6c96c8;hpb=027e974efd2602bf1513ebac736b61f172ac6bf3;p=chaz%2Fopenbox diff --git a/scripts/focus.py b/scripts/focus.py index d12ae191..6bb64992 100644 --- a/scripts/focus.py +++ b/scripts/focus.py @@ -7,15 +7,15 @@ ### ### # cycle_raise - raise the window also when it is focused ### cycle_raise = 1 ### -# avoid_skip_taskbar - don't focus windows which have requested to not ### -### be displayed in taskbars. you will still be able ### +# avoid_skip_taskbar - 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, ### -### they won't be focused as a fallback if ### +### and they won't be focused as a fallback if ### ### 'fallback' is enabled. ### avoid_skip_taskbar = 1 ### # stacked_cycle_raise - raise as you cycle in stacked mode ### stacked_cycle_raise = 0 ### -# stacked_cycle_popup_list - show a pop-up list of windows while +# stacked_cycle_popup_list - show a pop-up list of windows while ### ### cycling ### stacked_cycle_popup_list = 1 ### # send focus somewhere when nothing is left with the focus, if possible ### @@ -47,6 +47,13 @@ _clients = [] # maintaint he current focused window _doing_stacked = 0 +def _focusable(client, desktop): + if not (avoid_skip_taskbar and client.skipTaskbar()) and \ + (client.desktop() == desktop or client.desktop() == 0xffffffff) and \ + client.normal() and (client.canFocus() or client.focusNotify()): + return 1 + return 0 + def _new_win(data): global _clients global _doing_stacked @@ -82,7 +89,7 @@ def _focused(data): global _clients global _doing_stacked global _cyc_w - + if data.client: if not _doing_stacked: # only move the window when we're not cycling win = data.client.window() @@ -92,15 +99,12 @@ def _focused(data): else: # if we are cycling, then update our pointer _cyc_w = data.client.window() _hilite_popup_list(data) - elif fallback: + elif fallback: # pass around focus desktop = ob.openbox.screen(_cyc_screen).desktop() for w in _clients: client = ob.openbox.findClient(w) - if client and not (avoid_skip_taskbar and client.skipTaskbar()) \ - and (client.desktop() == desktop or - client.desktop() == 0xffffffff) \ - and client.normal() and client.focus(): + if client and _focusable(client, desktop) and client.focus(): break if _doing_stacked: _cyc_w = 0 @@ -131,9 +135,7 @@ def _do_stacked_cycle(data, forward): for w in clients: client = ob.openbox.findClient(w) - if client and not (avoid_skip_taskbar and client.skipTaskbar()) and \ - (client.desktop() == desktop or client.desktop() == 0xffffffff)\ - and client.normal() and client.focus(): + if client and _focusable(client, desktop) and client.focus(): if stacked_cycle_raise: ob.openbox.screen(data.screen).raiseWindow(client) return @@ -150,9 +152,11 @@ def _focus_stacked_ungrab(data): ob.kungrab() ob.mungrab() _doing_stacked = 0; - if cycle_raise: - client = ob.openbox.findClient(_cyc_w) - if client: + client = ob.openbox.findClient(_cyc_w) + if client: + data.client = client + #_focused(data) # resort the list as appropriate + if cycle_raise: ob.openbox.screen(data.screen).raiseWindow(client) _list_widget = 0 @@ -204,13 +208,10 @@ def _create_popup_list(data): font = style.labelFont() height = font.height() longest = 0 + desktop = ob.openbox.screen(data.screen).desktop() for c in _clients: client = ob.openbox.findClient(c) - desktop = ob.openbox.screen(data.screen).desktop() - if client and not (avoid_skip_taskbar and client.skipTaskbar()) and \ - (client.desktop() == desktop or client.desktop() == 0xffffffff)\ - and client.normal() and (client.canFocus() or - client.focusNotify()): + if client and _focusable(client, desktop): t = client.title() if len(t) > 50: # limit the length of titles t = t[:24] + "..." + t[-24:] @@ -298,13 +299,10 @@ def focus_next(data, num=1, forward=1): else: target = count - 1 t = target - curdesk = screen.desktop() + desktop = screen.desktop() while 1: client = screen.client(t) - if not (avoid_skip_taskbar and client.skipTaskbar()) and \ - client.normal() and (client.desktop() == curdesk or - client.desktop() == 0xffffffff)\ - and client.focus(): + if client and _focusable(client, desktop) and client.focus(): if cycle_raise: screen.raiseWindow(client) return