diff options
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/inactive-windows-transparency.py | 70 |
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 | ||
8 | import argparse | ||
8 | import i3ipc | 9 | import i3ipc |
10 | import signal | ||
11 | import sys | ||
9 | 12 | ||
10 | transparency_val = '0.8'; | ||
11 | ipc = i3ipc.Connection() | ||
12 | prev_focused = None | ||
13 | 13 | ||
14 | for window in ipc.get_tree(): | 14 | def on_window_focus(ipc, event): |
15 | if window.focused: | ||
16 | prev_focused = window | ||
17 | else: | ||
18 | window.command('opacity ' + transparency_val) | ||
19 | |||
20 | def 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 | |||
29 | def 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 | |||
37 | if __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 | ||
27 | ipc.on("window::focus", on_window_focus) | 56 | for window in ipc.get_tree(): |
28 | ipc.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() | ||