[gtk+/gtk-2-24] [win32] Fix win32 theme crash on offscreen windows



commit e9b0f9e81aab098462cfc0117c449e7597858438
Author: Alexander Larsson <alexl redhat com>
Date:   Fri Dec 16 09:08:50 2011 +0100

    [win32] Fix win32 theme crash on offscreen windows
    
    We add _gdk_offscreen_window_get_real_drawable to get the real
    pixmap impl for offscreen windows, then we use this
    in gdkgc-win32.c:get_impl_drawable() for offscreen windows
    This fixes a crash when rendering win32 theme parts on
    offscreen windows (bug #623563)

 gdk/gdkinternals.h       |    1 +
 gdk/gdkoffscreenwindow.c |    6 ++++++
 gdk/win32/gdkgc-win32.c  |    2 ++
 3 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/gdk/gdkinternals.h b/gdk/gdkinternals.h
index 807e5aa..0bd803f 100644
--- a/gdk/gdkinternals.h
+++ b/gdk/gdkinternals.h
@@ -685,6 +685,7 @@ typedef struct _GdkOffscreenWindow      GdkOffscreenWindow;
 #define GDK_OFFSCREEN_WINDOW(object)         (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_OFFSCREEN_WINDOW, GdkOffscreenWindow))
 #define GDK_IS_OFFSCREEN_WINDOW(object)      (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_OFFSCREEN_WINDOW))
 GType gdk_offscreen_window_get_type (void);
+GdkDrawable * _gdk_offscreen_window_get_real_drawable (GdkOffscreenWindow *window);
 void       _gdk_offscreen_window_new                 (GdkWindow     *window,
 						      GdkScreen     *screen,
 						      GdkVisual     *visual,
diff --git a/gdk/gdkoffscreenwindow.c b/gdk/gdkoffscreenwindow.c
index 22d0cba..9ed5d45 100644
--- a/gdk/gdkoffscreenwindow.c
+++ b/gdk/gdkoffscreenwindow.c
@@ -842,6 +842,12 @@ gdk_offscreen_window_get_pointer (GdkWindow       *window,
   return TRUE;
 }
 
+GdkDrawable *
+_gdk_offscreen_window_get_real_drawable (GdkOffscreenWindow *offscreen)
+{
+  return get_real_drawable (offscreen);
+}
+
 /**
  * gdk_offscreen_window_get_pixmap:
  * @window: a #GdkWindow
diff --git a/gdk/win32/gdkgc-win32.c b/gdk/win32/gdkgc-win32.c
index 712bc28..e7e6fd8 100644
--- a/gdk/win32/gdkgc-win32.c
+++ b/gdk/win32/gdkgc-win32.c
@@ -743,6 +743,8 @@ predraw (GdkGC       *gc,
 static GdkDrawableImplWin32 *
 get_impl_drawable (GdkDrawable *drawable)
 {
+  if (GDK_IS_OFFSCREEN_WINDOW (drawable))
+    return _gdk_offscreen_window_get_real_drawable (GDK_OFFSCREEN_WINDOW (drawable));
   if (GDK_IS_DRAWABLE_IMPL_WIN32 (drawable))
     return GDK_DRAWABLE_IMPL_WIN32(drawable);
   else if (GDK_IS_WINDOW (drawable))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]