From c5a8b933afb0d671da1084e4964cf1be26318369 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Fri, 13 Dec 2013 09:07:45 +0100 Subject: [PATCH] ddraw: Unset the primary surface's palette when the palette is released. --- dlls/ddraw/ddraw_private.h | 1 + dlls/ddraw/palette.c | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h index b24376d9c8a..fb3755f9e46 100644 --- a/dlls/ddraw/ddraw_private.h +++ b/dlls/ddraw/ddraw_private.h @@ -379,6 +379,7 @@ struct ddraw_palette LONG ref; struct wined3d_palette *wineD3DPalette; + struct ddraw *ddraw; IUnknown *ifaceToRelease; DWORD flags; }; diff --git a/dlls/ddraw/palette.c b/dlls/ddraw/palette.c index 0c9534d5fc1..f35531e4cde 100644 --- a/dlls/ddraw/palette.c +++ b/dlls/ddraw/palette.c @@ -94,10 +94,10 @@ static ULONG WINAPI ddraw_palette_Release(IDirectDrawPalette *iface) { wined3d_mutex_lock(); wined3d_palette_decref(This->wineD3DPalette); - if(This->ifaceToRelease) - { + if ((This->flags & DDPCAPS_PRIMARYSURFACE) && This->ddraw->primary) + This->ddraw->primary->palette = NULL; + if (This->ifaceToRelease) IUnknown_Release(This->ifaceToRelease); - } wined3d_mutex_unlock(); HeapFree(GetProcessHeap(), 0, This); @@ -251,6 +251,7 @@ HRESULT ddraw_palette_init(struct ddraw_palette *palette, return hr; } + palette->ddraw = ddraw; palette->ifaceToRelease = (IUnknown *)&ddraw->IDirectDraw7_iface; IUnknown_AddRef(palette->ifaceToRelease);