From ec3cc13ab04709eec28b6fea3d4576c07ee743c2 Mon Sep 17 00:00:00 2001 From: Joachim Henze Date: Sun, 16 Jun 2019 13:07:55 +0200 Subject: [PATCH] [0.4.12][WIN32K:ENG] Fix fullscreen switch regressions CORE-15325 & CORE-14684 PR#1659 In PDEVOBJ_vRefreshModeList, find a proper match for the current display mode instead of assuming a constant index. Both tickets regressed by SVN r74404 384affe098a91ce38623e4703f25ab139eff68de Many thanks to the patches author Thomas Faber. cherry picked from commit 0.4.13-dev-456-g 00e882c2b1ba302d01c2c63a803d78e4fbac7168 --- win32ss/gdi/eng/pdevobj.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/win32ss/gdi/eng/pdevobj.c b/win32ss/gdi/eng/pdevobj.c index 85098a58437..19c2fee06ba 100644 --- a/win32ss/gdi/eng/pdevobj.c +++ b/win32ss/gdi/eng/pdevobj.c @@ -266,6 +266,7 @@ PDEVOBJ_vRefreshModeList( PGRAPHICS_DEVICE pGraphicsDevice; PDEVMODEINFO pdminfo, pdmiNext; DEVMODEW dmDefault; + DEVMODEW dmCurrent; /* Lock the PDEV */ EngAcquireSemaphore(ppdev->hsemDevLock); @@ -274,6 +275,7 @@ PDEVOBJ_vRefreshModeList( /* Remember our default mode */ dmDefault = *pGraphicsDevice->pDevModeList[pGraphicsDevice->iDefaultMode].pdm; + dmCurrent = *ppdev->pdmwDev; /* Clear out the modes */ for (pdminfo = pGraphicsDevice->pdevmodeInfo; @@ -293,7 +295,7 @@ PDEVOBJ_vRefreshModeList( DPRINT1("FIXME: EngpPopulateDeviceModeList failed, we just destroyed a perfectly good mode list\n"); } - ppdev->pdmwDev = pGraphicsDevice->pDevModeList[pGraphicsDevice->iCurrentMode].pdm; + ppdev->pdmwDev = PDEVOBJ_pdmMatchDevMode(ppdev, &dmCurrent); /* Unlock PDEV */ EngReleaseSemaphore(ppdev->hsemDevLock);