wvkbd

git clone https://git.tarina.org/wvkbd
Log | Files | Refs | README | LICENSE

commit 8abc3326dffd8a7772ebcc491eeceb10eb94c02c
parent e3f414536e22908ced14895e40ebc6475a29ef93
Author: Maarten van Gompel <proycon@anaproy.nl>
Date:   Mon, 23 Aug 2021 23:31:51 +0200

added cyrillic compose layers and made compose work with non-code keys

Diffstat:
Mkeyboard.h | 42++++++++++++++++++++----------------------
Mlayout.mobile.h | 240++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 247 insertions(+), 35 deletions(-)

diff --git a/keyboard.h b/keyboard.h @@ -180,6 +180,19 @@ kbd_unpress_key(struct kbd *kb, uint32_t time) { void kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) { + if ((compose == 1) && (k->type != Compose) && (k->type != Mod) && (k->layout)) { + compose++; + fprintf(stderr,"showing compose %d\n", compose); + if ((!kb->prevlayout) || (strcmp(kb->prevlayout->keymap_name, kb->layout->keymap_name) != 0)) { + create_and_upload_keymap(kb->layout->keymap_name, 0, 0); + } + kb->prevlayout = kb->layout; + kb->layout = k->layout; + kbd_draw_layout(kb); + kb->surf->dirty = true; + return; + } + switch (k->type) { case Code: if (k->code_mod) { @@ -191,28 +204,13 @@ kbd_press_key(struct kbd *kb, struct key *k, uint32_t time) { } else { zwp_virtual_keyboard_v1_modifiers(kb->vkbd, kb->mods, 0, 0, 0); } - if (compose == 1) { - if (k->layout) { - compose++; - if (compose) { - fprintf(stderr,"showing compose %d\n", compose); - } - if ((!kb->prevlayout) || (strcmp(kb->prevlayout->keymap_name, kb->layout->keymap_name) != 0)) { - create_and_upload_keymap(kb->layout->keymap_name, 0, 0); - } - kb->prevlayout = kb->layout; - kb->layout = k->layout; - kbd_draw_layout(kb); - } - } else { - kb->last_press = k; - kbd_draw_key(kb, k, true); - zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code, - WL_KEYBOARD_KEY_STATE_PRESSED); - if (compose) { - fprintf(stderr,"pressing composed key\n"); - compose++; - } + kb->last_press = k; + kbd_draw_key(kb, k, true); + zwp_virtual_keyboard_v1_key(kb->vkbd, time, kb->last_press->code, + WL_KEYBOARD_KEY_STATE_PRESSED); + if (compose) { + fprintf(stderr,"pressing composed key\n"); + compose++; } break; case Mod: diff --git a/layout.mobile.h b/layout.mobile.h @@ -48,6 +48,16 @@ enum layout_names { ComposeB, ComposeN, ComposeM, + ComposeCyrI, + ComposeCyrJ, + ComposeCyrE, + ComposeCyrU, + ComposeCyrL, + ComposeCyrN, + ComposeCyrTse, + ComposeCyrChe, + ComposeCyrG, + ComposeCyrK, NumLayouts, }; @@ -77,7 +87,17 @@ static struct key keys_full[], keys_special[], keys_simple[], keys_cyrillic[], keys_compose_v[], keys_compose_b[], keys_compose_n[], - keys_compose_m[]; + keys_compose_m[], + keys_compose_cyr_i[], + keys_compose_cyr_j[], + keys_compose_cyr_e[], + keys_compose_cyr_u[], + keys_compose_cyr_l[], + keys_compose_cyr_n[], + keys_compose_cyr_tse[], + keys_compose_cyr_che[], + keys_compose_cyr_g[], + keys_compose_cyr_k[]; static struct layout layouts[NumLayouts] = { [Full] = {keys_full, 0, "latin"}, //third parameter is the keymap name @@ -110,6 +130,16 @@ static struct layout layouts[NumLayouts] = { [ComposeB] = {keys_compose_b, 0, "latin"}, [ComposeN] = {keys_compose_n, 0, "latin"}, [ComposeM] = {keys_compose_m, 0, "latin"}, + [ComposeCyrI] = {keys_compose_cyr_i, 0, "cyrillic"}, + [ComposeCyrJ] = {keys_compose_cyr_j, 0, "cyrillic"}, + [ComposeCyrE] = {keys_compose_cyr_e, 0, "cyrillic"}, + [ComposeCyrU] = {keys_compose_cyr_u, 0, "cyrillic"}, + [ComposeCyrL] = {keys_compose_cyr_l, 0, "cyrillic"}, + [ComposeCyrN] = {keys_compose_cyr_n, 0, "cyrillic"}, + [ComposeCyrTse] = {keys_compose_cyr_tse, 0, "cyrillic"}, + [ComposeCyrChe] = {keys_compose_cyr_che, 0, "cyrillic"}, + [ComposeCyrG] = {keys_compose_cyr_g, 0, "cyrillic"}, + [ComposeCyrK] = {keys_compose_cyr_k, 0, "cyrillic"}, }; const enum layout_names DefaultLayout = Full; @@ -363,17 +393,17 @@ static struct key keys_cyrillic[] = { {"9", "(", 1.0, Code, KEY_9}, {"0", ")", 1.0, Code, KEY_0}, {"ю", "Ю", 1.0, Code, KEY_DOT}, - {"э", "Э", 1.0, Code, KEY_APOSTROPHE}, - {"ё", "Ё", 1.0, Code, KEY_GRAVE}, + {"э", "Э", 1.0, Code, KEY_APOSTROPHE, &layouts[ComposeCyrE]}, + {"ё", "Ё", 1.0, Code, KEY_GRAVE, &layouts[ComposeCyrE]}, {"", "", 0.0, EndRow}, - {"й", "Й", 1.0, Code, KEY_Q}, - {"ц", "Ц", 1.0, Code, KEY_W}, + {"й", "Й", 1.0, Code, KEY_Q, &layouts[ComposeCyrJ]}, + {"ц", "Ц", 1.0, Code, KEY_W, &layouts[ComposeCyrTse]}, {"у", "У", 1.0, Code, KEY_E}, - {"к", "К", 1.0, Code, KEY_R}, - {"е", "Е", 1.0, Code, KEY_T}, + {"к", "К", 1.0, Code, KEY_R, &layouts[ComposeCyrK]}, + {"е", "Е", 1.0, Code, KEY_T, &layouts[ComposeCyrE]}, {"н", "Н", 1.0, Code, KEY_Y}, - {"г", "Г", 1.0, Code, KEY_U}, + {"г", "Г", 1.0, Code, KEY_U, &layouts[ComposeCyrG]}, {"ш", "ш", 1.0, Code, KEY_I}, {"щ", "щ", 1.0, Code, KEY_O}, {"з", "з", 1.0, Code, KEY_P}, @@ -382,23 +412,23 @@ static struct key keys_cyrillic[] = { {"", "", 0.0, EndRow}, {"ф", "Ф", 1.0, Code, KEY_A}, - {"ы", "Ы", 1.0, Code, KEY_S}, + {"ы", "Ы", 1.0, Code, KEY_S, &layouts[ComposeCyrI]}, {"в", "В", 1.0, Code, KEY_D}, {"а", "А", 1.0, Code, KEY_F}, {"п", "П", 1.0, Code, KEY_G}, {"р", "Р", 1.0, Code, KEY_H}, {"о", "О", 1.0, Code, KEY_J}, - {"л", "Л", 1.0, Code, KEY_K}, + {"л", "Л", 1.0, Code, KEY_K, &layouts[ComposeCyrL]}, {"д", "Д", 1.0, Code, KEY_L}, {"ж", "Ж", 1.0, Code, KEY_SEMICOLON}, {"", "", 0.0, EndRow}, {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, {"я", "Я", 1.0, Code, KEY_Z}, - {"ч", "Ч", 1.0, Code, KEY_X}, + {"ч", "Ч", 1.0, Code, KEY_X, &layouts[ComposeCyrChe]}, {"c", "С", 1.0, Code, KEY_C}, {"м", "М", 1.0, Code, KEY_V}, - {"и", "И", 1.0, Code, KEY_B}, + {"и", "И", 1.0, Code, KEY_B, &layouts[ComposeCyrI]}, {"т", "Т", 1.0, Code, KEY_N}, {"ь", "Ь", 1.0, Code, KEY_M}, {"б", "Б", 1.0, Code, KEY_COMMA}, @@ -407,7 +437,7 @@ static struct key keys_cyrillic[] = { {"", "", 0.0, EndRow}, {"Abc", "Abc", 1.0, Layout, 0, &layouts[(DefaultLayout == Cyrillic) ? Full : DefaultLayout] , .scheme=1}, - {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {"Cmp", "Cmp", 1.0, Compose, .scheme=1}, {",", "'", 1.0, Code, KEY_EQUAL}, {"", "", 4.0, Code, KEY_SPACE}, {".", "?", 1.0, Code, KEY_SLASH}, @@ -1021,3 +1051,187 @@ static struct key keys_compose_m[] = { {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, {"", "", 0.0, Last}, }; + +static struct key keys_compose_cyr_i[] = { + {"і", "І", 1.0, Copy, 0x0456, 0, 0x0406}, + {"ї", "Ї", 1.0, Copy, 0x0457, 0, 0x0407}, + {"", "", 8.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_j[] = { + {"ј", "Ј", 1.0, Copy, 0x0458, 0, 0x0408}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_e[] = { + {"є", "Є", 1.0, Copy, 0x0454, 0, 0x0404}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_u[] = { + {"ў", "Ў", 1.0, Copy, 0x045E, 0, 0x040E}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + + +static struct key keys_compose_cyr_l[] = { + {"љ", "Љ", 1.0, Copy, 0x0459, 0, 0x0409}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_n[] = { + {"њ", "Њ", 1.0, Copy, 0x045A, 0, 0x040A}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_che[] = { + {"ћ", "Ћ", 1.0, Copy, 0x045B, 0, 0x040B}, + {"ђ", "Ђ", 1.0, Copy, 0x0452, 0, 0x0402}, + {"", "", 8.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_tse[] = { + {"џ", "Џ", 1.0, Copy, 0x045F, 0, 0x040F}, + {"ѕ", "Ѕ", 1.0, Copy, 0x0455, 0, 0x0405}, + {"", "", 8.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_g[] = { + {"ѓ", "Ѓ", 1.0, Copy, 0x0453, 0, 0x0403}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +}; + +static struct key keys_compose_cyr_k[] = { + {"ќ", "Ќ", 1.0, Copy, 0x0453, 0, 0x040C}, + {"", "", 9.0, Pad }, + {"", "", 0.0, EndRow}, + {"", "", 0.0, EndRow}, + {"⇧", "⇧", 1.5, Mod, Shift, .scheme=1}, + {"", "", 7, Pad}, + {"⌫", "⌫", 1.5, Code, KEY_BACKSPACE, .scheme=1}, + {"", "", 0.0, EndRow}, + {"Abc", "Abc", 1.0, Layout, 0, &layouts[Cyrillic], .scheme=1}, + {"Ctr", "Ctr", 1.0, Mod, Ctrl, .scheme=1}, + {",", "'", 1.0, Code, KEY_EQUAL}, + {"", "", 4.0, Code, KEY_SPACE}, + {".", "?", 1.0, Code, KEY_SLASH}, + {"Enter", "Enter", 2.0, Code, KEY_ENTER, .scheme=1}, + {"", "", 0.0, Last}, +};