commit 2dbf406939d18b7c4b30487b59e5adb2bb56cf4f
parent 1dd10d5eb86206c298ec127f5c4d1f29efbc66f4
Author: Michael Forney <mforney@mforney.org>
Date: Fri, 14 Jun 2013 04:39:46 -0700
Handle NULL buffers
Diffstat:
2 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/renderer.c b/renderer.c
@@ -61,6 +61,9 @@ static void repaint_surface_for_output(struct swc_renderer * renderer,
{
struct swc_buffer * back_buffer = swc_output_get_back_buffer(output);
+ if (!surface->state.buffer)
+ return;
+
if (wl_buffer_is_shm(surface->state.buffer))
{
pixman_image_t * buffer_image;
@@ -175,6 +178,9 @@ void swc_renderer_attach(struct swc_renderer * renderer,
{
struct gbm_bo * bo;
+ if (!buffer)
+ return;
+
/* SHM buffer */
if (wl_buffer_is_shm(buffer))
{
diff --git a/surface.c b/surface.c
@@ -31,16 +31,27 @@ static void attach(struct wl_client * client, struct wl_resource * resource,
struct wl_resource * buffer_resource, int32_t x, int32_t y)
{
struct swc_surface * surface = resource->data;
- struct wl_buffer * buffer = buffer_resource->data;
printf("surface_attach\n");
- surface->pending.state.buffer = buffer;
surface->pending.x = x;
surface->pending.y = y;
- surface->geometry.width = buffer->width;
- surface->geometry.height = buffer->height;
+ if (buffer_resource)
+ {
+ struct wl_buffer * buffer = buffer_resource->data;
+
+ surface->pending.state.buffer = buffer;
+ surface->geometry.width = buffer->width;
+ surface->geometry.height = buffer->height;
+ }
+ else
+ {
+ surface->pending.state.buffer = NULL;
+
+ surface->geometry.width = 0;
+ surface->geometry.height = 0;
+ }
}
static void damage(struct wl_client * client, struct wl_resource * resource,