diff --git a/win32ss/gdi/eng/device.c b/win32ss/gdi/eng/device.c index ed6c00435e2..454383cb0ad 100644 --- a/win32ss/gdi/eng/device.c +++ b/win32ss/gdi/eng/device.c @@ -179,7 +179,6 @@ EngpUpdateGraphicsDeviceList(VOID) WCHAR awcBuffer[256]; NTSTATUS Status; PGRAPHICS_DEVICE pGraphicsDevice; - BOOLEAN bFoundNewDevice = FALSE; ULONG cbValue; HKEY hkey; @@ -248,7 +247,6 @@ EngpUpdateGraphicsDeviceList(VOID) TRACE("gpVgaGraphicsDevice = %p\n", gpVgaGraphicsDevice); } } - bFoundNewDevice = TRUE; /* Set the first one as primary device */ if (!gpPrimaryGraphicsDevice || EngpHasVgaDriver(gpPrimaryGraphicsDevice)) @@ -273,7 +271,7 @@ EngpUpdateGraphicsDeviceList(VOID) gpPrimaryGraphicsDevice->pVgaDevice = gpVgaGraphicsDevice; } - if (bFoundNewDevice && gbBaseVideo) + if (gbBaseVideo) { PGRAPHICS_DEVICE pToDelete; diff --git a/win32ss/gdi/eng/pdevobj.c b/win32ss/gdi/eng/pdevobj.c index c8af5c7e9c3..bacd13b218e 100644 --- a/win32ss/gdi/eng/pdevobj.c +++ b/win32ss/gdi/eng/pdevobj.c @@ -794,6 +794,10 @@ PDEVOBJ_lChangeDisplaySettings( RequestedMode ? RequestedMode->dmDisplayFrequency : 0, pmdevOld, ppmdevNew); + /* Update device list (some devices may have been added/removed, + or gbBaseVideo variable may have been changed) */ + EngpUpdateGraphicsDeviceList(); + if (pustrDeviceName) { pGraphicsDevice = EngpFindGraphicsDevice(pustrDeviceName, 0); diff --git a/win32ss/user/ntuser/winsta.c b/win32ss/user/ntuser/winsta.c index b4c31dcf891..b3021927291 100644 --- a/win32ss/user/ntuser/winsta.c +++ b/win32ss/user/ntuser/winsta.c @@ -264,8 +264,16 @@ co_IntInitializeDesktopGraphics(VOID) TEXTMETRICW tmw; UNICODE_STRING DriverName = RTL_CONSTANT_STRING(L"DISPLAY"); PDESKTOP pdesk; + LONG lRet; - if (PDEVOBJ_lChangeDisplaySettings(NULL, NULL, NULL, &gpmdev, TRUE) != DISP_CHANGE_SUCCESSFUL) + lRet = PDEVOBJ_lChangeDisplaySettings(NULL, NULL, NULL, &gpmdev, TRUE); + if (lRet != DISP_CHANGE_SUCCESSFUL && !gbBaseVideo) + { + ERR("PDEVOBJ_lChangeDisplaySettings() failed. Trying with base video\n"); + gbBaseVideo = TRUE; + lRet = PDEVOBJ_lChangeDisplaySettings(NULL, NULL, NULL, &gpmdev, TRUE); + } + if (lRet != DISP_CHANGE_SUCCESSFUL) { ERR("PDEVOBJ_lChangeDisplaySettings() failed.\n"); return FALSE;