~ruther/qmk_firmware

a4aae1c5055d24c400f78fd44618aef5916adc0c — tmk 12 years ago a43ab35
Change: 0 means default_layer in current_layer now

- 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.
2 files changed, 26 insertions(+), 20 deletions(-)

M common/action.c
M common/command.c
M common/action.c => common/action.c +22 -17
@@ 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

M common/command.c => common/command.c +4 -3
@@ 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);
}