On Tue, Apr 15, 2014 at 12:38:31PM +0200, Manuel Bachmann wrote: > The "symbols" modifier key of weston-keyboard is no longer > inactive, but will provide an additionnal layout with > numerals and special characters. > > Fix the Arabic keyboard, which was rendering out of the > bounds, and now use the Arabic IBM PC keyboard as a > reference for its standard and new symbols layouts.
That looks good, thanks. I added the link to bug 71757 which this fixes to the commit message. Kristian > Signed-off-by: Manuel Bachmann <[email protected]> > --- > clients/keyboard.c | 280 > +++++++++++++++++++++++++++++----------------------- > 1 file changed, 159 insertions(+), 121 deletions(-) > > diff --git a/clients/keyboard.c b/clients/keyboard.c > index 11fe21d..cd1ad58 100644 > --- a/clients/keyboard.c > +++ b/clients/keyboard.c > @@ -75,7 +75,8 @@ struct key { > enum key_type key_type; > > char *label; > - char *alt; > + char *uppercase; > + char *symbol; > > unsigned int width; > }; > @@ -92,120 +93,119 @@ struct layout { > }; > > static const struct key normal_keys[] = { > - { keytype_default, "q", "Q", 1}, > - { keytype_default, "w", "W", 1}, > - { keytype_default, "e", "E", 1}, > - { keytype_default, "r", "R", 1}, > - { keytype_default, "t", "T", 1}, > - { keytype_default, "y", "Y", 1}, > - { keytype_default, "u", "U", 1}, > - { keytype_default, "i", "I", 1}, > - { keytype_default, "o", "O", 1}, > - { keytype_default, "p", "P", 1}, > - { keytype_backspace, "<--", "<--", 2}, > - > - { keytype_tab, "->|", "->|", 1}, > - { keytype_default, "a", "A", 1}, > - { keytype_default, "s", "S", 1}, > - { keytype_default, "d", "D", 1}, > - { keytype_default, "f", "F", 1}, > - { keytype_default, "g", "G", 1}, > - { keytype_default, "h", "H", 1}, > - { keytype_default, "j", "J", 1}, > - { keytype_default, "k", "K", 1}, > - { keytype_default, "l", "L", 1}, > - { keytype_enter, "Enter", "Enter", 2}, > - > - { keytype_switch, "ABC", "abc", 2}, > - { keytype_default, "z", "Z", 1}, > - { keytype_default, "x", "X", 1}, > - { keytype_default, "c", "C", 1}, > - { keytype_default, "v", "V", 1}, > - { keytype_default, "b", "B", 1}, > - { keytype_default, "n", "N", 1}, > - { keytype_default, "m", "M", 1}, > - { keytype_default, ",", ",", 1}, > - { keytype_default, ".", ".", 1}, > - { keytype_switch, "ABC", "abc", 1}, > - > - { keytype_symbols, "?123", "?123", 1}, > - { keytype_space, "", "", 5}, > - { keytype_arrow_up, "/\\", "/\\", 1}, > - { keytype_arrow_left, "<", "<", 1}, > - { keytype_arrow_right, ">", ">", 1}, > - { keytype_arrow_down, "\\/", "\\/", 1}, > - { keytype_style, "", "", 2} > + { keytype_default, "q", "Q", "1", 1}, > + { keytype_default, "w", "W", "2", 1}, > + { keytype_default, "e", "E", "3", 1}, > + { keytype_default, "r", "R", "4", 1}, > + { keytype_default, "t", "T", "5", 1}, > + { keytype_default, "y", "Y", "6", 1}, > + { keytype_default, "u", "U", "7", 1}, > + { keytype_default, "i", "I", "8", 1}, > + { keytype_default, "o", "O", "9", 1}, > + { keytype_default, "p", "P", "0", 1}, > + { keytype_backspace, "<--", "<--", "<--", 2}, > + > + { keytype_tab, "->|", "->|", "->|", 1}, > + { keytype_default, "a", "A", "-", 1}, > + { keytype_default, "s", "S", "@", 1}, > + { keytype_default, "d", "D", "*", 1}, > + { keytype_default, "f", "F", "^", 1}, > + { keytype_default, "g", "G", ":", 1}, > + { keytype_default, "h", "H", ";", 1}, > + { keytype_default, "j", "J", "(", 1}, > + { keytype_default, "k", "K", ")", 1}, > + { keytype_default, "l", "L", "~", 1}, > + { keytype_enter, "Enter", "Enter", "Enter", 2}, > + > + { keytype_switch, "ABC", "abc", "ABC", 2}, > + { keytype_default, "z", "Z", "/", 1}, > + { keytype_default, "x", "X", "\'", 1}, > + { keytype_default, "c", "C", "\"", 1}, > + { keytype_default, "v", "V", "+", 1}, > + { keytype_default, "b", "B", "=", 1}, > + { keytype_default, "n", "N", "?", 1}, > + { keytype_default, "m", "M", "!", 1}, > + { keytype_default, ",", ",", "\\", 1}, > + { keytype_default, ".", ".", "|", 1}, > + { keytype_switch, "ABC", "abc", "ABC", 1}, > + > + { keytype_symbols, "?123", "?123", "abc", 1}, > + { keytype_space, "", "", "", 5}, > + { keytype_arrow_up, "/\\", "/\\", "/\\", 1}, > + { keytype_arrow_left, "<", "<", "<", 1}, > + { keytype_arrow_right, ">", ">", ">", 1}, > + { keytype_arrow_down, "\\/", "\\/", "\\/", 1}, > + { keytype_style, "", "", "", 2} > }; > > static const struct key numeric_keys[] = { > - { keytype_default, "1", "1", 1}, > - { keytype_default, "2", "2", 1}, > - { keytype_default, "3", "3", 1}, > - { keytype_default, "4", "4", 1}, > - { keytype_default, "5", "5", 1}, > - { keytype_default, "6", "6", 1}, > - { keytype_default, "7", "7", 1}, > - { keytype_default, "8", "8", 1}, > - { keytype_default, "9", "9", 1}, > - { keytype_default, "0", "0", 1}, > - { keytype_backspace, "<--", "<--", 2}, > - > - { keytype_space, "", "", 4}, > - { keytype_enter, "Enter", "Enter", 2}, > - { keytype_arrow_up, "/\\", "/\\", 1}, > - { keytype_arrow_left, "<", "<", 1}, > - { keytype_arrow_right, ">", ">", 1}, > - { keytype_arrow_down, "\\/", "\\/", 1}, > - { keytype_style, "", "", 2} > + { keytype_default, "1", "1", "1", 1}, > + { keytype_default, "2", "2", "2", 1}, > + { keytype_default, "3", "3", "3", 1}, > + { keytype_default, "4", "4", "4", 1}, > + { keytype_default, "5", "5", "5", 1}, > + { keytype_default, "6", "6", "6", 1}, > + { keytype_default, "7", "7", "7", 1}, > + { keytype_default, "8", "8", "8", 1}, > + { keytype_default, "9", "9", "9", 1}, > + { keytype_default, "0", "0", "0", 1}, > + { keytype_backspace, "<--", "<--", "<--", 2}, > + > + { keytype_space, "", "", "", 4}, > + { keytype_enter, "Enter", "Enter", "Enter", 2}, > + { keytype_arrow_up, "/\\", "/\\", "/\\", 1}, > + { keytype_arrow_left, "<", "<", "<", 1}, > + { keytype_arrow_right, ">", ">", ">", 1}, > + { keytype_arrow_down, "\\/", "\\/", "\\/", 1}, > + { keytype_style, "", "", "", 2} > }; > > static const struct key arabic_keys[] = { > - { keytype_default, "ض", "ض", 1}, > - { keytype_default, "ص", "ص", 1}, > - { keytype_default, "ث", "ث", 1}, > - { keytype_default, "ق", "ق", 1}, > - { keytype_default, "ف", "ف", 1}, > - { keytype_default, "غ", "إ", 1}, > - { keytype_default, "ع", "ع", 1}, > - { keytype_default, "ه", "ه", 1}, > - { keytype_default, "خ", "خ", 1}, > - { keytype_default, "ح", "ح", 1}, > - { keytype_default, "ج", "ج", 1}, > - { keytype_backspace, "-->", "-->", 2}, > - > - { keytype_tab, "->|", "->|", 1}, > - { keytype_default, "ش", "ش", 1}, > - { keytype_default, "س", "س", 1}, > - { keytype_default, "ي", "ي", 1}, > - { keytype_default, "ب", "ب", 1}, > - { keytype_default, "ل", "ل", 1}, > - { keytype_default, "ا", "أ", 1}, > - { keytype_default, "ت", "ت", 1}, > - { keytype_default, "ن", "ن", 1}, > - { keytype_default, "م", "م", 1}, > - { keytype_default, "ك", "ك", 1}, > - { keytype_default, "د", "د", 1}, > - { keytype_enter, "Enter", "Enter", 2}, > - > - { keytype_switch, "ABC", "abc", 2}, > - { keytype_default, "ئ", "ئ", 1}, > - { keytype_default, "ء", "ء", 1}, > - { keytype_default, "ؤ", "ؤ", 1}, > - { keytype_default, "ر", "ر", 1}, > - { keytype_default, "ى", "آ", 1}, > - { keytype_default, "ة", "ة", 1}, > - { keytype_default, "و", "و", 1}, > - { keytype_default, "ز", "ز", 1}, > - { keytype_default, "ظ", "ظ", 1}, > - { keytype_switch, "ABC", "abc", 2}, > - > - { keytype_symbols, "؟٣٢١", "؟٣٢١", 1}, > - { keytype_default, "ذ", "ذ", 1}, > - { keytype_default, "،", "،", 1}, > - { keytype_space, "", "", 6}, > - { keytype_default, ".", ".", 1}, > - { keytype_default, "ط", "ط", 1}, > - { keytype_style, "", "", 2} > + { keytype_default, "ض", "ﹶ", "۱", 1}, > + { keytype_default, "ص", "ﹰ", "۲", 1}, > + { keytype_default, "ث", "ﹸ", "۳", 1}, > + { keytype_default, "ق", "ﹲ", "۴", 1}, > + { keytype_default, "ف", "ﻹ", "۵", 1}, > + { keytype_default, "غ", "ﺇ", "۶", 1}, > + { keytype_default, "ع", "`", "۷", 1}, > + { keytype_default, "ه", "٪", "۸", 1}, > + { keytype_default, "خ", ">", "۹", 1}, > + { keytype_default, "ح", "<", "۰", 1}, > + { keytype_backspace, "-->", "-->", "-->", 2}, > + > + { keytype_tab, "->|", "->|", "->|", 1}, > + { keytype_default, "ش", "ﹺ", "ﹼ", 1}, > + { keytype_default, "س", "ﹴ", "!", 1}, > + { keytype_default, "ي", "[", "@", 1}, > + { keytype_default, "ب", "]", "#", 1}, > + { keytype_default, "ل", "ﻷ", "$", 1}, > + { keytype_default, "ا", "أ", "%", 1}, > + { keytype_default, "ت", "-", "^", 1}, > + { keytype_default, "ن", "x", "&", 1}, > + { keytype_default, "م", "/", "*", 1}, > + { keytype_default, "ك", ":", "_", 1}, > + { keytype_default, "د", "\"", "+", 1}, > + { keytype_enter, "Enter", "Enter", "Enter", 2}, > + > + { keytype_switch, "Shift", "Base", "Shift", 2}, > + { keytype_default, "ئ", "~", ")", 1}, > + { keytype_default, "ء", "°", "(", 1}, > + { keytype_default, "ؤ", "{", "\"", 1}, > + { keytype_default, "ر", "}", "\'", 1}, > + { keytype_default, "ى", "ﺁ", "؟", 1}, > + { keytype_default, "ة", "'", "!", 1}, > + { keytype_default, "و", ",", ";", 1}, > + { keytype_default, "ﺯ", ".", "\\", 1}, > + { keytype_default, "ظ", "؟", "=", 1}, > + { keytype_switch, "Shift", "Base", "Shift", 2}, > + > + { keytype_symbols, "؟٣٢١", "؟٣٢١", "Base", 1}, > + { keytype_default, "ﻻ", "ﻵ", "|", 1}, > + { keytype_default, ",", "،", "،", 1}, > + { keytype_space, "", "", "", 6}, > + { keytype_default, ".", "ذ", "]", 1}, > + { keytype_default, "ط", "ﺝ", "[", 1}, > + { keytype_style, "", "", "", 2} > }; > > > @@ -251,8 +251,9 @@ static const double key_width = 60; > static const double key_height = 50; > > enum keyboard_state { > - keyboardstate_default, > - keyboardstate_uppercase > + KEYBOARD_STATE_DEFAULT, > + KEYBOARD_STATE_UPPERCASE, > + KEYBOARD_STATE_SYMBOLS > }; > > struct keyboard { > @@ -283,10 +284,16 @@ label_from_key(struct keyboard *keyboard, > if (key->key_type == keytype_style) > return style_labels[keyboard->keyboard->preedit_style]; > > - if (keyboard->state == keyboardstate_default) > + switch(keyboard->state) { > + case KEYBOARD_STATE_DEFAULT: > return key->label; > - else > - return key->alt; > + case KEYBOARD_STATE_UPPERCASE: > + return key->uppercase; > + case KEYBOARD_STATE_SYMBOLS: > + return key->symbol; > + } > + > + return ""; > } > > static void > @@ -523,8 +530,21 @@ append(char *s1, const char *s2) > static void > keyboard_handle_key(struct keyboard *keyboard, uint32_t time, const struct > key *key, struct input *input, enum wl_pointer_button_state state) > { > - const char *label = keyboard->state == keyboardstate_default ? > key->label : key->alt; > - xkb_mod_mask_t mod_mask = keyboard->state == keyboardstate_default ? 0 > : keyboard->keyboard->keysym.shift_mask; > + const char *label; > + > + switch(keyboard->state) { > + case KEYBOARD_STATE_DEFAULT : > + label = key->label; > + break; > + case KEYBOARD_STATE_UPPERCASE : > + label = key->uppercase; > + break; > + case KEYBOARD_STATE_SYMBOLS : > + label = key->symbol; > + break; > + } > + > + xkb_mod_mask_t mod_mask = keyboard->state == KEYBOARD_STATE_DEFAULT ? 0 > : keyboard->keyboard->keysym.shift_mask; > uint32_t key_state = (state == WL_POINTER_BUTTON_STATE_PRESSED) ? > WL_KEYBOARD_KEY_STATE_PRESSED : WL_KEYBOARD_KEY_STATE_RELEASED; > > switch (key->key_type) { > @@ -565,14 +585,32 @@ keyboard_handle_key(struct keyboard *keyboard, uint32_t > time, const struct key * > case keytype_switch: > if (state != WL_POINTER_BUTTON_STATE_PRESSED) > break; > - if (keyboard->state == keyboardstate_default) > - keyboard->state = keyboardstate_uppercase; > - else > - keyboard->state = keyboardstate_default; > + switch(keyboard->state) { > + case KEYBOARD_STATE_DEFAULT: > + keyboard->state = KEYBOARD_STATE_UPPERCASE; > + break; > + case KEYBOARD_STATE_UPPERCASE: > + keyboard->state = KEYBOARD_STATE_DEFAULT; > + break; > + case KEYBOARD_STATE_SYMBOLS: > + keyboard->state = KEYBOARD_STATE_UPPERCASE; > + break; > + } > break; > case keytype_symbols: > if (state != WL_POINTER_BUTTON_STATE_PRESSED) > break; > + switch(keyboard->state) { > + case KEYBOARD_STATE_DEFAULT: > + keyboard->state = KEYBOARD_STATE_SYMBOLS; > + break; > + case KEYBOARD_STATE_UPPERCASE: > + keyboard->state = KEYBOARD_STATE_SYMBOLS; > + break; > + case KEYBOARD_STATE_SYMBOLS: > + keyboard->state = KEYBOARD_STATE_DEFAULT; > + break; > + } > break; > case keytype_tab: > virtual_keyboard_commit_preedit(keyboard->keyboard); > @@ -823,7 +861,7 @@ input_method_activate(void *data, > struct wl_array modifiers_map; > const struct layout *layout; > > - keyboard->keyboard->state = keyboardstate_default; > + keyboard->keyboard->state = KEYBOARD_STATE_DEFAULT; > > if (keyboard->context) > wl_input_method_context_destroy(keyboard->context); > -- > 1.7.10.4 > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
