[KSPROXY]
[reactos.git] / reactos / dll / cpl / desk / settings.c
index 134f9dc..1ede0e7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS Display Control Panel
- * FILE:            lib/cpl/desk/settings.c
+ * FILE:            dll/cpl/desk/settings.c
  * PURPOSE:         Settings property page
  *
  * PROGRAMMERS:     Trevor McCort (lycan359@gmail.com)
@@ -107,6 +107,7 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI
                        Current->dmPelsWidth = devmode.dmPelsWidth;
                        Current->dmPelsHeight = devmode.dmPelsHeight;
                        Current->dmBitsPerPel = devmode.dmBitsPerPel;
+                       Current->dmDisplayFrequency = devmode.dmDisplayFrequency;
                        while (Next != NULL && (
                               Next->dmPelsWidth < Current->dmPelsWidth ||
                               (Next->dmPelsWidth == Current->dmPelsWidth && Next->dmPelsHeight < Current->dmPelsHeight) ||
@@ -286,13 +287,14 @@ OnInitDialog(IN HWND hwndDlg)
        DISPLAY_DEVICE displayDevice;
        PGLOBAL_DATA pGlobalData;
 
-       pGlobalData = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GLOBAL_DATA));
+       pGlobalData = HeapAlloc(GetProcessHeap(), 0, sizeof(GLOBAL_DATA));
        if (pGlobalData == NULL)
                return;
 
        SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
 
        /* Get video cards list */
+       pGlobalData->DisplayDeviceList = NULL;
        displayDevice.cb = (DWORD)sizeof(DISPLAY_DEVICE);
        while (EnumDisplayDevices(NULL, iDevNum, &displayDevice, 0x1))
        {
@@ -303,6 +305,7 @@ OnInitDialog(IN HWND hwndDlg)
                }
                iDevNum++;
        }
+
        if (Result == 0)
        {
                /* No adapter found */
@@ -311,6 +314,10 @@ OnInitDialog(IN HWND hwndDlg)
                EnableWindow(GetDlgItem(hwndDlg, IDC_SETTINGS_RESOLUTION_TEXT), FALSE);
                EnableWindow(GetDlgItem(hwndDlg, IDC_SETTINGS_ADVANCED), FALSE);
                ShowWindow(GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM), SW_HIDE);
+
+               /* Do not initialize the color spectrum bitmaps */
+               memset(pGlobalData->hSpectrumBitmaps, 0, sizeof(pGlobalData->hSpectrumBitmaps));
+               return;
        }
        else if (Result == 1)
        {
@@ -325,10 +332,10 @@ OnInitDialog(IN HWND hwndDlg)
                monitors.Size.cy = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
                monitors.Flags = 0;
                SendDlgItemMessage(hwndDlg,
-                                                  IDC_SETTINGS_MONSEL,
-                                                  MSLM_SETMONITORSINFO,
-                                                  1,
-                                                  (LPARAM)&monitors);
+                                  IDC_SETTINGS_MONSEL,
+                                  MSLM_SETMONITORSINFO,
+                                  1,
+                                  (LPARAM)&monitors);
        }
        else /* FIXME: incomplete! */
        {
@@ -352,10 +359,10 @@ OnInitDialog(IN HWND hwndDlg)
                        }
 
                        SendDlgItemMessage(hwndDlg,
-                                                          IDC_SETTINGS_MONSEL,
-                                                          MSLM_SETMONITORSINFO,
-                                                          Result,
-                                                          (LPARAM)pMonitors);
+                                          IDC_SETTINGS_MONSEL,
+                                          MSLM_SETMONITORSINFO,
+                                          Result,
+                                          (LPARAM)pMonitors);
 
                        HeapFree(GetProcessHeap(), 0, pMonitors);
                }
@@ -401,12 +408,17 @@ ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_
                default: iBitmap = 2;
        }
 
-       SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]);
-       StretchBlt(hDC,
-                  client->left, client->top, client->right - client->left, client->bottom - client->top,
-                  hdcMem, 0, 0,
-                  pGlobalData->cxSource[iBitmap],
-                  pGlobalData->cySource[iBitmap], SRCCOPY);
+       if (SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]))
+       {
+               StretchBlt(hDC,
+                          client->left, client->top,
+                          client->right - client->left,
+                          client->bottom - client->top,
+                          hdcMem, 0, 0,
+                          pGlobalData->cxSource[iBitmap],
+                          pGlobalData->cySource[iBitmap], SRCCOPY);
+       }
+
        DeleteDC(hdcMem);
 }
 
@@ -614,6 +626,7 @@ INT_PTR CALLBACK
 SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam)
 {
        PGLOBAL_DATA pGlobalData;
+       TCHAR Message[1024], Title[256];
 
        pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
 
@@ -631,7 +644,6 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar
 
                        if (lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM)
                                ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData);
-
                        break;
                }
                case WM_COMMAND:
@@ -686,7 +698,8 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar
                                        devmode.dmPelsWidth = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsWidth;
                                        devmode.dmPelsHeight = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
                                        devmode.dmBitsPerPel = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel;
-                                       devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;
+                                       devmode.dmDisplayFrequency = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmDisplayFrequency;
+                                       devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
                                        rc = ChangeDisplaySettingsEx(
                                                pGlobalData->CurrentDisplayDevice->DeviceName,
                                                &devmode,
@@ -700,14 +713,16 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar
                                                        pGlobalData->CurrentDisplayDevice->InitialSettings.dmPelsHeight = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmPelsHeight;
                                                        pGlobalData->CurrentDisplayDevice->InitialSettings.dmBitsPerPel = pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel;
                                                        break;
-                                               case DISP_CHANGE_FAILED:
-                                                       MessageBox(NULL, TEXT("Failed to apply new settings..."), TEXT("Display settings"), MB_OK | MB_ICONSTOP);
-                                                       break;
                                                case DISP_CHANGE_RESTART:
-                                                       MessageBox(NULL, TEXT("You need to restart your computer to apply changes."), TEXT("Display settings"), MB_OK | MB_ICONINFORMATION);
+                                                       LoadString(hApplet, IDS_DISPLAY_SETTINGS, Title, sizeof(Title) / sizeof(TCHAR));
+                                                       LoadString(hApplet, IDS_APPLY_NEEDS_RESTART, Message, sizeof(Message) / sizeof (TCHAR));
+                                                       MessageBox(hwndDlg, Message, Title, MB_OK | MB_ICONINFORMATION);
                                                        break;
+                                               case DISP_CHANGE_FAILED:
                                                default:
-                                                       MessageBox(NULL, TEXT("Unknown error when applying new settings..."), TEXT("Display settings"), MB_OK | MB_ICONSTOP);
+                                                       LoadString(hApplet, IDS_DISPLAY_SETTINGS, Title, sizeof(Title) / sizeof(TCHAR));
+                                                       LoadString(hApplet, IDS_APPLY_FAILED, Message, sizeof(Message) / sizeof (TCHAR));
+                                                       MessageBox(hwndDlg, Message, Title, MB_OK | MB_ICONSTOP);
                                                        break;
                                        }
                                }
@@ -834,13 +849,13 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar
                                Current = Next;
                        }
 
-                       HeapFree(GetProcessHeap(), 0, pGlobalData);
-
                        for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++)
                        {
                                if (pGlobalData->hSpectrumBitmaps[i])
                                        DeleteObject(pGlobalData->hSpectrumBitmaps[i]);
                        }
+
+                       HeapFree(GetProcessHeap(), 0, pGlobalData);
                }
        }
        return FALSE;