Skip to content

Commit

Permalink
Explicitly set entire keymap if it was changed pre-scancode
Browse files Browse the repository at this point in the history
  • Loading branch information
y5nw committed Jan 7, 2025
1 parent ddaf0f7 commit 11703a1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
8 changes: 4 additions & 4 deletions src/defaultsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -501,15 +501,15 @@ void set_default_settings()
#endif
}

void set_keyboard_defaults(Settings *settings, bool force_keycode)
{
#define USEKEY(name, value) settings->setIfMissing(name, value)
#if USE_SDL2
#define USEKEY2(name, value, _) USEKEY(name, value)
#define USEKEY2(name, value, legacy) USEKEY(name, (force_keycode) ? (legacy) : (value))
#else
#define USEKEY2(name, _, value) USEKEY(name, value)
#endif

void set_keyboard_defaults(Settings *settings)
{
auto has_touch = detect_touch();

USEKEY2("save_keys_as_scancodes", "true", "false");
Expand Down Expand Up @@ -611,6 +611,6 @@ void set_keyboard_defaults(Settings *settings)
USEKEY("keymap_quicktune_dec", "");
USEKEY("keymap_quicktune_inc", "");
#endif
}
#undef USEKEY
#undef USEKEY2
}
3 changes: 2 additions & 1 deletion src/defaultsettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ void set_default_settings();
/**
* Use default preset for settings
* @param settings pointer to settings
* @param force_keycode whether to unconditionally use keycode-based settings
*/
void set_keyboard_defaults(Settings *settings);
void set_keyboard_defaults(Settings *settings, bool force_keycode = false);
15 changes: 14 additions & 1 deletion src/migratesettings.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Minetest
// SPDX-License-Identifier: LGPL-2.1-or-later

#include "settings.h"
#include "defaultsettings.h"
#include "server.h"

void migrate_settings()
Expand All @@ -28,4 +28,17 @@ void migrate_settings()
}
g_settings->remove("disable_anticheat");
}

// Use keycodes for keybindings for missing keys
// if the keymap was changed in an earlier version
#if USE_SDL2
if (!g_settings->existsLocal("use_scancodes_for_keybindings"))
for (const auto &name: g_settings->getNames())
if (auto value = g_settings->get(name);
str_starts_with(name, "keymap_") && value.size() > 1 && value.front() != '<') {
g_settings->setBool("use_scancodes_for_keybindings", false);
set_keyboard_defaults(g_settings, true);
break;
}
#endif
}

0 comments on commit 11703a1

Please sign in to comment.