Remove the weston_view.geometry.width/height fields

This has a couple of additional implications for the internal weston API:
 1) weston_view_configure no longer exists.  Use weston_view_set_position
    instead.
 2) The weston_surface.configure callback no longer takes a width and
    height.  If you need these, surface.width/height are set before
    configure is called.  If you need to know when the width/height
    changes, you must track that yourself.
diff --git a/src/compositor.c b/src/compositor.c
index 32e72b1..8f4bdef 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -863,8 +863,8 @@
 	pixman_region32_init_rect(&view->transform.boundingbox,
 				  view->geometry.x,
 				  view->geometry.y,
-				  view->geometry.width,
-				  view->geometry.height);
+				  view->surface->width,
+				  view->surface->height);
 
 	if (view->alpha == 1.0) {
 		pixman_region32_copy(&view->transform.opaque,
@@ -904,8 +904,8 @@
 		return -1;
 	}
 
-	view_compute_bbox(view, 0, 0, view->geometry.width,
-			  view->geometry.height,
+	view_compute_bbox(view, 0, 0,
+			  view->surface->width, view->surface->height,
 			  &view->transform.boundingbox);
 
 	return 0;
@@ -1070,19 +1070,11 @@
 }
 
 WL_EXPORT void
-weston_view_configure(struct weston_view *view,
-		      float x, float y, int width, int height)
-{
-	view->geometry.x = x;
-	view->geometry.y = y;
-	view->geometry.width = width;
-	view->geometry.height = height;
-	weston_view_geometry_dirty(view);
-}
-
-WL_EXPORT void
 weston_view_set_position(struct weston_view *view, float x, float y)
 {
+	if (view->geometry.x == x && view->geometry.y == y)
+		return;
+
 	view->geometry.x = x;
 	view->geometry.y = y;
 	weston_view_geometry_dirty(view);
@@ -1141,13 +1133,28 @@
 }
 
 static void
+weston_surface_set_size(struct weston_surface *surface,
+			int32_t width, int32_t height)
+{
+	struct weston_view *view;
+
+	if (surface->width == width && surface->height == height)
+		return;
+
+	surface->width = width;
+	surface->height = height;
+
+	wl_list_for_each(view, &surface->views, surface_link)
+		weston_view_geometry_dirty(view);
+}
+
+static void
 weston_surface_set_size_from_buffer(struct weston_surface *surface)
 {
 	int32_t width, height;
 
 	if (!surface->buffer_ref.buffer) {
-		surface->width = 0;
-		surface->height = 0;
+		weston_surface_set_size(surface, 0, 0);
 		return;
 	}
 
@@ -1165,8 +1172,9 @@
 		break;
 	}
 
-	surface->width = width / surface->buffer_viewport.scale;
-	surface->height = height / surface->buffer_viewport.scale;
+	width = width / surface->buffer_viewport.scale;
+	height = height / surface->buffer_viewport.scale;
+	weston_surface_set_size(surface, width, height);
 }
 
 WL_EXPORT uint32_t
@@ -1589,11 +1597,9 @@
 		wl_list_insert(&sub->surface->views, &view->surface_link);
 	} else {
 		view = weston_view_create(sub->surface);
-		weston_view_configure(view,
-				      sub->position.x,
-				      sub->position.y,
-				      sub->surface->width,
-				      sub->surface->height);
+		weston_view_set_position(view,
+					 sub->position.x,
+					 sub->position.y);
 		weston_view_set_transform_parent(view, parent);
 	}
 
@@ -1957,8 +1963,7 @@
 
 	if (surface->configure && surface->pending.newly_attached)
 		surface->configure(surface,
-				   surface->pending.sx, surface->pending.sy,
-				   surface->width, surface->height);
+				   surface->pending.sx, surface->pending.sy);
 
 	if (surface->pending.buffer)
 		wl_list_remove(&surface->pending.buffer_destroy_listener.link);
@@ -2183,8 +2188,7 @@
 	weston_surface_set_size_from_buffer(surface);
 
 	if (surface->configure && sub->cached.newly_attached)
-		surface->configure(surface, sub->cached.sx, sub->cached.sy,
-				   surface->width, surface->height);
+		surface->configure(surface, sub->cached.sx, sub->cached.sy);
 	sub->cached.sx = 0;
 	sub->cached.sy = 0;
 	sub->cached.newly_attached = 0;
@@ -2355,17 +2359,15 @@
 }
 
 static void
-subsurface_configure(struct weston_surface *surface, int32_t dx, int32_t dy,
-		     int32_t width, int32_t height)
+subsurface_configure(struct weston_surface *surface, int32_t dx, int32_t dy)
 {
 	struct weston_compositor *compositor = surface->compositor;
 	struct weston_view *view;
 
 	wl_list_for_each(view, &surface->views, surface_link)
-		weston_view_configure(view,
-				      view->geometry.x + dx,
-				      view->geometry.y + dy,
-				      width, height);
+		weston_view_set_position(view,
+					 view->geometry.x + dx,
+					 view->geometry.y + dy);
 
 	/* No need to check parent mappedness, because if parent is not
 	 * mapped, parent is not in a visible layer, so this sub-surface