write screenshots to desktop directory OR home directory.
This commit is contained in:
parent
cf38a9a334
commit
f72ce6de33
|
@ -168,6 +168,20 @@ set(MAIN_SOURCE
|
|||
|
||||
source_group("MKXP Source" FILES ${MAIN_SOURCE} ${MAIN_HEADERS})
|
||||
|
||||
## Platform source ##
|
||||
|
||||
if(LINUX)
|
||||
set(PLATFORM_SOURCE
|
||||
src/platform_linux.cpp
|
||||
)
|
||||
elseif(APPLE)
|
||||
set(PLATFORM_SOURCE
|
||||
src/platform_osx.mm
|
||||
)
|
||||
else()
|
||||
message(FATAL_ERROR "No platform source for this platform")
|
||||
endif()
|
||||
|
||||
## Setup embedded source ##
|
||||
|
||||
set(EMBEDDED_INPUT
|
||||
|
@ -340,6 +354,7 @@ add_executable(${PROJECT_NAME} MACOSX_BUNDLE
|
|||
${BINDING_HEADERS}
|
||||
${BINDING_SOURCE}
|
||||
${EMBEDDED_SOURCE}
|
||||
${PLATFORM_SOURCE}
|
||||
)
|
||||
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
|
|
|
@ -49,7 +49,9 @@ Config::Config()
|
|||
anyAltToggleFS(false),
|
||||
allowSymlinks(false),
|
||||
pathCache(true)
|
||||
{}
|
||||
{
|
||||
setupPaths();
|
||||
}
|
||||
|
||||
void Config::read()
|
||||
{
|
||||
|
|
|
@ -50,6 +50,8 @@ struct Config
|
|||
|
||||
std::string iconPath;
|
||||
|
||||
std::string desktopPath;
|
||||
|
||||
std::string customScript;
|
||||
std::vector<std::string> rtps;
|
||||
|
||||
|
@ -63,6 +65,8 @@ struct Config
|
|||
|
||||
void read();
|
||||
void readGameINI();
|
||||
private:
|
||||
void setupPaths();
|
||||
};
|
||||
|
||||
#endif // CONFIG_H
|
||||
|
|
|
@ -544,7 +544,8 @@ struct GraphicsPrivate
|
|||
snprintf(filename, sizeof(filename), "%d%02d%02d-%02d%02d%02d.png",
|
||||
tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
|
||||
|
||||
writeScreenshot(filename);
|
||||
std::string path = threadData->config.desktopPath + filename;
|
||||
writeScreenshot(path.c_str());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
inline void ensure_trailing_slash(std::string& path)
|
||||
{
|
||||
if (path.size() && path[path.size()-1] != '/') {
|
||||
path += "/";
|
||||
}
|
||||
}
|
||||
|
||||
static std::string find_xdg_config_dir()
|
||||
{
|
||||
std::string path;
|
||||
const char* env = getenv("XDG_CONFIG_HOME");
|
||||
if (env) {
|
||||
path = env;
|
||||
ensure_trailing_slash(path);
|
||||
} else {
|
||||
env = getenv("HOME");
|
||||
if (!env) {
|
||||
return "";
|
||||
}
|
||||
path = env;
|
||||
ensure_trailing_slash(path);
|
||||
path += ".config/";
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
static std::string get_desktop_dir()
|
||||
{
|
||||
std::string desktopPath;
|
||||
|
||||
std::string cfg_dir = find_xdg_config_dir();
|
||||
if (!cfg_dir.empty()) {
|
||||
std::string cfg_file = cfg_dir + "user-dirs.dirs";
|
||||
if (access(cfg_file.c_str(), F_OK) == 0) {
|
||||
std::ifstream fin(cfg_file.c_str());
|
||||
std::string line;
|
||||
while (std::getline(fin, line)) {
|
||||
/* skip blank and comment lines */
|
||||
if (line.empty() || line[0] == '#') continue;
|
||||
|
||||
std::vector<std::string> parts;
|
||||
boost::split(parts, line, boost::is_any_of("="));
|
||||
if (parts.size() == 2) {
|
||||
std::string key = boost::trim_copy(parts[0]);
|
||||
if (key == "XDG_DESKTOP_DIR") {
|
||||
std::string val = boost::trim_copy_if(parts[1], boost::is_any_of(" \n\r\t\""));
|
||||
desktopPath = val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const char* home = getenv("HOME");
|
||||
if (home) {
|
||||
size_t pos = desktopPath.find("$HOME");
|
||||
if (pos != desktopPath.npos) {
|
||||
desktopPath.replace(pos, pos + 5, home);
|
||||
}
|
||||
pos = desktopPath.find("${HOME}");
|
||||
if (pos != desktopPath.npos) {
|
||||
desktopPath.replace(pos, pos + 7, home);
|
||||
}
|
||||
}
|
||||
if (desktopPath.empty() || access(desktopPath.c_str(), F_OK) != 0) {
|
||||
if (home) {
|
||||
desktopPath = home;
|
||||
ensure_trailing_slash(desktopPath);
|
||||
if (access((desktopPath + "Desktop").c_str(), F_OK) == 0) {
|
||||
desktopPath += "Desktop/";
|
||||
}
|
||||
} else {
|
||||
desktopPath = "";
|
||||
}
|
||||
}
|
||||
ensure_trailing_slash(desktopPath);
|
||||
return desktopPath;
|
||||
}
|
||||
|
||||
void Config::setupPaths()
|
||||
{
|
||||
desktopPath = get_desktop_dir();
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#include "config.h"
|
||||
|
||||
|
||||
void Config::setupPaths()
|
||||
{
|
||||
|
||||
}
|
Loading…
Reference in New Issue