[PATCH weston 1/2] text-backend: Allow client hiding of input panel
Joshua Watt
jpewhacker at gmail.com
Thu Aug 17 18:52:49 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:
Any further update on this?
>
> 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