diff --git a/src/common/console/c_enginecmds.cpp b/src/common/console/c_enginecmds.cpp index 0af6f3b56a..0845ac8227 100644 --- a/src/common/console/c_enginecmds.cpp +++ b/src/common/console/c_enginecmds.cpp @@ -52,6 +52,10 @@ #include "version.h" #include "findfile.h" #include "md5.h" +#include "i_specialpaths.h" + +void I_OpenShellFolder(const char*); +void I_OpenShellFile(const char*); extern FILE* Logfile; @@ -336,3 +340,19 @@ CCMD(printlocalized) } } + +CCMD(opensaves) +{ + I_OpenShellFolder(M_GetSavegamesPath().GetChars()); +} + +CCMD(openscreenshots) +{ + I_OpenShellFolder(M_GetScreenshotsPath().GetChars()); +} + +CCMD(openconfig) +{ + I_OpenShellFile(M_GetConfigPath(false).GetChars()); +} + diff --git a/src/common/platform/posix/cocoa/i_system.mm b/src/common/platform/posix/cocoa/i_system.mm index 76a38cbcf7..02cad154ab 100644 --- a/src/common/platform/posix/cocoa/i_system.mm +++ b/src/common/platform/posix/cocoa/i_system.mm @@ -170,3 +170,18 @@ unsigned int I_MakeRNGSeed() { return static_cast(arc4random()); } + +void I_OpenShellFolder(const char* folder) +{ + std::string x = (std::string)"open " + (std::string)folder; + Printf("Opening folder: %s\n", folder); + std::system(x.c_str()); +} + +void I_OpenShellFile(const char* file) +{ + std::string x = (std::string)"open " + (std::string)file; + x.erase(x.find_last_of('/'), std::string::npos); + Printf("Opening folder to file: %s\n", file); + std::system(x.c_str()); +} diff --git a/src/common/platform/posix/sdl/i_system.cpp b/src/common/platform/posix/sdl/i_system.cpp index a63b15a9f2..3dd43e98d8 100644 --- a/src/common/platform/posix/sdl/i_system.cpp +++ b/src/common/platform/posix/sdl/i_system.cpp @@ -431,3 +431,19 @@ unsigned int I_MakeRNGSeed() } return seed; } + +void I_OpenShellFolder(const char* folder) +{ + std::string x = (std::string)"xdg-open " + (std::string)folder; + Printf("Opening folder: %s\n", folder); + std::system(x.c_str()); +} + +void I_OpenShellFile(const char* file) +{ + std::string x = (std::string)"xdg-open " + (std::string)file; + x.erase(x.find_last_of('/'), std::string::npos); + Printf("Opening folder to file: %s\n", file); + std::system(x.c_str()); +} + diff --git a/src/common/platform/win32/i_specialpaths.cpp b/src/common/platform/win32/i_specialpaths.cpp index bbd3c4976b..777d4fc63a 100644 --- a/src/common/platform/win32/i_specialpaths.cpp +++ b/src/common/platform/win32/i_specialpaths.cpp @@ -283,7 +283,7 @@ FString M_GetScreenshotsPath() if (!UseKnownFolders()) { - path << progdir << "/Screenshots/"; + path << progdir << "Screenshots/"; } else if (GetKnownFolder(-1, MyFOLDERID_Screenshots, true, path)) { diff --git a/src/common/platform/win32/i_system.cpp b/src/common/platform/win32/i_system.cpp index 5459b7458c..d9dcd221d5 100644 --- a/src/common/platform/win32/i_system.cpp +++ b/src/common/platform/win32/i_system.cpp @@ -6,6 +6,7 @@ ** Copyright 1998-2009 Randy Heit ** Copyright (C) 2007-2012 Skulltag Development Team ** Copyright (C) 2007-2016 Zandronum Development Team +** Copyright (C) 2017-2022 GZDoom Development Team ** All rights reserved. ** ** Redistribution and use in source and binary forms, with or without @@ -49,6 +50,7 @@ #include #include #include +#include #include #include #include @@ -62,6 +64,8 @@ #include #include +#include + #include "hardware.h" #include "printf.h" @@ -955,3 +959,21 @@ void I_SetThreadNumaNode(std::thread &thread, int numaNode) SetThreadAffinityMask(handle, (DWORD_PTR)numaNodes[numaNode].affinityMask); } } + +void I_OpenShellFolder(const char* folder) +{ + FString proc = folder; + proc.ReplaceChars('/', '\\'); + Printf("Opening folder: %s\n", proc.GetChars()); + ShellExecuteW(NULL, L"open", L"explorer.exe", proc.WideString().c_str(), NULL, SW_SHOWNORMAL); +} + +void I_OpenShellFile(const char* file) +{ + FString proc = file; + proc.ReplaceChars('/', '\\'); + Printf("Opening folder to file: %s\n", proc.GetChars()); + proc.Format("/select,%s", proc.GetChars()); + ShellExecuteW(NULL, L"open", L"explorer.exe", proc.WideString().c_str(), NULL, SW_SHOWNORMAL); +} + diff --git a/src/console/c_cmds.cpp b/src/console/c_cmds.cpp index a45bc1ccae..4037f81896 100644 --- a/src/console/c_cmds.cpp +++ b/src/console/c_cmds.cpp @@ -73,7 +73,7 @@ extern FILE *Logfile; extern bool insave; -CVAR (Bool, sv_cheats, false, CVAR_SERVERINFO | CVAR_LATCH) +CVAR (Bool, sv_cheats, false, CVAR_SERVERINFO) CVAR (Bool, sv_unlimited_pickup, false, CVAR_SERVERINFO) CVAR (Int, cl_blockcheats, 0, 0) diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 08e5125d5b..337ffe8e8f 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -380,6 +380,9 @@ OptionMenu "OptionsMenu" protected SafeCommand "$OPTMNU_WRITEINI", "writeini" Command "$OPTMNU_CONSOLE", "menuconsole" + Command "$OPTMNU_OPENCONFIG", "openconfig" + Command "$OPTMNU_OPENSCREENSHOTS", "openscreenshots" + Command "$OPTMNU_OPENSAVES", "opensaves" StaticText " " }