summaryrefslogtreecommitdiff
path: root/quantum/qmk_settings.c
diff options
context:
space:
mode:
authorIlya Zhuravlev <whatever@xyz.is>2021-07-01 16:17:15 -0400
committerIlya Zhuravlev <whatever@xyz.is>2021-07-17 23:46:10 -0400
commite692dee6c7a9a1cb77b92c305ee595a7fc8500b5 (patch)
treec8ad8874e6b3c639d913b3cf139b18b5e446a3a3 /quantum/qmk_settings.c
parent2848a74f62a242955bc0dca92f22dc790b5d5df5 (diff)
qmk_settings: wrap auto shift
Diffstat (limited to 'quantum/qmk_settings.c')
-rw-r--r--quantum/qmk_settings.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/quantum/qmk_settings.c b/quantum/qmk_settings.c
index 1524fd048d..2c66d90c30 100644
--- a/quantum/qmk_settings.c
+++ b/quantum/qmk_settings.c
@@ -5,16 +5,22 @@
#include "progmem.h"
#include "dynamic_keymap.h"
+#include "process_auto_shift.h"
qmk_settings_t QS;
#define DECLARE_SETTING(id, field) { .qsid=id, .ptr=&QS.field, .sz=sizeof(QS.field) }
+#define DECLARE_SETTING_CB(id, field, callback) { .qsid=id, .ptr=&QS.field, .sz=sizeof(QS.field), .cb=callback }
+
+static void auto_shift_timeout_apply(void) {
+ set_autoshift_timeout(QS.auto_shift_timeout);
+}
static const qmk_settings_proto_t protos[] PROGMEM = {
DECLARE_SETTING(1, grave_esc_override),
DECLARE_SETTING(2, debounce_time),
DECLARE_SETTING(3, auto_shift),
- DECLARE_SETTING(4, auto_shift_timeout),
+ DECLARE_SETTING_CB(4, auto_shift_timeout, auto_shift_timeout_apply),
DECLARE_SETTING(5, osk_tap_toggle),
DECLARE_SETTING(6, osk_timeout),
DECLARE_SETTING(7, tapping_term),
@@ -48,6 +54,13 @@ static void save_settings(void) {
void qmk_settings_init(void) {
load_settings();
+ /* execute all callbacks to initialize the settings */
+ for (size_t i = 0; i < sizeof(protos)/sizeof(*protos); ++i) {
+ const qmk_settings_proto_t *proto = &protos[i];
+ qmk_setting_callback_t cb = pgm_read_ptr(&proto->cb);
+ if (cb)
+ cb();
+ }
}
void qmk_settings_reset(void) {
@@ -62,6 +75,8 @@ void qmk_settings_reset(void) {
QS.tap_hold = 0;
save_settings();
+ /* to trigger all callbacks */
+ qmk_settings_init();
}
void qmk_settings_query(uint16_t qsid_gt, void *buffer, size_t sz) {
@@ -98,5 +113,8 @@ int qmk_settings_set(uint16_t qsid, const void *setting, size_t maxsz) {
return -1;
memcpy(pgm_read_ptr(&proto->ptr), setting, pgm_read_word(&proto->sz));
save_settings();
+ qmk_setting_callback_t cb = pgm_read_ptr(&proto->cb);
+ if (cb)
+ cb();
return 0;
}