[PATCH] shell: show input panel on configure, if activated

Philipp Brüschweiler blei42 at gmail.com
Fri Aug 10 07:37:34 PDT 2012


Yes, sorry about that. I should have written that into the commit message.

I'm not sure if you'd categorize this patch as a fix or a feature. Try
the following:
- start an editor
- click into a text field
- start a keyboard

Notice that the keyboard doesn't appear until you click the other
input field of the editor (even though input methods and panels are
supposed to be activated). This patch fixes that.

Cheers,
Philipp

On Fri, Aug 10, 2012 at 4:19 PM, Kristian Høgsberg <hoegsberg at gmail.com> wrote:
> On Fri, Aug 10, 2012 at 10:42:54AM +0200, Philipp Brüschweiler wrote:
>
> I'm not sure what this is fixing (it's always good to point that out
> in the commit message).  We don't want to show the input panel on
> configure, ie when the keyboard attaches a buffer to the surface.  We
> only show it when some application requests the OSK...
>
> Kristian
>
>>  src/shell.c | 29 +++++++++++++++++------------
>>  1 Datei geändert, 17 Zeilen hinzugefügt(+), 12 Zeilen entfernt(-)
>>
>> diff --git a/src/shell.c b/src/shell.c
>> index 9c8a8a9..670cfd6 100644
>> --- a/src/shell.c
>> +++ b/src/shell.c
>> @@ -2520,13 +2520,22 @@ unlock(struct wl_listener *listener, void *data)
>>  }
>>
>>  static void
>> +show_input_panel(struct desktop_shell *shell, struct weston_surface *surface)
>> +{
>> +     wl_list_insert(&shell->input_panel_layer.surface_list,
>> +                    &surface->layer_link);
>> +     weston_surface_assign_output(surface);
>> +     weston_surface_damage(surface);
>> +     weston_slide_run(surface, surface->geometry.height, 0, NULL, NULL);
>> +}
>> +
>> +static void
>>  show_input_panels(struct wl_listener *listener, void *data)
>>  {
>>       struct desktop_shell *shell =
>>               container_of(listener, struct desktop_shell,
>>                            show_input_panel_listener);
>>       struct input_panel_surface *surface, *next;
>> -     struct weston_surface *ws;
>>
>>       shell->showing_input_panels = true;
>>
>> @@ -2534,14 +2543,8 @@ show_input_panels(struct wl_listener *listener, void *data)
>>                      &shell->input_panel_layer.link);
>>
>>       wl_list_for_each_safe(surface, next,
>> -                           &shell->input_panel.surfaces, link) {
>> -             ws = surface->surface;
>> -             wl_list_insert(&shell->input_panel_layer.surface_list,
>> -                            &ws->layer_link);
>> -             weston_surface_assign_output(ws);
>> -             weston_surface_damage(ws);
>> -             weston_slide_run(ws, ws->geometry.height, 0, NULL, NULL);
>> -     }
>> +                           &shell->input_panel.surfaces, link)
>> +             show_input_panel(shell, surface->surface);
>>  }
>>
>>  static void
>> @@ -2905,17 +2908,19 @@ static void
>>  input_panel_configure(struct weston_surface *surface, int32_t sx, int32_t sy)
>>  {
>>       struct weston_mode *mode = surface->output->current;
>> +     struct desktop_shell *shell = surface->private;
>> +
>>       GLfloat x = (mode->width - surface->buffer->width) / 2;
>>       GLfloat y = mode->height - surface->buffer->height;
>>
>> -     /* Don't map the input panel here, wait for
>> -      * show_input_panels signal. */
>> -
>>       weston_surface_configure(surface,
>>                                surface->output->x + x,
>>                                surface->output->y + y,
>>                                surface->buffer->width,
>>                                surface->buffer->height);
>> +
>> +     if (!surface->layer_link.next || wl_list_empty(&surface->layer_link))
>> +             show_input_panel(shell, surface);
>>  }
>>
>>  static void
>> --
>> 1.7.11.4
>>
>> _______________________________________________
>> wayland-devel mailing list
>> wayland-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list