diff options
| author | Simon Tatham <anakin@pobox.com> | 2023-04-23 14:58:31 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2023-04-23 14:58:31 +0100 |
| commit | f01b1674bd862e1792b5216bd5d832cd52a170ae (patch) | |
| tree | 08463cfcd00655b6c4e4b8f355bb37f60b33cddc /gtk.c | |
| parent | 1fa28340e8e8d8459456469c72f7156ccf1493f1 (diff) | |
| download | puzzles-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.c | 28 |
1 files changed, 15 insertions, 13 deletions
@@ -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; |