Index: dll/cpl/desk/monslctl.c =================================================================== --- dll/cpl/desk/monslctl.c (revision 70568) +++ dll/cpl/desk/monslctl.c (working copy) @@ -39,6 +39,7 @@ PMONSL_MON Monitors; RECT rcExtent; RECT rcMonitors; + RECT rcOldMonitors; POINT ScrollPos; SIZE Margin; SIZE SelectionFrame; @@ -261,6 +262,14 @@ InvalidateRect(infoPtr->hSelf, &rc, TRUE); + + if (!EqualRect(&infoPtr->rcMonitors, &infoPtr->rcOldMonitors) && + infoPtr->rcOldMonitors.right != infoPtr->rcOldMonitors.left) + { + MonSelRectToScreen(infoPtr, &infoPtr->rcOldMonitors, &rc); + InvalidateRect(infoPtr->hSelf, &rc, TRUE); + infoPtr->rcOldMonitors = infoPtr->rcMonitors; + } } static VOID @@ -355,6 +364,7 @@ ScaleRectSizeFit(&rcExtSurface, &rcExtDisplay); + infoPtr->rcOldMonitors = infoPtr->rcMonitors; infoPtr->rcMonitors = rcExtDisplay; /* Now that we know in which area all monitors are located, Index: dll/cpl/desk/settings.c =================================================================== --- dll/cpl/desk/settings.c (revision 70568) +++ dll/cpl/desk/settings.c (working copy) @@ -26,6 +26,8 @@ TCHAR Buffer[64]; TCHAR Pixel[64]; DWORD index; + HWND hwndMonSel; + MONSL_MONINFO info; LoadString(hApplet, IDS_PIXEL, Pixel, sizeof(Pixel) / sizeof(TCHAR)); _stprintf(Buffer, Pixel, pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth, pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight, Pixel); @@ -43,6 +45,15 @@ } if (LoadString(hApplet, (2900 + pData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel), Buffer, sizeof(Buffer) / sizeof(TCHAR))) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_SELECTSTRING, (WPARAM)-1, (LPARAM)Buffer); + + hwndMonSel = GetDlgItem(hwndDlg, IDC_SETTINGS_MONSEL); + index = (INT)SendMessage(hwndMonSel, MSLM_GETCURSEL, 0, 0); + if (index != (DWORD)-1 && SendMessage(hwndMonSel, MSLM_GETMONITORINFO, index, (LPARAM)&info)) + { + info.Size.cx = pData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth; + info.Size.cy = pData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight; + SendMessage(hwndMonSel, MSLM_SETMONITORINFO, index, (LPARAM)&info); + } } static PSETTINGS_ENTRY @@ -165,7 +176,7 @@ for (Current = newEntry->Settings; Current != NULL; Current = Current->Flink) { if (Current->Flink != NULL && - ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) && + ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) || (Current->dmPelsHeight != Current->Flink->dmPelsHeight))) { ResolutionsCount++; @@ -182,7 +193,7 @@ { if (Current->Flink == NULL || (Current->Flink != NULL && - ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) && + ((Current->dmPelsWidth != Current->Flink->dmPelsWidth) || (Current->dmPelsHeight != Current->Flink->dmPelsHeight)))) { newEntry->Resolutions[i].dmPelsWidth = Current->dmPelsWidth;