From 7aa624ba01a89c23e25d7d67b3fd54b4a9ae4084 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com>
Date: Mon, 8 Apr 2013 22:45:50 +0200
Subject: [PATCH] win32: free allocated gdi objects in 16bpp
In 16bpp, Gdk is creating hbitmap with CreateDIBSection() and a hdc with
CreateCompatibleDC(). Those 2 objects need to be released when the
pixmap is finalized.
https://bugzilla.gnome.org/show_bug.cgi?id=671538
---
gdk/win32/gdkpixmap-win32.c | 7 +++++++
gdk/win32/gdkpixmap-win32.h | 1 +
2 files changed, 8 insertions(+)
diff --git a/gdk/win32/gdkpixmap-win32.c b/gdk/win32/gdkpixmap-win32.c
index 6d18ca4..53c6f3c 100644
--- a/gdk/win32/gdkpixmap-win32.c
+++ b/gdk/win32/gdkpixmap-win32.c
@@ -121,6 +121,11 @@ gdk_pixmap_impl_win32_finalize (GObject *object)
/* Drop our reference */
cairo_surface_destroy (drawable_impl->cairo_surface);
drawable_impl->cairo_surface = NULL;
+
+ if (impl->is_allocated) {
+ GDI_CALL (DeleteDC, (drawable_impl->hdc));
+ DeleteObject (GDK_PIXMAP_HBITMAP (wrapper));
+ }
}
_gdk_win32_drawable_finish (GDK_DRAWABLE (object));
@@ -264,6 +269,8 @@ _gdk_pixmap_new (GdkDrawable *drawable,
HWND hwnd;
GdkVisual *visual;
+ pixmap_impl->is_allocated = TRUE;
+
if (GDK_IS_WINDOW (drawable))
hwnd = GDK_WINDOW_HWND (drawable);
else
diff --git a/gdk/win32/gdkpixmap-win32.h b/gdk/win32/gdkpixmap-win32.h
index fbeb28f..e9d965d 100644
--- a/gdk/win32/gdkpixmap-win32.h
+++ b/gdk/win32/gdkpixmap-win32.h
@@ -53,6 +53,7 @@ struct _GdkPixmapImplWin32
gint height;
guchar *bits;
guint is_foreign : 1;
+ guint is_allocated : 1;
};
struct _GdkPixmapImplWin32Class
--
1.8.1.1.439.g50a6b54