diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/caelestia/subcommands/screenshot.py | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/src/caelestia/subcommands/screenshot.py b/src/caelestia/subcommands/screenshot.py index 73d65f7..a535f6f 100644 --- a/src/caelestia/subcommands/screenshot.py +++ b/src/caelestia/subcommands/screenshot.py @@ -1,4 +1,5 @@ import subprocess +import time from argparse import Namespace from datetime import datetime @@ -19,19 +20,28 @@ class Command: self.fullscreen() def region(self) -> None: - freeze_proc = None + if self.args.region == "slurp": + freeze_proc = None - if self.args.freeze: - freeze_proc = subprocess.Popen(["wayfreeze", "--hide-cursor"]) + if self.args.freeze: + freeze_proc = subprocess.Popen(["wayfreeze", "--hide-cursor"]) - if self.args.region == "slurp": - ws = hypr.message("activeworkspace")["id"] - geoms = [ - f"{','.join(map(str, c['at']))} {'x'.join(map(str, c['size']))}" - for c in hypr.message("clients") - if c["workspace"]["id"] == ws - ] - region = subprocess.check_output(["slurp"], input="\n".join(geoms), text=True) + try: + ws = hypr.message("activeworkspace")["id"] + geoms = [ + f"{','.join(map(str, c['at']))} {'x'.join(map(str, c['size']))}" + for c in hypr.message("clients") + if c["workspace"]["id"] == ws + ] + + # Delay to ensure wayfreeze starts first + if freeze_proc: + time.sleep(0.01) + + region = subprocess.check_output(["slurp"], input="\n".join(geoms), text=True) + finally: + if freeze_proc: + freeze_proc.kill() else: region = self.args.region @@ -40,9 +50,6 @@ class Command: swappy.stdin.write(sc_data) swappy.stdin.close() - if freeze_proc: - freeze_proc.kill() - def fullscreen(self) -> None: sc_data = subprocess.check_output(["grim", "-"]) |