-static void default_layer_state_set(uint32_t state)
-{
- debug("default_layer_state: ");
- default_layer_debug(); debug(" to ");
- default_layer_state = state;
- default_layer_debug(); debug("\n");
- clear_keyboard_but_mods(); // To avoid stuck keys
+/** \brief Default Layer State Set At user Level
+ *
+ * Run user code on default layer state change
+ */
+__attribute__((weak))
+layer_state_t default_layer_state_set_user(layer_state_t state) {
+ return state;
+}
+
+/** \brief Default Layer State Set At Keyboard Level
+ *
+ * Run keyboard code on default layer state change
+ */
+__attribute__((weak))
+layer_state_t default_layer_state_set_kb(layer_state_t state) {
+ return default_layer_state_set_user(state);
+}
+
+/** \brief Default Layer State Set
+ *
+ * Static function to set the default layer state, prints debug info and clears keys
+ */
+static void default_layer_state_set(layer_state_t state) {
+ state = default_layer_state_set_kb(state);
+ debug("default_layer_state: ");
+ default_layer_debug(); debug(" to ");
+ default_layer_state = state;
+ default_layer_debug(); debug("\n");
+#ifdef STRICT_LAYER_RELEASE
+ clear_keyboard_but_mods(); // To avoid stuck keys
+#else
+ clear_keyboard_but_mods_and_keys(); // Don't reset held keys
+#endif