diff --git a/woman/watch.py b/woman/watch.py index 53ecd4c5fadbd8246fbe0d2fe32b5d9ccdf7bc74..c859124fb7401b151ef0581091a0c5e766554163 100644 --- a/woman/watch.py +++ b/woman/watch.py @@ -9,6 +9,8 @@ import Xlib import Xlib.display import Xlib.X +from contextlib import contextmanager + import argparse import i3ipc @@ -54,11 +56,29 @@ def event_workspace_deleted(w): if shared.output_of_workspace[master] == {}: shared.output_of_workspace.pop(master) +disable_on_workspace_focus = 0 +# Non-zero is true +# Base usage: Advance number on activate, decrease on deactivate +@contextmanager +def disable_on_workspace_focus_context(): + global disable_on_workspace_focus + try: + disable_on_workspace_focus += 1 + yield None + finally: + disable_on_workspace_focus -= 1 def i3_watch(): shared.init_thread() def on_workspace_focus(i3p, e): + if disable_on_workspace_focus > 0: + with shared.lock: + shared.output = e.current.ipc_data['output'] + master, slave = parse_workspace(e.current.name) + event_workspace_is_on((master, slave), shared.output) + shared.workspace_on[shared.output] = (master, slave) + return with shared.lock: output = e.current.ipc_data['output'] if output != shared.output: