[PATCH] shell: show input panel on configure, if activated
Kristian Høgsberg
hoegsberg at gmail.com
Fri Aug 10 07:19:32 PDT 2012
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