xdg-shell: Drop edges arg from xdg_surface configure event
diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index e7e31b0..b9b49cb 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -134,6 +134,7 @@
 	bool saved_size_valid;
 	bool saved_rotation_valid;
 	int unresponsive, grabbed;
+	uint32_t resize_edges;
 
 	struct {
 		struct weston_transform transform;
@@ -347,6 +348,7 @@
 	if (grab->shsurf) {
 		wl_list_remove(&grab->shsurf_destroy_listener.link);
 		grab->shsurf->grabbed = 0;
+		grab->shsurf->resize_edges = 0;
 	}
 
 	weston_pointer_end_grab(grab->grab.pointer);
@@ -1691,6 +1693,7 @@
 	surface_subsurfaces_boundingbox(shsurf->surface, NULL, NULL,
 	                                &resize->width, &resize->height);
 
+	shsurf->resize_edges = edges;
 	shell_grab_start(&resize->base, &resize_grab_interface, shsurf,
 			 seat->pointer, edges);
 
@@ -3327,7 +3330,7 @@
 
 	assert(shsurf);
 
-	xdg_surface_send_configure(shsurf->resource, edges, width, height);
+	xdg_surface_send_configure(shsurf->resource, width, height);
 }
 
 static const struct weston_shell_client xdg_client = {
@@ -4837,11 +4840,22 @@
 	} else if (type_changed || sx != 0 || sy != 0 ||
 		   shsurf->last_width != es->width ||
 		   shsurf->last_height != es->height) {
-		shsurf->last_width = es->width;
-		shsurf->last_height = es->height;
 		float from_x, from_y;
 		float to_x, to_y;
 
+		if (shsurf->resize_edges) {
+			sx = 0;
+			sy = 0;
+		}
+
+		if (shsurf->resize_edges & WL_SHELL_SURFACE_RESIZE_LEFT)
+			sx = shsurf->last_width - es->width;
+		if (shsurf->resize_edges & WL_SHELL_SURFACE_RESIZE_TOP)
+			sy = shsurf->last_height - es->height;
+
+		shsurf->last_width = es->width;
+		shsurf->last_height = es->height;
+
 		weston_view_to_global_float(shsurf->view, 0, 0, &from_x, &from_y);
 		weston_view_to_global_float(shsurf->view, sx, sy, &to_x, &to_y);
 		configure(shell, es,