{
}
+static void
+text_model_language(void *data,
+ struct text_model *text_model,
+ uint32_t serial,
+ const char *language)
+{
+}
+
+static void
+text_model_text_direction(void *data,
+ struct text_model *text_model,
+ uint32_t serial,
+ uint32_t direction)
+{
+}
+
static const struct text_model_listener text_model_listener = {
text_model_commit_string,
text_model_preedit_string,
text_model_keysym,
text_model_enter,
text_model_leave,
- text_model_input_panel_state
+ text_model_input_panel_state,
+ text_model_language,
+ text_model_text_direction
};
static struct text_entry*
}
static void
-input_method_context_surrounding_text(void *data,
- struct input_method_context *context,
- const char *text,
- uint32_t cursor,
- uint32_t anchor)
+handle_surrounding_text(void *data,
+ struct input_method_context *context,
+ const char *text,
+ uint32_t cursor,
+ uint32_t anchor)
{
struct virtual_keyboard *keyboard = data;
}
static void
-input_method_context_reset(void *data,
- struct input_method_context *context,
- uint32_t serial)
+handle_reset(void *data,
+ struct input_method_context *context,
+ uint32_t serial)
{
struct virtual_keyboard *keyboard = data;
}
static void
-input_method_context_content_type(void *data,
- struct input_method_context *context,
- uint32_t hint,
- uint32_t purpose)
+handle_content_type(void *data,
+ struct input_method_context *context,
+ uint32_t hint,
+ uint32_t purpose)
{
struct virtual_keyboard *keyboard = data;
}
static void
-input_method_context_invoke_action(void *data,
- struct input_method_context *context,
- uint32_t button,
- uint32_t index)
+handle_invoke_action(void *data,
+ struct input_method_context *context,
+ uint32_t button,
+ uint32_t index)
{
struct virtual_keyboard *keyboard = data;
}
static void
-input_method_context_commit(void *data,
- struct input_method_context *context)
+handle_commit(void *data,
+ struct input_method_context *context)
{
struct virtual_keyboard *keyboard = data;
const struct layout *layout;
widget_schedule_redraw(keyboard->widget);
}
+static void
+handle_preferred_language(void *data,
+ struct input_method_context *context,
+ const char *language)
+{
+}
+
static const struct input_method_context_listener input_method_context_listener = {
- input_method_context_surrounding_text,
- input_method_context_reset,
- input_method_context_content_type,
- input_method_context_invoke_action,
- input_method_context_commit
+ handle_surrounding_text,
+ handle_reset,
+ handle_content_type,
+ handle_invoke_action,
+ handle_commit,
+ handle_preferred_language
};
static void
};
static void
-input_method_context_surrounding_text(void *data,
- struct input_method_context *context,
- const char *text,
- uint32_t cursor,
- uint32_t anchor)
+handle_surrounding_text(void *data,
+ struct input_method_context *context,
+ const char *text,
+ uint32_t cursor,
+ uint32_t anchor)
{
fprintf(stderr, "Surrounding text updated: %s\n", text);
}
static void
-input_method_context_reset(void *data,
- struct input_method_context *context,
- uint32_t serial)
+handle_reset(void *data,
+ struct input_method_context *context,
+ uint32_t serial)
{
struct simple_im *keyboard = data;
}
static void
-input_method_context_content_type(void *data,
- struct input_method_context *context,
- uint32_t hint,
- uint32_t purpose)
+handle_content_type(void *data,
+ struct input_method_context *context,
+ uint32_t hint,
+ uint32_t purpose)
{
}
static void
-input_method_context_invoke_action(void *data,
- struct input_method_context *context,
- uint32_t button,
- uint32_t index)
+handle_invoke_action(void *data,
+ struct input_method_context *context,
+ uint32_t button,
+ uint32_t index)
{
}
static void
-input_method_context_commit(void *data,
- struct input_method_context *context)
+handle_commit(void *data,
+ struct input_method_context *context)
+{
+}
+
+static void
+handle_preferred_language(void *data,
+ struct input_method_context *context,
+ const char *language)
{
}
static const struct input_method_context_listener input_method_context_listener = {
- input_method_context_surrounding_text,
- input_method_context_reset,
- input_method_context_content_type,
- input_method_context_invoke_action,
- input_method_context_commit
+ handle_surrounding_text,
+ handle_reset,
+ handle_content_type,
+ handle_invoke_action,
+ handle_commit,
+ handle_preferred_language
};
static void
<arg name="mods_locked" type="uint"/>
<arg name="group" type="uint"/>
</request>
+ <request name="language">
+ <arg name="serial" type="uint"/>
+ <arg name="language" type="string"/>
+ </request>
+ <request name="text_direction">
+ <arg name="serial" type="uint"/>
+ <arg name="direction" type="uint"/>
+ </request>
<event name="surrounding_text">
<description summary="surrounding text event">
The plain surrounding text around the input position. Cursor is the
<arg name="index" type="uint"/>
</event>
<event name="commit"/>
+ <event name="preferred_language">
+ <arg name="language" type="string"/>
+ </event>
</interface>
<interface name="input_method" version="1">
Requests input panels (virtual keyboard) to hide.
</description>
</request>
+ <request name="set_preferred_language">
+ <description summary="sets preferred language">
+ Sets a specific language. This allows for example a virtual keyboard to
+ show a language specific layout. The "language" argument is a RFC-3066
+ format language tag.
+
+ It could be used for example in a word processor to indicate language of
+ currently edited document or in an instant message application which tracks
+ languages of contacts.
+ </description>
+ <arg name="language" type="string"/>
+ </request>
<event name="commit_string">
<description summary="commit">
Notify when text should be inserted into the editor widget. The text
</description>
<arg name="state" type="uint"/>
</event>
+ <event name="language">
+ <description summary="language">
+ Sets the language of the input text. The "language" argument is a RFC-3066
+ format language tag.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="language" type="string"/>
+ </event>
+ <enum name="text_direction">
+ <entry name="auto" value="0" summary="automatic text direction based on text and language"/>
+ <entry name="ltr" value="1" summary="left-to-right"/>
+ <entry name="rtl" value="2" summary="right-to-left"/>
+ </enum>
+ <event name="text_direction">
+ <description summary="text direction">
+ Sets the text direction of input text.
+
+ It is mainly needed for showing input cursor on correct side of the
+ editor when there is no input yet done and making sure neutral
+ direction text is laid out properly.
+ </description>
+ <arg name="serial" type="uint"/>
+ <arg name="direction" type="uint"/>
+ </event>
</interface>
<interface name="text_model_factory" version="1">
wl_signal_emit(&ec->hide_input_panel_signal, ec);
}
+static void
+text_model_set_preferred_language(struct wl_client *client,
+ struct wl_resource *resource,
+ const char *language)
+{
+ struct text_model *text_model = resource->data;
+ struct input_method *input_method, *next;
+
+ wl_list_for_each_safe(input_method, next, &text_model->input_methods, link) {
+ if (!input_method->context)
+ continue;
+ input_method_context_send_preferred_language(&input_method->context->resource,
+ language);
+ }
+}
+
static const struct text_model_interface text_model_implementation = {
text_model_set_surrounding_text,
text_model_activate,
text_model_invoke_action,
text_model_commit,
text_model_show_input_panel,
- text_model_hide_input_panel
+ text_model_hide_input_panel,
+ text_model_set_preferred_language
};
static void text_model_factory_create_text_model(struct wl_client *client,
group);
}
+static void
+input_method_context_language(struct wl_client *client,
+ struct wl_resource *resource,
+ uint32_t serial,
+ const char *language)
+{
+ struct input_method_context *context = resource->data;
+
+ text_model_send_language(&context->model->resource, serial, language);
+}
+
+static void
+input_method_context_text_direction(struct wl_client *client,
+ struct wl_resource *resource,
+ uint32_t serial,
+ uint32_t direction)
+{
+ struct input_method_context *context = resource->data;
+
+ text_model_send_text_direction(&context->model->resource, serial, direction);
+}
+
+
static const struct input_method_context_interface input_method_context_implementation = {
input_method_context_destroy,
input_method_context_commit_string,
input_method_context_keysym,
input_method_context_grab_keyboard,
input_method_context_key,
- input_method_context_modifiers
+ input_method_context_modifiers,
+ input_method_context_language,
+ input_method_context_text_direction
};
static void
{
}
+static void
+text_model_language(void *data,
+ struct text_model *text_model,
+ uint32_t serial,
+ const char *language)
+{
+}
+
+static void
+text_model_text_direction(void *data,
+ struct text_model *text_model,
+ uint32_t serial,
+ uint32_t direction)
+{
+}
+
static const struct text_model_listener text_model_listener = {
text_model_commit_string,
text_model_preedit_string,
text_model_keysym,
text_model_enter,
text_model_leave,
- text_model_input_panel_state
+ text_model_input_panel_state,
+ text_model_language,
+ text_model_text_direction
};
TEST(text_test)