[PATCH 2/3] shell: add panel height limiation when moving a window

Kristian Høgsberg hoegsberg at gmail.com
Sun Jul 22 09:32:12 PDT 2012


On Tue, Jul 17, 2012 at 10:25:14PM -0700, juan.j.zhao at linux.intel.com wrote:
> From: Juan Zhao <juan.j.zhao at linux.intel.com>
> 
> When applications not directly based on toytoolkit, like simple-egl, efl
> applications is grabbed and moved, they may be moved to the place under
> the panel. Then they could not be grabbed again.
> Add panel height limitation when configuring the surface new places.

I think we need to restict to the bounding box of the input region
instead.  With this change, you can't even move the window shadow
under the panel.  Also, I think it's better to try to keep at least 50
pixels or so inside the screen rather than just preventing the window
from moving outside the screen alltogether.

Kristian


> Signed-off-by: Juan Zhao <juan.j.zhao at linux.intel.com>
> ---
>  src/shell.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/src/shell.c b/src/shell.c
> index 613304f..9372edc 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -221,6 +221,13 @@ get_shell_surface(struct weston_surface *surface);
>  static struct desktop_shell *
>  shell_surface_get_shell(struct shell_surface *shsurf);
>  
> +static int
> +get_output_panel_height(struct desktop_shell *shell,
> +			struct weston_output *output);
> +
> +static struct weston_output *
> +get_default_output(struct weston_compositor *compositor);
> +
>  static bool
>  shell_surface_is_top_fullscreen(struct shell_surface *shsurf)
>  {
> @@ -784,13 +791,21 @@ move_grab_motion(struct wl_pointer_grab *grab,
>  	struct wl_pointer *pointer = grab->pointer;
>  	struct shell_surface *shsurf = move->base.shsurf;
>  	struct weston_surface *es;
> +	struct desktop_shell *shell = NULL;
>  	int dx = wl_fixed_to_int(pointer->x + move->dx);
>  	int dy = wl_fixed_to_int(pointer->y + move->dy);
> +	int panel_height = 0;
>  
>  	if (!shsurf)
>  		return;
>  
>  	es = shsurf->surface;
> +	shsurf->output = shsurf->output ? shsurf->output
> +			  : get_default_output(es->compositor);
> +	shell = shell_surface_get_shell(shsurf);
> +	panel_height = get_output_panel_height(shell, shsurf->output);
> +	if ( dy < panel_height )
> +		dy = panel_height;
>  
>  	weston_surface_configure(es, dx, dy,
>  				 es->geometry.width, es->geometry.height);
> -- 
> 1.7.11
> 


More information about the wayland-devel mailing list