contrib: add active window opacities.

This commit is contained in:
Aelfsyg 2022-04-24 13:55:42 +01:00
parent fd8b9d1f4d
commit 6f8b31bb8e

View file

@ -7,15 +7,27 @@
import argparse import argparse
import i3ipc import i3ipc
import json
import signal import signal
import sys import sys
from functools import partial from functools import partial
def ignored(window):
global ignore
return window.app_id in ignore
def on_window_focus(inactive_opacity, ipc, event): class Opts:
def __init__(self, args):
self.ignore = args.ignore
self.active_opacities = json.loads(args.active_opacities)
self.inactive_opacity = args.opacity
def set_focused_opacity(window, opts):
opacity = opts.active_opacities.get(window.app_id, 1)
cmd = "opacity {}".format(opacity)
window.command(cmd)
return
def on_window_focus(opts, ipc, event):
global prev_focused global prev_focused
global prev_workspace global prev_workspace
@ -28,10 +40,10 @@ def on_window_focus(inactive_opacity, ipc, event):
workspace = focused_workspace.workspace().num workspace = focused_workspace.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") set_focused_opacity(focused, opts);
if workspace == prev_workspace: if workspace == prev_workspace:
if not ignored(prev_focused): if not window.app_id in opts.ignore:
prev_focused.command("opacity " + inactive_opacity) prev_focused.command("opacity " + opts.inactive_opacity)
prev_focused = focused prev_focused = focused
prev_workspace = workspace prev_workspace = workspace
@ -57,6 +69,13 @@ if __name__ == "__main__":
default=transparency_val, default=transparency_val,
help="set opacity value in range 0...1", help="set opacity value in range 0...1",
) )
parser.add_argument(
"--active-opacities",
"-a",
type=str,
default="{}",
help="A dictionary of applications and their active opacities."
)
parser.add_argument( parser.add_argument(
"--ignore", "--ignore",
"-i", "-i",
@ -66,7 +85,7 @@ if __name__ == "__main__":
nargs="+" nargs="+"
) )
args = parser.parse_args() args = parser.parse_args()
ignore = args.ignore opts = Opts(args)
ipc = i3ipc.Connection() ipc = i3ipc.Connection()
prev_focused = None prev_focused = None
@ -75,9 +94,9 @@ if __name__ == "__main__":
for window in ipc.get_tree(): for window in ipc.get_tree():
if window.focused: if window.focused:
prev_focused = window prev_focused = window
elif not ignored(window): elif not window.app_id in opts.ignore:
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: remove_opacity(ipc))
ipc.on("window::focus", partial(on_window_focus, args.opacity)) ipc.on("window::focus", partial(on_window_focus, opts))
ipc.main() ipc.main()