clients: Use new shm interface
diff --git a/clients/window.c b/clients/window.c
index 74ddedd..3e949c2 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -461,15 +461,49 @@
 	munmap(data->map, data->length);
 }
 
+static struct wl_shm_pool *
+make_shm_pool(struct display *display, int size, void **data)
+{
+	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	struct wl_shm_pool *pool;
+	int fd;
+
+	fd = mkstemp(filename);
+	if (fd < 0) {
+		fprintf(stderr, "open %s failed: %m\n", filename);
+		return NULL;
+	}
+	if (ftruncate(fd, size) < 0) {
+		fprintf(stderr, "ftruncate failed: %m\n");
+		close(fd);
+		return NULL;
+	}
+
+	*data = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	unlink(filename);
+
+	if (*data == MAP_FAILED) {
+		fprintf(stderr, "mmap failed: %m\n");
+		close(fd);
+		return NULL;
+	}
+
+	pool = wl_shm_create_pool(display->shm, fd, size);
+
+	close(fd);
+
+	return pool;
+}
+
 static cairo_surface_t *
 display_create_shm_surface(struct display *display,
 			   struct rectangle *rectangle, uint32_t flags)
 {
 	struct shm_surface_data *data;
+	struct wl_shm_pool *pool;
 	uint32_t format;
 	cairo_surface_t *surface;
-	int stride, fd;
-	char filename[] = "/tmp/wayland-shm-XXXXXX";
+	int stride;
 
 	data = malloc(sizeof *data);
 	if (data == NULL)
@@ -478,26 +512,7 @@
 	stride = cairo_format_stride_for_width (CAIRO_FORMAT_ARGB32,
 						rectangle->width);
 	data->length = stride * rectangle->height;
-	fd = mkstemp(filename);
-	if (fd < 0) {
-		fprintf(stderr, "open %s failed: %m\n", filename);
-		return NULL;
-	}
-	if (ftruncate(fd, data->length) < 0) {
-		fprintf(stderr, "ftruncate failed: %m\n");
-		close(fd);
-		return NULL;
-	}
-
-	data->map = mmap(NULL, data->length,
-			 PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-	unlink(filename);
-
-	if (data->map == MAP_FAILED) {
-		fprintf(stderr, "mmap failed: %m\n");
-		close(fd);
-		return NULL;
-	}
+	pool = make_shm_pool(display, data->length, &data->map);
 
 	surface = cairo_image_surface_create_for_data (data->map,
 						       CAIRO_FORMAT_ARGB32,
@@ -513,13 +528,12 @@
 	else
 		format = WL_SHM_FORMAT_ARGB8888;
 
-	data->data.buffer = wl_shm_create_buffer(display->shm,
-						 fd,
-						 rectangle->width,
-						 rectangle->height,
-						 stride, format);
+	data->data.buffer = wl_shm_pool_create_buffer(pool, 0,
+						      rectangle->width,
+						      rectangle->height,
+						      stride, format);
 
-	close(fd);
+	wl_shm_pool_destroy(pool);
 
 	return surface;
 }