[PATCH weston v2] clients: If available, prefer top level surfaces for move or rotate

Bryce Harrington bryce at osg.samsung.com
Fri Sep 11 17:57:39 PDT 2015


On Fri, Sep 11, 2015 at 02:27:40PM -0500, Derek Foreman wrote:
> This stops us from rotating or moving pop-up menus by instead rotating
> their parents.
> 
> This is easiest to see using a multi-seat configuration.
> 
> Signed-off-by: Derek Foreman <derekf at osg.samsung.com>

One minor suggestion below, but no biggie.

Reviewed-by: Bryce Harrington <bryce at osg.samsung.com>

> ---
>  desktop-shell/shell.c | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
> 
> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
> index 034d39b..90a3ded 100644
> --- a/desktop-shell/shell.c
> +++ b/desktop-shell/shell.c
> @@ -481,6 +481,23 @@ get_output_work_area(struct desktop_shell *shell,
>  	}
>  }
>  
> +static struct shell_surface *
> +find_toplevel_surface(struct shell_surface *in_surface)
> +{
> +	struct shell_surface *surface = in_surface;
> +
> +	if (!surface)
> +		return NULL;
> +
> +	while (surface->parent)
> +		surface = get_shell_surface(surface->parent);
> +
> +	if (!surface || surface->type != SHELL_SURFACE_TOPLEVEL)
> +		surface = in_surface;

A comment to explain what we're doing here might be helpful.
Like:

/* If no top level surface was found, just use whatever surface was
   originally provided. */

> +
> +	return surface;
> +}
> +
>  static void
>  send_configure_for_surface(struct shell_surface *shsurf)
>  {
> @@ -1770,6 +1787,8 @@ surface_move(struct shell_surface *shsurf, struct weston_pointer *pointer,
>  	if (!shsurf)
>  		return -1;
>  
> +	shsurf = find_toplevel_surface(shsurf);
> +
>  	if (shsurf->grabbed ||
>  	    shsurf->state.fullscreen || shsurf->state.maximized)
>  		return 0;
> @@ -4993,6 +5012,8 @@ surface_rotate(struct shell_surface *surface, struct weston_pointer *pointer)
>  	float dx, dy;
>  	float r;
>  
> +	surface = find_toplevel_surface(surface);
> +
>  	rotate = malloc(sizeof *rotate);
>  	if (!rotate)
>  		return;
> -- 
> 2.5.1


More information about the wayland-devel mailing list