From a846565d58d564d52fa597ba24f88e59a9d8add8 Mon Sep 17 00:00:00 2001 From: gbaranski Date: Thu, 25 Feb 2021 15:47:27 +0100 Subject: [PATCH 1/3] feat: option to set focused window opacity --- contrib/inactive-windows-transparency.py | 36 ++++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/contrib/inactive-windows-transparency.py b/contrib/inactive-windows-transparency.py index b81134dd4..658424c3d 100755 --- a/contrib/inactive-windows-transparency.py +++ b/contrib/inactive-windows-transparency.py @@ -11,37 +11,30 @@ import signal import sys from functools import partial -def on_window_focus(inactive_opacity, ipc, event): +def on_window_focus(not_focused_opacity, focused_opacity, ipc, event): global prev_focused global prev_workspace - focused_workspace = ipc.get_tree().find_focused() - - if focused_workspace == None: - return - focused = event.container - workspace = focused_workspace.workspace().num + workspace = ipc.get_tree().find_focused().workspace().num if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859 - focused.command("opacity 1") + focused.command("opacity " + focused_opacity) if workspace == prev_workspace: - prev_focused.command("opacity " + inactive_opacity) + prev_focused.command("opacity " + not_focused_opacity) prev_focused = focused prev_workspace = workspace -def remove_opacity(ipc): +def restore_opacity(ipc, opacity): for workspace in ipc.get_tree().workspaces(): for w in workspace: - w.command("opacity 1") + w.command("opacity " + opacity) ipc.main_quit() sys.exit(0) if __name__ == "__main__": - transparency_val = "0.80" - parser = argparse.ArgumentParser( description="This script allows you to set the transparency of unfocused windows in sway." ) @@ -49,8 +42,15 @@ if __name__ == "__main__": "--opacity", "-o", type=str, - default=transparency_val, - help="set opacity value in range 0...1", + default="0.80", + help="set unfocused window opacity value in range 0...1", + ) + parser.add_argument( + "--focused-opacity", + "-f", + type=str, + default="1.00", + help="set focused window opacity value in range 0...1", ) args = parser.parse_args() @@ -64,6 +64,6 @@ if __name__ == "__main__": else: window.command("opacity " + args.opacity) for sig in [signal.SIGINT, signal.SIGTERM]: - signal.signal(sig, lambda signal, frame: remove_opacity(ipc)) - ipc.on("window::focus", partial(on_window_focus, args.opacity)) - ipc.main() \ No newline at end of file + signal.signal(sig, lambda signal, frame: restore_opacity(ipc, args.focused_opacity)) + ipc.on("window::focus", partial(on_window_focus, args.opacity, args.focused_opacity)) + ipc.main() From 7845cbd275f95cbe59a7a910a95c9e9ad7b854e6 Mon Sep 17 00:00:00 2001 From: gbaranski Date: Thu, 25 Feb 2021 16:16:40 +0100 Subject: [PATCH 2/3] feat: add checking match regexp on focused opacity --- contrib/inactive-windows-transparency.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/contrib/inactive-windows-transparency.py b/contrib/inactive-windows-transparency.py index 658424c3d..18e83588c 100755 --- a/contrib/inactive-windows-transparency.py +++ b/contrib/inactive-windows-transparency.py @@ -9,9 +9,10 @@ import argparse import i3ipc import signal import sys +import re from functools import partial -def on_window_focus(not_focused_opacity, focused_opacity, ipc, event): +def on_window_focus(not_focused_opacity, focused_opacity, focused_regex, ipc, event): global prev_focused global prev_workspace @@ -19,17 +20,21 @@ def on_window_focus(not_focused_opacity, focused_opacity, ipc, event): workspace = ipc.get_tree().find_focused().workspace().num if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859 - focused.command("opacity " + focused_opacity) + if re.match(focused_regex, focused.app_id): + focused.command("opacity " + focused_opacity) + else: + focused.command("opacity 1") + if workspace == prev_workspace: prev_focused.command("opacity " + not_focused_opacity) prev_focused = focused prev_workspace = workspace -def restore_opacity(ipc, opacity): +def restore_opacity(ipc): for workspace in ipc.get_tree().workspaces(): for w in workspace: - w.command("opacity " + opacity) + w.command("opacity 1") ipc.main_quit() sys.exit(0) @@ -52,6 +57,12 @@ if __name__ == "__main__": default="1.00", help="set focused window opacity value in range 0...1", ) + parser.add_argument( + "--focused-appid", + type=str, + default=".*", + help="set focused window opacity only for app_ids which match this regexp", + ) args = parser.parse_args() ipc = i3ipc.Connection() @@ -64,6 +75,6 @@ if __name__ == "__main__": else: window.command("opacity " + args.opacity) for sig in [signal.SIGINT, signal.SIGTERM]: - signal.signal(sig, lambda signal, frame: restore_opacity(ipc, args.focused_opacity)) - ipc.on("window::focus", partial(on_window_focus, args.opacity, args.focused_opacity)) + signal.signal(sig, lambda signal, frame: restore_opacity(ipc)) + ipc.on("window::focus", partial(on_window_focus, args.opacity, args.focused_opacity, args.focused_appid)) ipc.main() From 1e44f3fde35de902d27fe093880c09c08a8514b8 Mon Sep 17 00:00:00 2001 From: gbaranski Date: Thu, 25 Feb 2021 16:30:34 +0100 Subject: [PATCH 3/3] fix: crashing if app_id is invalid string --- contrib/inactive-windows-transparency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/inactive-windows-transparency.py b/contrib/inactive-windows-transparency.py index 18e83588c..7792d99a3 100755 --- a/contrib/inactive-windows-transparency.py +++ b/contrib/inactive-windows-transparency.py @@ -20,7 +20,7 @@ def on_window_focus(not_focused_opacity, focused_opacity, focused_regex, ipc, ev workspace = ipc.get_tree().find_focused().workspace().num if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859 - if re.match(focused_regex, focused.app_id): + if isinstance(focused.app_id, str) and re.match(focused_regex, focused.app_id): focused.command("opacity " + focused_opacity) else: focused.command("opacity 1")