diff --git a/gdk/win32/gdkpixmap-win32.c b/gdk/win32/gdkpixmap-win32.c index e06d069bc6..0c5251abbb 100644 --- a/gdk/win32/gdkpixmap-win32.c +++ b/gdk/win32/gdkpixmap-win32.c @@ -125,6 +125,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)); + GDI_CALL (DeleteObject, (GDK_PIXMAP_HBITMAP (wrapper))); + } } } @@ -321,6 +326,7 @@ _gdk_pixmap_new (GdkDrawable *drawable, } SelectObject (hdc, hbitmap); + pixmap_impl->is_allocated = TRUE; } /* We need to use the same hdc, because only one hdc diff --git a/gdk/win32/gdkpixmap-win32.h b/gdk/win32/gdkpixmap-win32.h index fbeb28f7d1..e9d965d834 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