]> Pileus Git - ~andy/gtk/commitdiff
Don't leak ShmPixmapInfo. (#349858, Chris Wilson)
authorMatthias Clasen <mclasen@redhat.com>
Tue, 15 Aug 2006 17:05:00 +0000 (17:05 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Tue, 15 Aug 2006 17:05:00 +0000 (17:05 +0000)
2006-08-15  Matthias Clasen  <mclasen@redhat.com>

* gdk/x11/gdkdrawable-x11.c (get_shm_pixmap_for_image): Don't
leak ShmPixmapInfo.  (#349858, Chris Wilson)

ChangeLog
ChangeLog.pre-2-10
gdk/x11/gdkdrawable-x11.c

index 0d134adb7cc2fa4fc06eda30d05d361a8b98810a..847440faf56b215fd37b4c5e4bb38be35b831078 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2006-08-15  Matthias Clasen  <mclasen@redhat.com>
 
+       * gdk/x11/gdkdrawable-x11.c (get_shm_pixmap_for_image): Don't
+       leak ShmPixmapInfo.  (#349858, Chris Wilson)
+
+       * gtk/Makefile.am (GTK_PRINT_PREVIEW_COMMAND): Call evince
+       with the --preview option.  (#350139, Carlos Garcia Campos)
+
        * modules/printbackends/cups/gtkprintbackendcups.c (create_pickone_option): 
        Simplify, make it build against cups 1.1.  (#350329)    
 
index 0d134adb7cc2fa4fc06eda30d05d361a8b98810a..847440faf56b215fd37b4c5e4bb38be35b831078 100644 (file)
@@ -1,5 +1,11 @@
 2006-08-15  Matthias Clasen  <mclasen@redhat.com>
 
+       * gdk/x11/gdkdrawable-x11.c (get_shm_pixmap_for_image): Don't
+       leak ShmPixmapInfo.  (#349858, Chris Wilson)
+
+       * gtk/Makefile.am (GTK_PRINT_PREVIEW_COMMAND): Call evince
+       with the --preview option.  (#350139, Carlos Garcia Campos)
+
        * modules/printbackends/cups/gtkprintbackendcups.c (create_pickone_option): 
        Simplify, make it build against cups 1.1.  (#350329)    
 
index 92278aead89f6cb1021b70c4f85333d4a4d2561b..67ba37ca8ce4ac28d897c8aadfa417998a745ad9 100644 (file)
@@ -1257,12 +1257,26 @@ typedef struct _ShmPixmapInfo ShmPixmapInfo;
 
 struct _ShmPixmapInfo
 {
-  GdkImage *image;
+  Display  *display;
   Pixmap    pix;
   Picture   pict;
   Picture   mask;
 };
 
+static void
+shm_pixmap_info_destroy (gpointer data)
+{
+  ShmPixmapInfo *info = data;
+
+  if (info->pict != None)
+    XRenderFreePicture (info->display, info->pict);
+  if (info->mask != None)
+    XRenderFreePicture (info->display, info->mask);
+
+  g_free (data);
+}
+
+
 /* Returns FALSE if we can't get a shm pixmap */
 static gboolean
 get_shm_pixmap_for_image (Display           *xdisplay,
@@ -1287,6 +1301,7 @@ get_shm_pixmap_for_image (Display           *xdisplay,
        return FALSE;
       
       info = g_new (ShmPixmapInfo, 1);
+      info->display = xdisplay;
       info->pix = *pix;
       
       info->pict = XRenderCreatePicture (xdisplay, info->pix,
@@ -1297,7 +1312,8 @@ get_shm_pixmap_for_image (Display           *xdisplay,
       else
        info->mask = None;
 
-      g_object_set_data (G_OBJECT (image), "gdk-x11-shm-pixmap", info);
+      g_object_set_data_full (G_OBJECT (image), "gdk-x11-shm-pixmap", info,
+         shm_pixmap_info_destroy);
     }
 
   *pix = info->pix;