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 <jpewhac...@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?

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to