text: Add support for control keys to the protocol

Add key event to the text_model interface and a key request to the
input_method_context interface. Implement it in the example editor
client and the example keyboard.

Signed-off-by: Jan Arne Petersen <jpetersen@openismus.com>
Jan Arne Petersen 12 years ago committed by Kristian Høgsberg
parent e202bae9d3
commit ce8a4433f5
  1. 25
      clients/editor.c
  2. 4
      clients/keyboard.c
  3. 4
      protocol/input-method.xml
  4. 5
      protocol/text.xml
  5. 14
      src/text-backend.c
  6. 6
      tests/test-text-client.c

@ -284,8 +284,31 @@ text_model_preedit_styling(void *data,
static void
text_model_key(void *data,
struct text_model *text_model)
struct text_model *text_model,
uint32_t key,
uint32_t state)
{
const char *state_label;
const char *key_label;
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
state_label = "pressed";
} else {
state_label = "released";
}
switch (key) {
case XKB_KEY_Tab:
key_label = "Tab";
break;
case XKB_KEY_KP_Enter:
key_label = "Enter";
break;
default:
key_label = "Unknown";
}
fprintf(stderr, "%s key was %s.\n", key_label, state_label);
}
static void

@ -228,6 +228,8 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
}
break;
case keytype_enter:
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_KP_Enter, WL_KEYBOARD_KEY_STATE_PRESSED);
break;
case keytype_space:
keyboard->keyboard->preedit_string = strcat(keyboard->keyboard->preedit_string,
@ -250,6 +252,8 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
case keytype_symbols:
break;
case keytype_tab:
input_method_context_key(keyboard->keyboard->context,
XKB_KEY_Tab, WL_KEYBOARD_KEY_STATE_PRESSED);
break;
}
}

@ -53,6 +53,10 @@
<arg name="index" type="int"/>
<arg name="length" type="uint"/>
</request>
<request name="key">
<arg name="key" type="uint"/>
<arg name="state" type="uint"/>
</request>
<event name="surrounding_text">
<description summary="surrounding text event">
The plain surrounding text around the input position. Cursor is the

@ -89,7 +89,10 @@
<arg name="length" type="uint"/>
</event>
<event name="preedit_styling"/>
<event name="key"/>
<event name="key">
<arg name="key" type="uint"/>
<arg name="state" type="uint"/>
</event>
<event name="selection_replacement"/>
<event name="direction"/>
<event name="locale"/>

@ -316,11 +316,23 @@ input_method_context_delete_surrounding_text(struct wl_client *client,
text_model_send_delete_surrounding_text(&context->model->resource, index, length);
}
static void
input_method_context_key(struct wl_client *client,
struct wl_resource *resource,
uint32_t key,
uint32_t state)
{
struct input_method_context *context = resource->data;
text_model_send_key(&context->model->resource, key, state);
}
static const struct input_method_context_interface input_method_context_implementation = {
input_method_context_destroy,
input_method_context_commit_string,
input_method_context_preedit_string,
input_method_context_delete_surrounding_text
input_method_context_delete_surrounding_text,
input_method_context_key
};
static void

@ -75,10 +75,12 @@ text_model_preedit_styling(void *data,
static void
text_model_key(void *data,
struct text_model *text_model)
struct text_model *text_model,
uint32_t key,
uint32_t state)
{
}
static void
text_model_selection_replacement(void *data,
struct text_model *text_model)

Loading…
Cancel
Save