[Cogl] [PATCH] cogland: Correctly handle commits without attaching a new buffer
Neil Roberts
neil at linux.intel.com
Thu May 2 10:05:48 PDT 2013
Previously if a client sent a commit message without attaching a new
buffer then it would end up detaching the existing buffer because
surface->pending.buffer would be NULL. This patch makes it explicitly
track when an attach is sent for a commit and so that it can avoid
making any changes otherwise. This fixes cases where GTK apps would
send a damage event without a new buffer.
---
examples/cogland.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/examples/cogland.c b/examples/cogland.c
index dc798d7..6bd07f6 100644
--- a/examples/cogland.c
+++ b/examples/cogland.c
@@ -38,6 +38,7 @@ typedef struct
struct
{
/* wl_surface.attach */
+ CoglBool newly_attached;
struct wl_buffer *buffer;
struct wl_listener buffer_destroy_listener;
int32_t sx;
@@ -455,6 +456,7 @@ cogland_surface_attach (struct wl_client *wayland_client,
surface->pending.sx = sx;
surface->pending.sy = sy;
surface->pending.buffer = buffer;
+ surface->pending.newly_attached = TRUE;
if (buffer)
wl_signal_add (&buffer->resource.destroy_signal,
@@ -524,7 +526,8 @@ cogland_surface_commit (struct wl_client *client,
CoglandCompositor *compositor = surface->compositor;
/* wl_surface.attach */
- if (surface->buffer != surface->pending.buffer)
+ if (surface->pending.newly_attached &&
+ surface->buffer != surface->pending.buffer)
{
CoglError *error = NULL;
@@ -557,6 +560,7 @@ cogland_surface_commit (struct wl_client *client,
}
surface->pending.sx = 0;
surface->pending.sy = 0;
+ surface->pending.newly_attached = FALSE;
/* wl_surface.damage */
if (surface->buffer &&
--
1.7.11.3.g3c3efa5
More information about the Cogl
mailing list