]> git.donarmstrong.com Git - tmk_firmware.git/commitdiff
Change: 0 means default_layer in current_layer now
authortmk <nobody@nowhere>
Fri, 15 Feb 2013 03:17:03 +0000 (12:17 +0900)
committertmk <nobody@nowhere>
Fri, 15 Feb 2013 03:31:46 +0000 (12:31 +0900)
- current_layer indicates active layer at the time
- default_layer indicates base layer
- default_layer is used when current_layer is 0
- with this LAYER_BIT action works as overlay even if
  default_layer varies other than layer 0.

common/action.c
common/command.c

index d0c9ddb0adbeaf38d05ac0d9a714cd8e710a61fc..38c5933ee3bce4edc51b107982dcc2d3351d8ffa 100644 (file)
@@ -289,6 +289,7 @@ void action_exec(keyevent_t event)
 static action_t get_action(key_t key)
 {
     action_t action;
+    action.code = ACTION_NO;
 
     /* layer stack */
     for (layer_item_t i = layer_stack[top_layer]; i.used; i = layer_stack[i.next]) {
@@ -301,14 +302,18 @@ static action_t get_action(key_t key)
         debug("layer_stack: through. "); debug_dec(i.layer); debug("\n");
     }
 
-    /* current layer */
-    action = action_for_key(current_layer, key);
+    /* current layer: 0 means default layer */
+    if (current_layer) {
+        action = action_for_key(current_layer, key);
+        if (action.code != ACTION_TRANSPARENT) {
+            debug("current layer: used. "); debug_dec(current_layer); debug("\n");
+            return action;
+        }
+    }
 
     /* default layer */
-    if (action.code == ACTION_TRANSPARENT) {
-        debug("TRNASPARENT: "); debug_hex16(action.code); debug("\n");
-        action = action_for_key(default_layer, key);
-    }
+    debug("default layer: used. \n");
+    action = action_for_key(default_layer, key);
     return action;
 }
 
@@ -469,7 +474,7 @@ static void process_action(keyrecord_t *record)
                     }
                     else {
                         // NOTE: This is needed by legacy keymap support
-                        layer_switch(default_layer);
+                        layer_switch(0);
                     }
                     break;
                 case LAYER_ON_PRESS:
@@ -500,18 +505,18 @@ static void process_action(keyrecord_t *record)
                 case LAYER_SET_DEFAULT_ON_PRESS:
                     if (event.pressed) {
                         default_layer = action.layer.val;
-                        layer_switch(default_layer);
+                        layer_switch(0);
                     }
                     break;
                 case LAYER_SET_DEFAULT_ON_RELEASE:
                     if (!event.pressed) {
                         default_layer = action.layer.val;
-                        layer_switch(default_layer);
+                        layer_switch(0);
                     }
                     break;
                 case LAYER_SET_DEFAULT_ON_BOTH:
                     default_layer = action.layer.val;
-                    layer_switch(default_layer);
+                    layer_switch(0);
                     break;
                 default:
                     /* tap key */
@@ -530,7 +535,7 @@ static void process_action(keyrecord_t *record)
                         } else {
                             // NOTE: This is needed by legacy keymap support
                             debug("LAYER_SET: No tap: return to default layer(on release)\n");
-                            layer_switch(default_layer);
+                            layer_switch(0);
                         }
                     }
                     break;
@@ -573,19 +578,19 @@ static void process_action(keyrecord_t *record)
                     break;
                 case LAYER_SET_DEFAULT_ON_PRESS:
                     if (event.pressed) {
-                        default_layer = current_layer ^ action.layer.val;
-                        layer_switch(default_layer);
+                        default_layer = default_layer ^ action.layer.val;
+                        layer_switch(0);
                     }
                     break;
                 case LAYER_SET_DEFAULT_ON_RELEASE:
                     if (!event.pressed) {
-                        default_layer = current_layer ^ action.layer.val;
-                        layer_switch(default_layer);
+                        default_layer = default_layer ^ action.layer.val;
+                        layer_switch(0);
                     }
                     break;
                 case LAYER_SET_DEFAULT_ON_BOTH:
-                    default_layer = current_layer ^ action.layer.val;
-                    layer_switch(default_layer);
+                    default_layer = default_layer ^ action.layer.val;
+                    layer_switch(0);
                     break;
                 default:
                     // tap key
index 7bb2a23f1909ec21629aa375303f7c43fb24670a..4c874b1092f75fee5962bb68d384080be1c05686 100644 (file)
@@ -261,8 +261,9 @@ static bool command_common(uint8_t code)
 #endif
             break;
 #endif
+        case KC_ESC:
+        case KC_GRV:
         case KC_0:
-        case KC_F10:
             clear_keyboard();
             switch_layer(0);
             break;
@@ -270,7 +271,7 @@ static bool command_common(uint8_t code)
             clear_keyboard();
             switch_layer((code - KC_1) + 1);
             break;
-        case KC_F1 ... KC_F9:
+        case KC_F1 ... KC_F12:
             clear_keyboard();
             switch_layer((code - KC_F1) + 1);
             break;
@@ -545,7 +546,7 @@ static void switch_layer(uint8_t layer)
 {
     print_val_hex8(current_layer);
     print_val_hex8(default_layer);
-    current_layer = layer;
     default_layer = layer;
+    current_layer = 0;
     print("switch to "); print_val_hex8(layer);
 }