mirror of
https://github.com/swaywm/sway.git
synced 2026-04-22 06:46:27 -04:00
`workspaces()` doesn't include windows in the scratchpad which means they're left transparent when the script exits. This just iterates over the scratchpad containers as well and resets their opacity.
72 lines
No EOL
2 KiB
Python
Executable file
72 lines
No EOL
2 KiB
Python
Executable file
#!/usr/bin/python
|
|
|
|
# This script requires i3ipc-python package (install it from a system package manager
|
|
# or pip).
|
|
# It makes inactive windows transparent. Use `transparency_val` variable to control
|
|
# transparency strength in range of 0…1 or use the command line argument -o.
|
|
|
|
import argparse
|
|
import i3ipc
|
|
import signal
|
|
import sys
|
|
from functools import partial
|
|
|
|
def on_window_focus(inactive_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
|
|
|
|
if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
|
|
focused.command("opacity 1")
|
|
if workspace == prev_workspace:
|
|
prev_focused.command("opacity " + inactive_opacity)
|
|
prev_focused = focused
|
|
prev_workspace = workspace
|
|
|
|
|
|
def remove_opacity(ipc):
|
|
tree = ipc.get_tree()
|
|
for workspace in tree.workspaces():
|
|
for w in workspace:
|
|
w.command("opacity 1")
|
|
for w in tree.scratchpad():
|
|
w.command("opacity 1")
|
|
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."
|
|
)
|
|
parser.add_argument(
|
|
"--opacity",
|
|
"-o",
|
|
type=str,
|
|
default=transparency_val,
|
|
help="set opacity value in range 0...1",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
ipc = i3ipc.Connection()
|
|
prev_focused = None
|
|
prev_workspace = ipc.get_tree().find_focused().workspace().num
|
|
|
|
for window in ipc.get_tree():
|
|
if window.focused:
|
|
prev_focused = window
|
|
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() |