mirror of
https://github.com/jjsullivan5196/wvkbd.git
synced 2025-03-13 02:42:47 +01:00
added cyrillic compose layers and made compose work with non-code keys
This commit is contained in:
parent
e3f414536e
commit
8abc3326df
42
keyboard.h
42
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:
|
||||
|
240
layout.mobile.h
240
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},
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user