diff options
author | Carl Worth <cworth@cworth.org> | 2003-09-30 07:58:58 +0000 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2003-09-30 07:58:58 +0000 |
commit | 6b582a836abe9d44034e97e5ded55a983932e022 (patch) | |
tree | f5b455cd6f554e5167d62855616d934e5209b9d1 /src | |
parent | 9edacaf78075c3ed3a5e27da81f41ddc265acfc1 (diff) |
Fix to delay XFreePixmap until cairo_surface_destroy.
Diffstat (limited to 'src')
-rw-r--r-- | src/cairo-surface.c | 7 | ||||
-rw-r--r-- | src/cairo_surface.c | 7 | ||||
-rw-r--r-- | src/cairoint.h | 1 |
3 files changed, 13 insertions, 2 deletions
diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 262ce61c..321402c6 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -114,6 +114,7 @@ cairo_surface_create_for_drawable (Display *dpy, surface->gc = 0; surface->drawable = drawable; + surface->owns_pixmap = 0; surface->visual = visual; if (! XRenderQueryVersion (dpy, &surface->render_major, &surface->render_minor)) { @@ -207,6 +208,7 @@ cairo_surface_create_for_image (char *data, surface->gc = 0; surface->drawable = 0; + surface->owns_pixmap = 0; surface->visual = NULL; surface->render_major = -1; surface->render_minor = -1; @@ -276,7 +278,7 @@ cairo_surface_create_similar_solid (cairo_surface_t *other, NULL, format, DefaultColormap (dpy, scr)); - XFreePixmap (surface->dpy, pix); + surface->owns_pixmap = 1; } else { char *data; int stride; @@ -326,6 +328,9 @@ cairo_surface_destroy (cairo_surface_t *surface) if (surface->picture) XRenderFreePicture (surface->dpy, surface->picture); + if (surface->owns_pixmap) + XFreePixmap (surface->dpy, surface->drawable); + if (surface->icformat) IcFormatDestroy (surface->icformat); diff --git a/src/cairo_surface.c b/src/cairo_surface.c index 262ce61c..321402c6 100644 --- a/src/cairo_surface.c +++ b/src/cairo_surface.c @@ -114,6 +114,7 @@ cairo_surface_create_for_drawable (Display *dpy, surface->gc = 0; surface->drawable = drawable; + surface->owns_pixmap = 0; surface->visual = visual; if (! XRenderQueryVersion (dpy, &surface->render_major, &surface->render_minor)) { @@ -207,6 +208,7 @@ cairo_surface_create_for_image (char *data, surface->gc = 0; surface->drawable = 0; + surface->owns_pixmap = 0; surface->visual = NULL; surface->render_major = -1; surface->render_minor = -1; @@ -276,7 +278,7 @@ cairo_surface_create_similar_solid (cairo_surface_t *other, NULL, format, DefaultColormap (dpy, scr)); - XFreePixmap (surface->dpy, pix); + surface->owns_pixmap = 1; } else { char *data; int stride; @@ -326,6 +328,9 @@ cairo_surface_destroy (cairo_surface_t *surface) if (surface->picture) XRenderFreePicture (surface->dpy, surface->picture); + if (surface->owns_pixmap) + XFreePixmap (surface->dpy, surface->drawable); + if (surface->icformat) IcFormatDestroy (surface->icformat); diff --git a/src/cairoint.h b/src/cairoint.h index 307b9703..7e7911d6 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -249,6 +249,7 @@ struct cairo_surface { GC gc; Drawable drawable; Visual *visual; + int owns_pixmap; int render_major; int render_minor; |