[ros-diffs] [ekohl] 26649: The current cursor scheme will now be loaded correctly and the scheme list will display the correct name of the cursor scheme.

ekohl at svn.reactos.org ekohl at svn.reactos.org
Sun May 6 04:06:30 CEST 2007


Author: ekohl
Date: Sun May  6 06:06:30 2007
New Revision: 26649

URL: http://svn.reactos.org/svn/reactos?rev=26649&view=rev
Log:
The current cursor scheme will now be loaded correctly and the scheme list will display the correct name of the cursor scheme.

Modified:
    trunk/reactos/dll/cpl/main/mouse.c

Modified: trunk/reactos/dll/cpl/main/mouse.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/cpl/main/mouse.c?rev=26649&r1=26648&r2=26649&view=diff
==============================================================================
--- trunk/reactos/dll/cpl/main/mouse.c (original)
+++ trunk/reactos/dll/cpl/main/mouse.c Sun May  6 06:06:30 2007
@@ -437,11 +437,6 @@
     LONG lError;
     HWND hDlgCtrl;
     LRESULT lResult;
-    TCHAR szCurrentScheme[MAX_PATH];
-    DWORD dwCurrentScheme;
-    INT nSchemeIndex;
-    INT i, nCount;
-    LPTSTR p;
 
     hDlgCtrl = GetDlgItem(hwndDlg, IDC_COMBO_CURSOR_SCHEME);
     SendMessage(hDlgCtrl, CB_RESETCONTENT, 0, 0);
@@ -534,49 +529,6 @@
     LoadString(hApplet, IDS_NONE, szSystemScheme, MAX_PATH);
     lResult = SendMessage(hDlgCtrl, CB_ADDSTRING, (WPARAM)0, (LPARAM)szSystemScheme);
     SendMessage(hDlgCtrl, CB_SETITEMDATA, (WPARAM)lResult, (LPARAM)NULL);
-
-    /* Get the name of the current cursor scheme */
-    szCurrentScheme[0] = 0;
-    if (RegOpenKeyEx(HKEY_CURRENT_USER, _T("Control Panel\\Cursors"), 0, KEY_READ | KEY_QUERY_VALUE, &hCursorKey) == ERROR_SUCCESS)
-    {
-        dwCurrentScheme = sizeof(szCurrentScheme) / sizeof(TCHAR);
-        if (RegQueryValueEx(hCursorKey, NULL, NULL, NULL, (LPBYTE)szCurrentScheme, &dwCurrentScheme))
-            szCurrentScheme[0] = 0;
-
-        RegCloseKey(hCursorKey);
-    }
-
-    /* Search for the matching entry in the cursor scheme list */
-    LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
-    nSchemeIndex = -1;
-    nCount = (INT)SendMessage(hDlgCtrl, CB_GETCOUNT, 0, 0);
-    for (i = 0; i < nCount; i++)
-    {
-        SendMessage(hDlgCtrl, CB_GETLBTEXT, i, (LPARAM)szValueName);
-
-        p = _tcsstr(szValueName, szSystemScheme);
-        if (p)
-        {
-            p -= 1;
-            *p = 0;
-        }
-
-        if (_tcscmp(szValueName, szCurrentScheme) == 0)
-        {
-            nSchemeIndex = (INT)i;
-            break;
-        }
-    }
-
-    /* Select the matching entry */
-    if (nSchemeIndex != -1)
-        SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)nSchemeIndex, (LPARAM)0);
-    else
-    {
-        SendMessage(hDlgCtrl, CB_SETCURSEL, (WPARAM)lResult, (LPARAM)0);
-        hDlgCtrl = GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME);
-        EnableWindow(hDlgCtrl, FALSE);
-    }
 
     return TRUE;
 }
@@ -996,7 +948,7 @@
 
 
 static VOID
-LoadNewCursorScheme(HWND hwndDlg, BOOL bInit)
+LoadNewCursorScheme(HWND hwndDlg)
 {
     TCHAR buffer[MAX_PATH];
     TCHAR szSystemScheme[MAX_PATH];
@@ -1023,7 +975,103 @@
 
     lpName = (LPTSTR)SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_GETITEMDATA, nSel, 0);
     LoadCursorScheme(lpName, !bEnable);
