diff --git a/keyboard.c b/keyboard.c index 21b945d..f784209 100644 --- a/keyboard.c +++ b/keyboard.c @@ -345,6 +345,7 @@ int keyboardInit(Keyboard *kbd, App *app) { kbd->lastModifiers = kbd->app->input.modifiers; kbd->current = kbd->layoutsCount > 0 ? kbd->layouts : NULL; + kbd->lastVisible = kbd->current; for(int i = 0; i < kbd->layoutsCount; ++i) { if (!layoutInit(&kbd->layouts[i], kbd)) { @@ -452,8 +453,7 @@ void keyboardSwitchLayout(Keyboard *kbd, int index) { if (!kbd->layoutsCount) return; - int prevIndex = kbd->current - kbd->layouts; - int remember = 1; + int prevIndex = (kbd->lastVisible ? kbd->lastVisible : kbd->current) - kbd->layouts; LOGDBG("keyboard: switch layout: prevIndex=%d nextIndex=%d", prevIndex, index); //keyboardRelaseHeld(kbd); @@ -471,14 +471,11 @@ void keyboardSwitchLayout(Keyboard *kbd, int index) { } } else if (index == LI_REVERT) { - if (!kbd->current || !kbd->current->prev) { + if (!kbd->lastVisible) { LOGWRN("keyboard: switch layout: cannot revert"); return; } - Layout *l = kbd->current->prev; - while(l->hidden && l->prev) l = l->prev; - index = l - kbd->layouts; - remember = 0; + index = kbd->lastVisible - kbd->layouts; } if (index < 0 || index >= kbd->layoutsCount) { @@ -487,9 +484,9 @@ void keyboardSwitchLayout(Keyboard *kbd, int index) { } LOGDBG("keyboard: switch layout: actual index=%d", index); - if (remember) - kbd->layouts[index].prev = kbd->current; kbd->current = &kbd->layouts[index]; + if (!kbd->current->hidden) + kbd->lastVisible = kbd->current; keyboardResize(kbd); appInvalidateRect(kbd->app, 0, 0, kbd->app->w, kbd->app->h); diff --git a/keyboard.h b/keyboard.h index 8276c46..a3af01b 100644 --- a/keyboard.h +++ b/keyboard.h @@ -79,7 +79,6 @@ struct Layout { // dynamic fields int w, h; - Layout *prev; // previously used layout Key *downKey; // key that received the last mouse down event }; @@ -96,6 +95,7 @@ struct Keyboard { // dynamic fields unsigned int lastModifiers; Layout *current; + Layout *lastVisible; Key *firstHeld; }; diff --git a/layout.defs.h b/layout.defs.h index a3c9ac5..7c7318f 100644 --- a/layout.defs.h +++ b/layout.defs.h @@ -23,7 +23,7 @@ #define N (-S-1) // place key next to previos key #define N2 (-S2-1) -#define FW (12*W+2*W2+13*S) // full width +#define FW (12*W+11*S) // full width #ifdef NOBORDER diff --git a/layout.en.full.inc.c b/layout.en.full.inc.c index 3d46911..d6a78f0 100644 --- a/layout.en.full.inc.c +++ b/layout.en.full.inc.c @@ -5,10 +5,10 @@ #include "layout.defs.h" -#define LEF_COL2 (X0+FW+S2) +#define LEF_COL2 (X0 + 12*W+2*W2+13*S + S2) #define LEF_COL3 (LEF_COL2+3*W+2*S+S2) #define LEF_FW (LEF_COL3-X0+4*W+3*S) -#define LEF_N (-1-(FW-14*W-11*S)) +#define LEF_N (-1-( 12*W+2*W2+13*S -14*W-11*S)) Key keysEnFull[] = {