This commit is contained in:
Grzegorz Baranski 2022-02-12 00:22:47 +01:00 committed by GitHub
commit 53cd8fed8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -9,29 +9,29 @@ import argparse
import i3ipc import i3ipc
import signal import signal
import sys import sys
import re
from functools import partial from functools import partial
def on_window_focus(inactive_opacity, ipc, event): def on_window_focus(not_focused_opacity, focused_opacity, focused_regex, ipc, event):
global prev_focused global prev_focused
global prev_workspace global prev_workspace
focused_workspace = ipc.get_tree().find_focused()
if focused_workspace == None:
return
focused = event.container 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 if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
focused.command("opacity 1") if isinstance(focused.app_id, str) and re.match(focused_regex, focused.app_id):
focused.command("opacity " + focused_opacity)
else:
focused.command("opacity 1")
if workspace == prev_workspace: if workspace == prev_workspace:
prev_focused.command("opacity " + inactive_opacity) prev_focused.command("opacity " + not_focused_opacity)
prev_focused = focused prev_focused = focused
prev_workspace = workspace prev_workspace = workspace
def remove_opacity(ipc): def restore_opacity(ipc):
for workspace in ipc.get_tree().workspaces(): for workspace in ipc.get_tree().workspaces():
for w in workspace: for w in workspace:
w.command("opacity 1") w.command("opacity 1")
@ -40,8 +40,6 @@ def remove_opacity(ipc):
if __name__ == "__main__": if __name__ == "__main__":
transparency_val = "0.80"
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="This script allows you to set the transparency of unfocused windows in sway." description="This script allows you to set the transparency of unfocused windows in sway."
) )
@ -49,8 +47,21 @@ if __name__ == "__main__":
"--opacity", "--opacity",
"-o", "-o",
type=str, type=str,
default=transparency_val, default="0.80",
help="set opacity value in range 0...1", 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",
)
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() args = parser.parse_args()
@ -64,6 +75,6 @@ if __name__ == "__main__":
else: else:
window.command("opacity " + args.opacity) window.command("opacity " + args.opacity)
for sig in [signal.SIGINT, signal.SIGTERM]: for sig in [signal.SIGINT, signal.SIGTERM]:
signal.signal(sig, lambda signal, frame: remove_opacity(ipc)) signal.signal(sig, lambda signal, frame: restore_opacity(ipc))
ipc.on("window::focus", partial(on_window_focus, args.opacity)) ipc.on("window::focus", partial(on_window_focus, args.opacity, args.focused_opacity, args.focused_appid))
ipc.main() ipc.main()