feat: default layer setter

This commit is contained in:
elpekenin 2024-03-23 12:28:00 +01:00
parent 931a36ff4a
commit 4e6d593a87
2 changed files with 24 additions and 0 deletions

View file

@ -15,6 +15,7 @@
typedef uint32_t zmk_keymap_layers_state_t;
uint8_t zmk_keymap_layer_default(void);
int zmk_keymap_layer_set_default(uint8_t layer);
zmk_keymap_layers_state_t zmk_keymap_layer_state(void);
bool zmk_keymap_layer_active(uint8_t layer);
uint8_t zmk_keymap_highest_layer_active(void);

View file

@ -108,6 +108,29 @@ static inline int set_layer_state(uint8_t layer, bool state) {
uint8_t zmk_keymap_layer_default(void) { return _zmk_keymap_layer_default; }
int zmk_keymap_layer_set_default(uint8_t layer) {
int ret = 0;
uint8_t prev_default = _zmk_keymap_layer_default;
ret = set_layer_state(layer, true);
if (ret < 0) {
LOG_WRN("Could not turn on the new default layer, bailing out.");
return ret;
}
_zmk_keymap_layer_default = layer;
ret = set_layer_state(prev_default, false);
if (ret < 0) {
LOG_WRN("Could not disable current default layer, undoing changes.");
_zmk_keymap_layer_default = prev_default;
set_layer_state(layer, false);
return ret;
}
LOG_DBG("default_layer_changed: %d", layer);
return 0;
}
zmk_keymap_layers_state_t zmk_keymap_layer_state(void) { return _zmk_keymap_layer_state; }
bool zmk_keymap_layer_active_with_state(uint8_t layer, zmk_keymap_layers_state_t state_to_test) {