get rid of trans logic complete

master
Stefan Dorn 2016-06-14 05:44:11 +01:00
parent bd74409688
commit f5c1169af3
2 changed files with 23 additions and 17 deletions

View File

@ -60,7 +60,6 @@ static bool (*kb_is_pressed)[KB_ROWS][KB_COLUMNS] = &_kb_is_pressed;
static bool _kb_was_pressed[KB_ROWS][KB_COLUMNS];
static bool (*kb_was_pressed)[KB_ROWS][KB_COLUMNS] = &_kb_was_pressed;
static bool kb_was_transparent[KB_ROWS][KB_COLUMNS];
static layer layers_pressed[KB_ROWS][KB_COLUMNS];
static layer current_layer;
@ -68,8 +67,7 @@ static layer layer_offset;
static u8 current_row;
static u8 current_col;
static bool current_is_pressed;
static bool non_trans_key_pressed;
static bool trans_key_pressed;
static bool sticky_done;
static bool layers_active[KB_LAYERS];
static StickyState layers_sticky[KB_LAYERS];
@ -113,10 +111,8 @@ void main_key_loop() {
if (current_is_pressed) {
current_layer = layers_top;
layers_pressed[row][col] = current_layer;
trans_key_pressed = false;
} else {
current_layer = layers_pressed[row][col];
trans_key_pressed = kb_was_transparent[row][col];
current_layer = layers_pressed[row][col];
}
// set remaining vars, and "execute" key
@ -124,7 +120,6 @@ void main_key_loop() {
current_col = col;
layer_offset = 0;
exec_key();
kb_was_transparent[row][col] = trans_key_pressed;
}
}
}
@ -150,7 +145,7 @@ void exec_key(void) {
// FIXME
// If the current layer is in the sticky once up state and a key defined
// for this layer (a non-transparent key) was pressed, pop the layer
if (layer_top_sticky() == StickyOnceUp && non_trans_key_pressed) {
if (layer_top_sticky() == StickyOnceUp && sticky_done) {
layer_disable_top();
}
}
@ -374,7 +369,6 @@ void _kbfun_mediakey_press_release(bool press, keycode key) {
}
}
// ----------------------------------------------------------------------------
// basic keyfuncs
// ----------------------------------------------------------------------------
@ -383,16 +377,29 @@ keycode current_keycode() { return kb_keycode(current_layer, current_row
keyfunc current_keyfunc_press() { return kb_keyfunc_press(current_layer, current_row, current_col); }
keyfunc current_keycode_release() { return kb_keyfunc_release(current_layer, current_row, current_col); }
bool key_is_modifier(keycode key) {
switch (key) {
case KEY_LeftControl: return true;
case KEY_LeftShift: return true;
case KEY_LeftAlt: return true;
case KEY_LeftGUI: return true;
case KEY_RightControl: return true;
case KEY_RightShift: return true;
case KEY_RightAlt: return true;
case KEY_RightGUI: return true;
default: return false;
}
}
// normal key
void kbfun_press_release() {
if (!trans_key_pressed) {
non_trans_key_pressed = true;
}
sticky_done = ! key_is_modifier(current_keycode());
_kbfun_press_release(current_is_pressed, current_keycode());
}
// media key
void kbfun_mediakey_press_release() {
sticky_done = true;
keycode key = current_keycode();
_kbfun_mediakey_press_release(current_is_pressed, key);
}
@ -431,17 +438,15 @@ void kbfun_layer_sticky() {
debug_printf("sticky %d down!\n", l);
// this should be the only place we care about this flag being cleared
non_trans_key_pressed = false;
sticky_done = false;
}
} else {
if (layer_sticky(l) == StickyOnceDown) {
// When releasing this sticky key, pop the layer always
layer_disable(l);
if (!non_trans_key_pressed) {
// If no key defined for this layer (a non-transparent key)
// was pressed, push the layer again, but in the
// StickyOnceUp state
if (!sticky_done) {
// re-enable the sticky key if we didn't actually use it yet
layer_enable(l, StickyOnceUp);
debug_printf("sticky %d still down!\n", l);
}

View File

@ -6,6 +6,7 @@ void kbfun_control_press_release();
void kbfun_shift_press_release();
void kbfun_mediakey_press_release();
void kbfun_press_release();
bool key_is_modifier(keycode key);
keyfunc current_keycode_release();
keyfunc current_keyfunc_press();
keycode current_keycode();