[PATCH v2 1/3] clients: Moving and rotating transient surfaces

Ben Hummon benjamin.hummon at gmail.com
Tue Oct 6 14:48:29 PDT 2015


Transient surfaces use child/parent surfaces for stacking order. This
change resloves an issue in which attempting to move or rotate a
toplevel transient surface can move or rotate its ancestor.

Signed-off-by: Ben Hummon <benjamin.hummon at gmail.com>
---
 desktop-shell/shell.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 3c6a3da..09ce5e1 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -486,18 +486,15 @@ find_toplevel_surface(struct shell_surface *in_surface)
 {
 	struct shell_surface *surface = in_surface;
 
-	if (!surface)
-		return NULL;
-
-	while (surface->parent)
+	while (surface) {
+		if (surface->type == SHELL_SURFACE_TOPLEVEL)
+			return surface;
 		surface = get_shell_surface(surface->parent);
+	}
 
 	/* If no top level surface was found, just use whatever surface was
 	   originally provided. */
-	if (!surface || surface->type != SHELL_SURFACE_TOPLEVEL)
-		surface = in_surface;
-
-	return surface;
+	return in_surface;
 }
 
 static void
-- 
2.6.0



More information about the wayland-devel mailing list