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

juan.j.zhao at linux.intel.com juan.j.zhao at linux.intel.com
Tue Jul 17 22:25:14 PDT 2012


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.

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