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

Joshua Watt jpewhacker at gmail.com
Wed Oct 11 13:18:35 UTC 2017


On Fri, 2017-08-04 at 22:04 +0200, janarne at gmail.com wrote:
> 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
ping?


More information about the wayland-devel mailing list