Allow relative directories for `screenshot_path`, tweak default path (#9122)
authorHugo Locurcio <hugo.locurcio@hugo.pro>
Mon, 6 Apr 2020 14:54:12 +0000 (16:54 +0200)
committerGitHub <noreply@github.com>
Mon, 6 Apr 2020 14:54:12 +0000 (16:54 +0200)
This will likely be more intuitive for users and should play better
with sandboxed distributions such as Flatpak.

In addition, the screenshot directory will now be created if it doesn't
exist already.

builtin/settingtypes.txt
src/client/client.cpp
src/defaultsettings.cpp

index 1f2889b45e88d1a0c9bfd47a5f3de1f621ca6990..a6cf8de60870323ae6f5d25458e299ebfc344705 100644 (file)
@@ -903,8 +903,9 @@ fallback_font_shadow_alpha (Fallback font shadow alpha) int 128 0 255
 #    This font will be used for certain languages or if the default font is unavailable.
 fallback_font_path (Fallback font path) filepath fonts/DroidSansFallbackFull.ttf
 
-#    Path to save screenshots at.
-screenshot_path (Screenshot folder) path
+#    Path to save screenshots at. Can be an absolute or relative path.
+#    The folder will be created if it doesn't already exist.
+screenshot_path (Screenshot folder) path screenshots
 
 #    Format of screenshots.
 screenshot_format (Screenshot format) enum png png,jpg,bmp,pcx,ppm,tga
index c6d28ce806b28daaf5ecbc23981d43a513c16d7f..e15391ddeb9436042ceb8fb67cbd06bae83de51f 100644 (file)
@@ -1780,13 +1780,24 @@ void Client::makeScreenshot()
        char timetstamp_c[64];
        strftime(timetstamp_c, sizeof(timetstamp_c), "%Y%m%d_%H%M%S", tm);
 
-       std::string filename_base = g_settings->get("screenshot_path")
+       std::string screenshot_dir;
+
+       if (fs::IsPathAbsolute(g_settings->get("screenshot_path")))
+               screenshot_dir = g_settings->get("screenshot_path");
+       else
+               screenshot_dir = porting::path_user + DIR_DELIM + g_settings->get("screenshot_path");
+
+       std::string filename_base = screenshot_dir
                        + DIR_DELIM
                        + std::string("screenshot_")
                        + std::string(timetstamp_c);
        std::string filename_ext = "." + g_settings->get("screenshot_format");
        std::string filename;
 
+       // Create the directory if it doesn't already exist.
+       // Otherwise, saving the screenshot would fail.
+       fs::CreateDir(screenshot_dir);
+
        u32 quality = (u32)g_settings->getS32("screenshot_quality");
        quality = MYMIN(MYMAX(quality, 0), 100) / 100.0 * 255;
 
index 472522bf4246383fbcc359dc1e484d00634dfdc1..b6b1ce1f2a9a5b1789a80d0c6a248946b96409ae 100644 (file)
@@ -48,7 +48,7 @@ void set_default_settings(Settings *settings)
        settings->setDefault("pitch_move", "false");
        settings->setDefault("fast_move", "false");
        settings->setDefault("noclip", "false");
-       settings->setDefault("screenshot_path", ".");
+       settings->setDefault("screenshot_path", "screenshots");
        settings->setDefault("screenshot_format", "png");
        settings->setDefault("screenshot_quality", "0");
        settings->setDefault("client_unload_unused_data_timeout", "600");