commit 2dbf406

Michael Forney  ·  2013-06-14 11:39:46 +0000 UTC
parent 1dd10d5
Handle NULL buffers
2 files changed,  +21, -4
+6, -0
 1@@ -61,6 +61,9 @@ static void repaint_surface_for_output(struct swc_renderer * renderer,
 2 {
 3     struct swc_buffer * back_buffer = swc_output_get_back_buffer(output);
 4 
 5+    if (!surface->state.buffer)
 6+        return;
 7+
 8     if (wl_buffer_is_shm(surface->state.buffer))
 9     {
10         pixman_image_t * buffer_image;
11@@ -175,6 +178,9 @@ void swc_renderer_attach(struct swc_renderer * renderer,
12 {
13     struct gbm_bo * bo;
14 
15+    if (!buffer)
16+        return;
17+
18     /* SHM buffer */
19     if (wl_buffer_is_shm(buffer))
20     {
+15, -4
 1@@ -31,16 +31,27 @@ static void attach(struct wl_client * client, struct wl_resource * resource,
 2                    struct wl_resource * buffer_resource, int32_t x, int32_t y)
 3 {
 4     struct swc_surface * surface = resource->data;
 5-    struct wl_buffer * buffer = buffer_resource->data;
 6 
 7     printf("surface_attach\n");
 8 
 9-    surface->pending.state.buffer = buffer;
10     surface->pending.x = x;
11     surface->pending.y = y;
12 
13-    surface->geometry.width = buffer->width;
14-    surface->geometry.height = buffer->height;
15+    if (buffer_resource)
16+    {
17+        struct wl_buffer * buffer = buffer_resource->data;
18+
19+        surface->pending.state.buffer = buffer;
20+        surface->geometry.width = buffer->width;
21+        surface->geometry.height = buffer->height;
22+    }
23+    else
24+    {
25+        surface->pending.state.buffer = NULL;
26+
27+        surface->geometry.width = 0;
28+        surface->geometry.height = 0;
29+    }
30 }
31 
32 static void damage(struct wl_client * client, struct wl_resource * resource,