[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