[PATCH] ivi-shell: activate weston surface with a seat when left click or touch.
Pekka Paalanen
ppaalanen at gmail.com
Wed Dec 9 02:08:09 PST 2015
On Wed, 9 Dec 2015 15:03:47 +0900
Nobuhiko Tanibata <nobuhiko_tanibata at xddp.denso.co.jp> wrote:
> From: Nobuhiko Tanibata <NOBUHIKO_TANIBATA at xddp.denso.co.jp>
>
> Similar with Desktop shell, set activate to weston surface which is
> left-clicked by pointer or touched. This is needed to focus it with a seat.
> Without this, a feature who gets activated weston surface by using
> weston_surface_get_main_surface doesn't work correctly because it can
> not get correct focused weston surface. For example, input-panel uses
> weston_surface_get_main_surface to get a weston surface. With this
> weston surface, it get a member: output to decide which output shall
> show a input-panel, software keyboard. Without activation,
> input-panel-ivi can not find a correct output which shows e.g.
> weston-editor who uses input-method.
>
> Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA at xddp.denso.co.jp>
> ---
> ivi-shell/ivi-shell.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 54 insertions(+)
>
> diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
> index 1720705..a767ccf 100644
> --- a/ivi-shell/ivi-shell.c
> +++ b/ivi-shell/ivi-shell.c
> @@ -414,6 +414,59 @@ ivi_shell_setting_create(struct ivi_shell_setting *dest,
> return result;
> }
>
> +static void
> +activate_binding(struct weston_seat *seat,
> + struct weston_view *focus_view)
> +{
> + struct weston_surface *focus = focus_view->surface;
> + struct weston_surface *main_surface =
> + weston_surface_get_main_surface(focus);
> +
> + if (get_ivi_shell_surface(main_surface) == NULL)
> + return;
> +
> + weston_surface_activate(focus, seat);
> +}
> +
> +static void
> +click_to_activate_binding(struct weston_pointer *pointer, uint32_t time,
> + uint32_t button, void *data)
> +{
> + if (pointer->grab != &pointer->default_grab)
> + return;
> + if (pointer->focus == NULL)
> + return;
> +
> + activate_binding(pointer->seat, pointer->focus);
> +}
> +
> +static void
> +touch_to_activate_binding(struct weston_touch *touch, uint32_t time,
> + void *data)
> +{
> + if (touch->grab != &touch->default_grab)
> + return;
> + if (touch->focus == NULL)
> + return;
> +
> + activate_binding(touch->seat, touch->focus);
> +}
> +
> +static void
> +shell_add_bindings(struct weston_compositor *compositor,
> + struct ivi_shell *shell)
> +{
> + weston_compositor_add_button_binding(compositor, BTN_LEFT, 0,
> + click_to_activate_binding,
> + shell);
> + weston_compositor_add_button_binding(compositor, BTN_RIGHT, 0,
> + click_to_activate_binding,
> + shell);
> + weston_compositor_add_touch_binding(compositor, 0,
> + touch_to_activate_binding,
> + shell);
> +}
> +
> /*
> * Initialization of ivi-shell.
> */
> @@ -450,6 +503,7 @@ module_init(struct weston_compositor *compositor,
> goto out_settings;
>
> ivi_layout_init_with_compositor(compositor);
> + shell_add_bindings(compositor, shell);
>
> /* Call module_init of ivi-modules which are defined in weston.ini */
> if (load_controller_modules(compositor, setting.ivi_module,
Hi,
Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
Tested-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
With this patch, first clicking weston-editor to bring OSK up and then
clicking another app correctly causes the OSK to hide. Without this
patch it did not happen.
With the ivi-shell multiscreen support series, this patch also causes
the OSK to appear on the correct output while previously the OSK always
appeared on the one output.
Thanks,
pq
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 811 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20151209/403f0cb4/attachment.sig>
More information about the wayland-devel
mailing list