clients: Moving and rotating transient surfaces

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.
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 @@
 {
 	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