From 6c66e2b2de63b6a8159835516ee229bda3253bc2 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Sun, 23 Apr 2023 10:58:53 +0100 Subject: Support preferences in the GTK frontend. Finally, some user-visible behaviour changes as a payoff for all that preparation work! In this commit, the GTK puzzles get a 'Preferences' option in the menu, which presents a dialog box to configure the preference settings. On closing that dialog box, the puzzle preferences are enacted immediately, and also saved to a configuration file where the next run of the same puzzle will reload them. The default file location is ~/.config/sgt-puzzles/.conf, although you can override the .config dir via $XDG_CONFIG_HOME or override the Puzzles-specific subdir with $SGT_PUZZLES_DIR. This is the first commit that actually exposes all the new preferences work to the user, and therefore, I've also added documentation of all the current preference options. --- misc.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'misc.c') diff --git a/misc.c b/misc.c index 6b85533..f0c4abd 100644 --- a/misc.c +++ b/misc.c @@ -3,6 +3,7 @@ */ #include +#include #ifdef NO_TGMATH_H # include #else @@ -500,4 +501,34 @@ char *button2label(int button) return NULL; } +char *make_prefs_path(const char *dir, const char *sep, + const game *game, const char *suffix) +{ + size_t dirlen = strlen(dir); + size_t seplen = strlen(sep); + size_t gamelen = strlen(game->name); + size_t suffixlen = strlen(suffix); + char *path, *p; + const char *q; + + path = snewn(dirlen + seplen + gamelen + suffixlen + 1, char); + p = path; + + memcpy(p, dir, dirlen); + p += dirlen; + + memcpy(p, sep, seplen); + p += seplen; + + for (q = game->name; *q; q++) + if (*q != ' ') + *p++ = tolower((unsigned char)*q); + + memcpy(p, suffix, suffixlen); + p += suffixlen; + + *p = '\0'; + return path; +} + /* vim: set shiftwidth=4 tabstop=8: */ -- cgit v1.1