text: Rename and extend text_model key event

Rename the key event in text_model to keysym and add serial, time and
modifiers arguments. Add a modifiers_map event to transfer an array of
0-terminated modifier names, so that a mapping of modifiers to the
modifier bit mask is possible.

Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
This commit is contained in:
Jan Arne Petersen
2012-11-18 19:06:43 +01:00
committed by Kristian Høgsberg
parent 674fd1d625
commit d9be93b964
5 changed files with 95 additions and 32 deletions
+16 -5
View File
@@ -361,10 +361,20 @@ text_model_preedit_styling(void *data,
}
static void
text_model_key(void *data,
struct text_model *text_model,
uint32_t key,
uint32_t state)
text_model_modifiers_map(void *data,
struct text_model *text_model,
struct wl_array *map)
{
}
static void
text_model_keysym(void *data,
struct text_model *text_model,
uint32_t serial,
uint32_t time,
uint32_t key,
uint32_t state,
uint32_t modifiers)
{
struct text_entry *entry = data;
const char *state_label;
@@ -454,7 +464,8 @@ static const struct text_model_listener text_model_listener = {
text_model_preedit_string,
text_model_delete_surrounding_text,
text_model_preedit_styling,
text_model_key,
text_model_modifiers_map,
text_model_keysym,
text_model_selection_replacement,
text_model_direction,
text_model_locale,
+26 -14
View File
@@ -234,7 +234,7 @@ virtual_keyboard_commit_preedit(struct virtual_keyboard *keyboard)
}
static void
keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
keyboard_handle_key(struct keyboard *keyboard, uint32_t time, const struct key *key)
{
const char *label = keyboard->state == keyboardstate_default ? key->label : key->alt;
@@ -259,8 +259,10 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
break;
case keytype_enter:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_KP_Enter, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_KP_Enter, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
case keytype_space:
keyboard->keyboard->preedit_string = strcat(keyboard->keyboard->preedit_string,
@@ -277,28 +279,38 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
break;
case keytype_tab:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Tab, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_Tab, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
case keytype_arrow_up:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Up, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_Up, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
case keytype_arrow_left:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Left, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_Left, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
case keytype_arrow_right:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Right, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_Right, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
case keytype_arrow_down:
virtual_keyboard_commit_preedit(keyboard->keyboard);
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Down, WL_KEYBOARD_KEY_STATE_PRESSED);
input_method_context_keysym(keyboard->keyboard->context,
display_get_serial(keyboard->keyboard->display),
time,
XKB_KEY_Down, WL_KEYBOARD_KEY_STATE_PRESSED, 0);
break;
}
}
@@ -330,7 +342,7 @@ button_handler(struct widget *widget,
for (i = 0; i < sizeof(keys) / sizeof(*keys); ++i) {
col -= keys[i].width;
if (col < 0) {
keyboard_handle_key(keyboard, &keys[i]);
keyboard_handle_key(keyboard, time, &keys[i]);
break;
}
}