[PATCH weston 1/2] text-backend: Allow client hiding of input panel
Joshua Watt
jpewhacker at gmail.com
Wed Jul 5 13:58:51 UTC 2017
On Sat, 2017-06-24 at 16:03 -0500, Joshua Watt wrote:
> Previously, the hide_input_panel and show_input_panel messages for
> the text
> input protocol were limited to specific cases, such as showing the
> panel on
> activation, or making the panel visible after activation. Now,
> clients are
> allowed to toggle the panel visiblity at will as long as they are the
> currently
> active client
>
> Signed-off-by: Joshua Watt <JPEWhacker at gmail.com>
> ---
> compositor/text-backend.c | 22 ++++++++++++----------
> 1 file changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/compositor/text-backend.c b/compositor/text-backend.c
> index bf5c45c..6add101 100644
> --- a/compositor/text-backend.c
> +++ b/compositor/text-backend.c
> @@ -64,7 +64,7 @@ struct text_input_manager {
> struct wl_global *text_input_manager_global;
> struct wl_listener destroy_listener;
>
> - struct text_input *current_panel;
> + struct text_input *current_text_input;
>
> struct weston_compositor *ec;
> };
> @@ -140,11 +140,15 @@ deactivate_input_method(struct input_method
> *input_method)
> input_method->context = NULL;
>
> if (wl_list_empty(&text_input->input_methods) &&
> - text_input->input_panel_visible) {
> + text_input->input_panel_visible &&
> + text_input->manager->current_text_input == text_input) {
> wl_signal_emit(&ec->hide_input_panel_signal, ec);
> text_input->input_panel_visible = false;
> - text_input->manager->current_panel = NULL;
> }
> +
> + if (text_input->manager->current_text_input == text_input)
> + text_input->manager->current_text_input = NULL;
> +
> zwp_text_input_v1_send_leave(text_input->resource);
> }
>
> @@ -206,12 +210,11 @@ text_input_activate(struct wl_client *client,
>
> input_method_context_create(text_input, input_method);
>
> - current = text_input->manager->current_panel;
> + current = text_input->manager->current_text_input;
>
> if (current && current != text_input) {
> current->input_panel_visible = false;
> wl_signal_emit(&ec->hide_input_panel_signal, ec);
> - text_input->manager->current_panel = NULL;
> }
>
> if (text_input->input_panel_visible) {
> @@ -219,8 +222,8 @@ text_input_activate(struct wl_client *client,
> text_input->surface);
> wl_signal_emit(&ec->update_input_panel_signal,
> &text_input->cursor_rectangle);
> - text_input->manager->current_panel = text_input;
> }
> + text_input->manager->current_text_input = text_input;
>
> zwp_text_input_v1_send_enter(text_input->resource,
> text_input->surface->resource);
> @@ -335,7 +338,8 @@ text_input_show_input_panel(struct wl_client
> *client,
>
> text_input->input_panel_visible = true;
>
> - if (!wl_list_empty(&text_input->input_methods)) {
> + if (!wl_list_empty(&text_input->input_methods) &&
> + text_input == text_input->manager->current_text_input) {
> wl_signal_emit(&ec->show_input_panel_signal,
> text_input->surface);
> wl_signal_emit(&ec->update_input_panel_signal,
> @@ -353,10 +357,8 @@ text_input_hide_input_panel(struct wl_client
> *client,
> text_input->input_panel_visible = false;
>
> if (!wl_list_empty(&text_input->input_methods) &&
> - text_input == text_input->manager->current_panel) {
> - text_input->manager->current_panel = NULL;
> + text_input == text_input->manager->current_text_input)
> wl_signal_emit(&ec->hide_input_panel_signal, ec);
> - }
> }
>
> static void
Ping?
More information about the wayland-devel
mailing list