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>
This commit is contained in:
committed by
Kristian Høgsberg
parent
e202bae9d3
commit
ce8a4433f5
+24
-1
@@ -284,8 +284,31 @@ text_model_preedit_styling(void *data,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
text_model_key(void *data,
|
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
|
static void
|
||||||
|
|||||||
@@ -228,6 +228,8 @@ keyboard_handle_key(struct keyboard *keyboard, const struct key *key)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case keytype_enter:
|
case keytype_enter:
|
||||||
|
input_method_context_key(keyboard->keyboard->context,
|
||||||
|
XKB_KEY_KP_Enter, WL_KEYBOARD_KEY_STATE_PRESSED);
|
||||||
break;
|
break;
|
||||||
case keytype_space:
|
case keytype_space:
|
||||||
keyboard->keyboard->preedit_string = strcat(keyboard->keyboard->preedit_string,
|
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:
|
case keytype_symbols:
|
||||||
break;
|
break;
|
||||||
case keytype_tab:
|
case keytype_tab:
|
||||||
|
input_method_context_key(keyboard->keyboard->context,
|
||||||
|
XKB_KEY_Tab, WL_KEYBOARD_KEY_STATE_PRESSED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,10 @@
|
|||||||
<arg name="index" type="int"/>
|
<arg name="index" type="int"/>
|
||||||
<arg name="length" type="uint"/>
|
<arg name="length" type="uint"/>
|
||||||
</request>
|
</request>
|
||||||
|
<request name="key">
|
||||||
|
<arg name="key" type="uint"/>
|
||||||
|
<arg name="state" type="uint"/>
|
||||||
|
</request>
|
||||||
<event name="surrounding_text">
|
<event name="surrounding_text">
|
||||||
<description summary="surrounding text event">
|
<description summary="surrounding text event">
|
||||||
The plain surrounding text around the input position. Cursor is the
|
The plain surrounding text around the input position. Cursor is the
|
||||||
|
|||||||
+4
-1
@@ -89,7 +89,10 @@
|
|||||||
<arg name="length" type="uint"/>
|
<arg name="length" type="uint"/>
|
||||||
</event>
|
</event>
|
||||||
<event name="preedit_styling"/>
|
<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="selection_replacement"/>
|
||||||
<event name="direction"/>
|
<event name="direction"/>
|
||||||
<event name="locale"/>
|
<event name="locale"/>
|
||||||
|
|||||||
+13
-1
@@ -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);
|
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 = {
|
static const struct input_method_context_interface input_method_context_implementation = {
|
||||||
input_method_context_destroy,
|
input_method_context_destroy,
|
||||||
input_method_context_commit_string,
|
input_method_context_commit_string,
|
||||||
input_method_context_preedit_string,
|
input_method_context_preedit_string,
|
||||||
input_method_context_delete_surrounding_text
|
input_method_context_delete_surrounding_text,
|
||||||
|
input_method_context_key
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|||||||
@@ -75,10 +75,12 @@ text_model_preedit_styling(void *data,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
text_model_key(void *data,
|
text_model_key(void *data,
|
||||||
struct text_model *text_model)
|
struct text_model *text_model,
|
||||||
|
uint32_t key,
|
||||||
|
uint32_t state)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
text_model_selection_replacement(void *data,
|
text_model_selection_replacement(void *data,
|
||||||
struct text_model *text_model)
|
struct text_model *text_model)
|
||||||
|
|||||||
Reference in New Issue
Block a user