summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/caelestia/subcommands/screenshot.py35
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", "-"])