aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Thorben Günther <admin@xenrox.net>2019-12-05 13:15:41 +0100
committerLibravatar Drew DeVault <sir@cmpwn.com>2019-12-06 15:52:33 -0500
commit6235423544b7e3feab5a6775cd4d06a3b171dd54 (patch)
treec2d2db345f6874274d28f078ee4ffeebea21a604
parentconfig: apply input type configs on reload (diff)
downloadsway-6235423544b7e3feab5a6775cd4d06a3b171dd54.tar.gz
sway-6235423544b7e3feab5a6775cd4d06a3b171dd54.tar.zst
sway-6235423544b7e3feab5a6775cd4d06a3b171dd54.zip
Improve transparency script
Transparency gets reset when the script is terminated. Added command line option to set transparency strength without changing the script. Added support for multiple displays.
-rwxr-xr-xcontrib/inactive-windows-transparency.py70
1 files changed, 53 insertions, 17 deletions
diff --git a/contrib/inactive-windows-transparency.py b/contrib/inactive-windows-transparency.py
index af26c017..15e2a91b 100755
--- a/contrib/inactive-windows-transparency.py
+++ b/contrib/inactive-windows-transparency.py
@@ -3,26 +3,62 @@
3# This script requires i3ipc-python package (install it from a system package manager 3# This script requires i3ipc-python package (install it from a system package manager
4# or pip). 4# or pip).
5# It makes inactive windows transparent. Use `transparency_val` variable to control 5# It makes inactive windows transparent. Use `transparency_val` variable to control
6# transparency strength in range of 0…1. 6# transparency strength in range of 0…1 or use the command line argument -o.
7 7
8import argparse
8import i3ipc 9import i3ipc
10import signal
11import sys
9 12
10transparency_val = '0.8';
11ipc = i3ipc.Connection()
12prev_focused = None
13 13
14for window in ipc.get_tree(): 14def on_window_focus(ipc, event):
15 if window.focused:
16 prev_focused = window
17 else:
18 window.command('opacity ' + transparency_val)
19
20def on_window_focus(ipc, focused):
21 global prev_focused 15 global prev_focused
22 if focused.container.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859 16 global prev_workspace
23 focused.container.command('opacity 1') 17
24 prev_focused.command('opacity ' + transparency_val) 18 focused = event.container
25 prev_focused = focused.container 19 workspace = ipc.get_tree().find_focused().workspace().num
20
21 if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
22 focused.command("opacity 1")
23 if workspace == prev_workspace:
24 prev_focused.command("opacity " + transparency_val)
25 prev_focused = focused
26 prev_workspace = workspace
27
28
29def remove_opacity(ipc):
30 for workspace in ipc.get_tree().workspaces():
31 for w in workspace:
32 w.command("opacity 1")
33 ipc.main_quit()
34 sys.exit(0)
35
36
37if __name__ == "__main__":
38 transparency_val = "0.80"
39
40 parser = argparse.ArgumentParser(
41 description="This script allows you to set the transparency of unfocused windows in sway."
42 )
43 parser.add_argument(
44 "--opacity",
45 "-o",
46 type=str,
47 default=transparency_val,
48 help="set opacity value in range 0...1",
49 )
50 args = parser.parse_args()
51
52 ipc = i3ipc.Connection()
53 prev_focused = None
54 prev_workspace = ipc.get_tree().find_focused().workspace().num
26 55
27ipc.on("window::focus", on_window_focus) 56 for window in ipc.get_tree():
28ipc.main() 57 if window.focused:
58 prev_focused = window
59 else:
60 window.command("opacity " + args.opacity)
61 for sig in [signal.SIGINT, signal.SIGTERM]:
62 signal.signal(sig, lambda signal, frame: remove_opacity(ipc))
63 ipc.on("window::focus", on_window_focus)
64 ipc.main()