aboutsummaryrefslogtreecommitdiff
path: root/gtk.c
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2023-04-23 14:58:31 +0100
committerSimon Tatham <anakin@pobox.com>2023-04-23 14:58:31 +0100
commitf01b1674bd862e1792b5216bd5d832cd52a170ae (patch)
tree08463cfcd00655b6c4e4b8f355bb37f60b33cddc /gtk.c
parent1fa28340e8e8d8459456469c72f7156ccf1493f1 (diff)
downloadpuzzles-f01b1674bd862e1792b5216bd5d832cd52a170ae.zip
puzzles-f01b1674bd862e1792b5216bd5d832cd52a170ae.tar.gz
puzzles-f01b1674bd862e1792b5216bd5d832cd52a170ae.tar.bz2
puzzles-f01b1674bd862e1792b5216bd5d832cd52a170ae.tar.xz
GTK: stop referring to &thegame in prefs I/O functions.
I had to do this in the Windows front end to cope with compiling in both COMBINED and one-puzzle mode: you can't refer to &thegame because it might not exist in this build, so instead, if you want to load/save preferences for a given midend, you ask that midend for _its_ game structure, and use that to make the necessary file names. On Unix, we don't have COMBINED mode. But now I've thought of it, this seems like a good idiom anyway, for the sake of futureproofing against the day someone decides to implement combined mode on Unix. delete_prefs() doesn't get passed a frontend _or_ a midend, so that just has to take a bare 'const game *' parameter, and in main() we pass &thegame to it. So that will still need changing in a combined mode, if one is ever added.
Diffstat (limited to 'gtk.c')
-rw-r--r--gtk.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/gtk.c b/gtk.c
index 21b408e..fa9108c 100644
--- a/gtk.c
+++ b/gtk.c
@@ -2988,7 +2988,7 @@ static char *prefs_dir(void)
return NULL;
}
-static char *prefs_path_general(const char *suffix)
+static char *prefs_path_general(const game *game, const char *suffix)
{
char *dir, *path;
@@ -2996,25 +2996,26 @@ static char *prefs_path_general(const char *suffix)
if (!dir)
return NULL;
- path = make_prefs_path(dir, "/", &thegame, suffix);
+ path = make_prefs_path(dir, "/", game, suffix);
sfree(dir);
return path;
}
-static char *prefs_path(void)
+static char *prefs_path(const game *game)
{
- return prefs_path_general(".conf");
+ return prefs_path_general(game, ".conf");
}
-static char *prefs_tmp_path(void)
+static char *prefs_tmp_path(const game *game)
{
- return prefs_path_general(".conf.tmp");
+ return prefs_path_general(game, ".conf.tmp");
}
static void load_prefs(frontend *fe)
{
- char *path = prefs_path();
+ const game *game = midend_which_game(fe->me);
+ char *path = prefs_path(game);
if (!path)
return;
FILE *fp = fopen(path, "r");
@@ -3030,9 +3031,10 @@ static void load_prefs(frontend *fe)
static char *save_prefs(frontend *fe)
{
+ const game *game = midend_which_game(fe->me);
char *dir_path = prefs_dir();
- char *file_path = prefs_path();
- char *tmp_path = prefs_tmp_path();
+ char *file_path = prefs_path(game);
+ char *tmp_path = prefs_tmp_path(game);
struct savefile_write_ctx wctx[1];
int fd;
bool cleanup_dir = false, cleanup_tmpfile = false;
@@ -3102,11 +3104,11 @@ static char *save_prefs(frontend *fe)
return err;
}
-static bool delete_prefs(char **msg)
+static bool delete_prefs(const game *game, char **msg)
{
char *dir_path = prefs_dir();
- char *file_path = prefs_path();
- char *tmp_path = prefs_tmp_path();
+ char *file_path = prefs_path(game);
+ char *tmp_path = prefs_tmp_path(game);
char *msgs[3];
int i, len, nmsgs = 0;
char *p;
@@ -4339,7 +4341,7 @@ int main(int argc, char **argv)
return 0;
} else if (delete_prefs_action) {
char *msg = NULL;
- bool ok = delete_prefs(&msg);
+ bool ok = delete_prefs(&thegame, &msg);
if (!ok) {
fputs(msg, stderr);
return 1;