diff --git a/dll/cpl/desk/settings.c b/dll/cpl/desk/settings.c index 602df32800b..0a718939b2f 100644 --- a/dll/cpl/desk/settings.c +++ b/dll/cpl/desk/settings.c @@ -9,6 +9,7 @@ */ #include "desk.h" +#include typedef struct _SETTINGS_DATA { @@ -842,6 +843,37 @@ SwitchDisplayMode(HWND hwndDlg, PWSTR DeviceName, PSETTINGS_ENTRY seInit, PSETTI } } +PSETTINGS_ENTRY FindElement(DWORD dmPelsWidth, DWORD dmPelsHeight, DWORD dmBitsPerPel, PSETTINGS_ENTRY list) +{ + PSETTINGS_ENTRY Current = list; + //Go back to 1st element + while (Current->Blink != NULL) + { + Current = Current->Blink; + } + //Go through the list + while (Current->Flink != NULL) + { + if ((Current->dmPelsWidth == dmPelsWidth) && + (Current->dmPelsHeight == dmPelsHeight) && + (Current->dmPelsHeight == dmPelsHeight) && + (Current->dmBitsPerPel == dmBitsPerPel) ) + { + return Current; + } + Current = Current->Flink; + + } + if ((Current->dmPelsWidth == dmPelsWidth) && + (Current->dmPelsHeight == dmPelsHeight) && + (Current->dmPelsHeight == dmPelsHeight) && + (Current->dmBitsPerPel == dmBitsPerPel) ) + { + return Current; + } + return NULL; +} + static VOID ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData) { @@ -866,10 +898,12 @@ ApplyDisplaySettings(HWND hwndDlg, PSETTINGS_DATA pData) } else { - pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth = pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth; - pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight = pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight; - pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel = pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel; - pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency = pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency; + pData->CurrentDisplayDevice->CurrentSettings = FindElement(pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth, + pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight, + pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel, + pData->CurrentDisplayDevice->CurrentSettings); + //Shall never be NULL, eg initial settings had to be an element of the list + ASSERT(pData->CurrentDisplayDevice->CurrentSettings); UpdateDisplay(hwndDlg, pData, TRUE); } } @@ -927,10 +961,12 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = devmode.dmPelsHeight; pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = devmode.dmBitsPerPel; pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency = devmode.dmDisplayFrequency; - pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth = pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth; - pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight = pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight; - pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel = pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel; - pData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency = pData->CurrentDisplayDevice->InitialSettings.dmDisplayFrequency; + pData->CurrentDisplayDevice->CurrentSettings = FindElement(pData->CurrentDisplayDevice->InitialSettings.dmPelsWidth, + pData->CurrentDisplayDevice->InitialSettings.dmPelsHeight, + pData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel, + pData->CurrentDisplayDevice->CurrentSettings); + //Shall never be NULL, eg initial settings had to be an element of the list + ASSERT(pData->CurrentDisplayDevice->CurrentSettings); UpdateDisplay(hwndDlg, pData, TRUE); } }