gdk: fix Win32 HDC access for offscreen windows

Normalize public windows and pixmaps to their drawable implementations
before resolving Win32 HDC access.

This makes public GDK_WINDOW_OFFSCREEN drawables resolve through their
GdkOffscreenWindow backing drawable instead of treating the generic
offscreen implementation as a Win32 drawable.

The resulting helper removes the incompatible-pointer warning without
increasing object text size.
This commit is contained in:
Daemonratte 2026-08-17 10:31:34 +02:00
commit 7458a4ffe2

View file

@ -744,17 +744,21 @@ 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))
return GDK_DRAWABLE_IMPL_WIN32 ((GDK_WINDOW_OBJECT (drawable))->impl);
else if (GDK_IS_PIXMAP (drawable))
return GDK_DRAWABLE_IMPL_WIN32 ((GDK_PIXMAP_OBJECT (drawable))->impl);
else
g_assert_not_reached ();
if (GDK_IS_WINDOW (drawable))
drawable = GDK_DRAWABLE ((GDK_WINDOW_OBJECT (drawable))->impl);
if (GDK_IS_OFFSCREEN_WINDOW (drawable))
drawable =
_gdk_offscreen_window_get_real_drawable
(GDK_OFFSCREEN_WINDOW (drawable));
if (GDK_IS_PIXMAP (drawable))
drawable = GDK_DRAWABLE ((GDK_PIXMAP_OBJECT (drawable))->impl);
if (GDK_IS_DRAWABLE_IMPL_WIN32 (drawable))
return GDK_DRAWABLE_IMPL_WIN32 (drawable);
g_assert_not_reached ();
return NULL;
}