From 0153ca561bbae082ab9f7cdc93844c4dcd6be8ef Mon Sep 17 00:00:00 2001 From: Thai Hoang Date: Wed, 25 Mar 2026 17:44:38 +0700 Subject: [PATCH] Fix: ensure screenshots directory exists before saving The fallback paths in processRegion, processFullscreen, and processMonitorScreen set screenshotsDir but never call mkdir -p to create it. This causes save failures when ~/Pictures/Screenshots does not exist and initialize() was not called beforehand. Extract ensureScreenshotsDir() helper that both sets the fallback directory and runs mkdir -p, then use it in all three functions. Co-Authored-By: Claude Opus 4.6 --- modules/services/Screenshot.qml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/services/Screenshot.qml b/modules/services/Screenshot.qml index d6bcd485..c640b672 100644 --- a/modules/services/Screenshot.qml +++ b/modules/services/Screenshot.qml @@ -72,6 +72,15 @@ QtObject { command: ["mkdir", "-p", root.screenshotsDir] } + // Ensure screenshotsDir is set and the directory exists + function ensureScreenshotsDir() { + if (root.screenshotsDir === "") { + root.screenshotsDir = Quickshell.env("HOME") + "/Pictures/Screenshots" + } + ensureDirProcess.command = ["mkdir", "-p", root.screenshotsDir] + ensureDirProcess.running = true + } + // Dynamic list of freeze processes, managed via bash for simplicity? // Or we can use a single shell script that forks grim for each monitor. // "grim -o name1 path1 & grim -o name2 path2 & wait" @@ -301,9 +310,7 @@ QtObject { if (root.captureMode === "lens") { root.finalPath = root.lensPath; } else { - if (root.screenshotsDir === "") { - root.screenshotsDir = Quickshell.env("HOME") + "/Pictures/Screenshots" - } + root.ensureScreenshotsDir() var filename = "Screenshot_" + getTimestamp() + ".png" root.finalPath = root.screenshotsDir + "/" + filename } @@ -366,9 +373,7 @@ QtObject { if (root.captureMode === "lens") { root.finalPath = root.lensPath; } else { - if (root.screenshotsDir === "") { - root.screenshotsDir = Quickshell.env("HOME") + "/Pictures/Screenshots" - } + root.ensureScreenshotsDir() var filename = "Screenshot_" + getTimestamp() + ".png" root.finalPath = root.screenshotsDir + "/" + filename } @@ -405,9 +410,7 @@ QtObject { if (root.captureMode === "lens") { root.finalPath = root.lensPath; } else { - if (root.screenshotsDir === "") { - root.screenshotsDir = Quickshell.env("HOME") + "/Pictures/Screenshots" - } + root.ensureScreenshotsDir() var filename = "Screenshot_" + getTimestamp() + ".png" root.finalPath = root.screenshotsDir + "/" + filename }