[PATCH weston 1/2] text-backend: Allow client hiding of input panel

janarne at gmail.com janarne at gmail.com
Fri Aug 4 20:04:28 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>

Thanks, both patches are improving the implementation in the right way:

Reviewed-by: Jan Arne Petersen <janarne 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


More information about the wayland-devel mailing list