diff --git a/desmume/src/gtk/desmume_config.cpp b/desmume/src/gtk/desmume_config.cpp index b70a3f4f7..312d2d5c9 100644 --- a/desmume/src/gtk/desmume_config.cpp +++ b/desmume/src/gtk/desmume_config.cpp @@ -19,20 +19,35 @@ */ #include +#include #include "ctrlssdl.h" #include "desmume_config.h" -static const gchar *desmume_config_file = ".desmume.ini"; +static const gchar *desmume_old_config_file = ".desmume.ini"; +static const gchar *desmume_config_dir = "desmume"; +static const gchar *desmume_config_file = "config"; GKeyFile *desmume_config_read_file(const u16 *kb_cfg) { - gchar *config_file; + gchar *config_file, *config_dir, *old_config_file; GKeyFile *keyfile; GError *error = NULL; gboolean ret; - config_file = g_build_filename(g_get_home_dir(), desmume_config_file, NULL); + old_config_file = g_build_filename(g_get_home_dir(), desmume_old_config_file, NULL); + config_file = g_build_filename(g_get_user_config_dir(), desmume_config_dir, desmume_config_file, NULL); + + config_dir = g_build_filename(g_get_user_config_dir(), desmume_config_dir, NULL); + g_mkdir_with_parents(config_dir, 0755); + + if (!g_file_test(config_file, G_FILE_TEST_IS_REGULAR) && g_file_test(old_config_file, G_FILE_TEST_IS_REGULAR)) { + ret = g_rename(old_config_file, config_file); + if (ret) { + g_printerr("Failed to move old config file %s to new location %s \n", old_config_file, config_file); + } + } + keyfile = g_key_file_new(); ret = g_key_file_load_from_file(keyfile, config_file, G_KEY_FILE_NONE, &error); if (!ret) { @@ -40,6 +55,8 @@ GKeyFile *desmume_config_read_file(const u16 *kb_cfg) } g_free(config_file); + g_free(config_dir); + g_free(old_config_file); load_default_config(kb_cfg); desmume_config_read_keys(keyfile); @@ -56,12 +73,15 @@ void desmume_config_dispose(GKeyFile *keyfile) static gboolean desmume_config_write_file(GKeyFile *keyfile) { gchar *config_file; + gchar *config_dir; gchar *data; GError *error = NULL; gsize length; gboolean ret = TRUE; - config_file = g_build_filename(g_get_home_dir(), desmume_config_file, NULL); + config_dir = g_build_filename(g_get_user_config_dir(), desmume_config_dir, NULL); + g_mkdir_with_parents(config_dir, 0755); + config_file = g_build_filename(g_get_user_config_dir(), desmume_config_dir, desmume_config_file, NULL); data = g_key_file_to_data(keyfile, &length, NULL); ret = g_file_set_contents(config_file, data, length, &error); if (!ret) { @@ -69,6 +89,7 @@ static gboolean desmume_config_write_file(GKeyFile *keyfile) } g_free(config_file); + g_free(config_dir); g_free(data); return ret; diff --git a/desmume/src/path.h b/desmume/src/path.h index 607e21163..58bfbac82 100644 --- a/desmume/src/path.h +++ b/desmume/src/path.h @@ -84,7 +84,8 @@ public: while (p >= pathToModule && *p != '\\') p--; if (++p >= pathToModule) *p = 0; #else - char *cwd = g_get_current_dir(); + char *cwd = g_build_filename(g_get_user_config_dir(), "desmume", NULL); + g_mkdir_with_parents(cwd, 0755); strncpy(pathToModule, cwd, MAX_PATH); g_free(cwd); #endif