-    RefreshCursorList(hwndDlg, bInit);
+    RefreshCursorList(hwndDlg, FALSE);
+}
+
+
+static VOID
+LoadInitialCursorScheme(HWND hwndDlg)
+{
+    TCHAR szSchemeName[256];
+    TCHAR szSystemScheme[256];
+    TCHAR szCursorPath[256];
+    HKEY hCursorKey;
+    LONG lError;
+    DWORD dwDataSize;
+    DWORD dwSchemeSource = 0;
+    UINT index, i;
+    DWORD dwType;
+    INT nSel;
+
+    for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
+    {
+        g_CursorData[i].hCursor = 0;
+        g_CursorData[i].szCursorPath[0] = 0;
+    }
+
+    lError = RegOpenKeyEx(HKEY_CURRENT_USER,
+                          _T("Control Panel\\Cursors"),
+                          0,
+                          KEY_READ | KEY_QUERY_VALUE,
+                          &hCursorKey);
+    if (lError != ERROR_SUCCESS)
+        return;
+
+    dwDataSize = sizeof(DWORD);
+    lError = RegQueryValueEx(hCursorKey,
+                             _T("Scheme Source"),
+                             NULL,
+                             NULL,
+                             (LPBYTE)&dwSchemeSource,
+                             &dwDataSize);
+
+    if (dwSchemeSource != 0)
+    {
+        dwDataSize = 256 * sizeof(TCHAR);
+        lError = RegQueryValueEx(hCursorKey,
+                                 NULL,
+                                 NULL,
+                                 NULL,
+                                 (LPBYTE)szSchemeName,
+                                 &dwDataSize);
+
+        for (index = IDS_ARROW, i = 0; index <= IDS_HAND; index++, i++)
+        {
+            dwDataSize = MAX_PATH * sizeof(TCHAR);
+            lError = RegQueryValueEx(hCursorKey,
+                                     g_CursorData[i].lpValueName,
+                                     NULL,
+                                     &dwType,
+                                     (LPBYTE)szCursorPath,
+                                     &dwDataSize);
+            if (lError == ERROR_SUCCESS)
+            {
+                if (dwType == REG_EXPAND_SZ)
+                {
+                    ExpandEnvironmentStrings(szCursorPath, g_CursorData[i].szCursorPath, MAX_PATH);
+                }
+                else
+                {
+                    _tcscpy(g_CursorData[i].szCursorPath, szCursorPath);
+                }
+            }
+        }
+    }
+
+    RegCloseKey(hCursorKey);
+
+    ReloadCurrentCursorScheme();
+    RefreshCursorList(hwndDlg, TRUE);
+
+    /* Build the full scheme name */
+    if (dwSchemeSource == 0)
+    {
+        LoadString(hApplet, IDS_NONE, szSchemeName, MAX_PATH);
+    }
+    else if (dwSchemeSource == 2)
+    {
+        LoadString(hApplet, IDS_SYSTEM_SCHEME, szSystemScheme, MAX_PATH);
+        _tcscat(szSchemeName, _T(" "));
+        _tcscat(szSchemeName, szSystemScheme);
+    }
+
+    /* Search and select the curent scheme name from the scheme list */
+    nSel = SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_FINDSTRINGEXACT, -1, (LPARAM)szSchemeName);
+    if (nSel != CB_ERR)
+        SendDlgItemMessage(hwndDlg, IDC_COMBO_CURSOR_SCHEME, CB_SETCURSEL, (WPARAM)nSel, (LPARAM)0);
+
+    /* Enable /disable delete button */
+    EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_DELETE_SCHEME), (dwSchemeSource == 1));
 }
 
 
@@ -1119,7 +1167,7 @@
             pPointerData->cyCursor = GetSystemMetrics(SM_CYCURSOR);
 
             EnumerateCursorSchemes(hwndDlg);
-            LoadNewCursorScheme(hwndDlg, TRUE);
+            LoadInitialCursorScheme(hwndDlg);
 
             /* Get drop shadow setting */
             if (!SystemParametersInfo(SPI_GETDROPSHADOW, 0, &pPointerData->bDropShadow, 0))
@@ -1178,8 +1226,7 @@
                 case IDC_COMBO_CURSOR_SCHEME:
                     if (HIWORD(wParam) == CBN_SELENDOK)
                     {
-                        LoadNewCursorScheme(hwndDlg, FALSE);
-
+                        LoadNewCursorScheme(hwndDlg);
                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
                     }
                     break;




More information about the Ros-diffs mailing list