From 91e81e3263fd783f2518ea7081beff74830d0e7c Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Tue, 6 Oct 2009 09:02:31 +0000 Subject: [PATCH] - bind (almost all) mouse settings to system and registry and fixup sysparams svn path=/trunk/; revision=43312 --- reactos/dll/cpl/main/mouse.c | 28 +++++------- .../win32/win32k/include/sysparams.h | 1 + .../win32/win32k/ntuser/sysparams.c | 44 +++++++++++++++++-- 3 files changed, 54 insertions(+), 19 deletions(-) diff --git a/reactos/dll/cpl/main/mouse.c b/reactos/dll/cpl/main/mouse.c index 0c4f76d4cd5..4417380e232 100644 --- a/reactos/dll/cpl/main/mouse.c +++ b/reactos/dll/cpl/main/mouse.c @@ -333,6 +333,7 @@ ButtonProc(IN HWND hwndDlg, SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0); SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonRight); } + //SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_SwapMouseButtons, NULL, 0); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; @@ -379,6 +380,8 @@ ButtonProc(IN HWND hwndDlg, SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); } + SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); + //SetDoubleClickTime(pButtonData->g_DoubleClickSpeed); #if (WINVER >= 0x0500) SystemParametersInfo(SPI_SETMOUSECLICKLOCK, pButtonData->g_ClickLockEnabled, NULL, SPIF_SENDCHANGE); @@ -392,8 +395,8 @@ ButtonProc(IN HWND hwndDlg, SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, 0); /* Reset double click speed setting */ -// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, 0); - SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed); + SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, 0); + //SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed); } return TRUE; @@ -411,14 +414,14 @@ ButtonProc(IN HWND hwndDlg, case TB_ENDTRACK: lResult = SendDlgItemMessage(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED, TBM_GETPOS, 0, 0); pButtonData->g_DoubleClickSpeed = (14 - (INT)lResult) * 50 + 200; -// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, 0); + //SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); SetDoubleClickTime(pButtonData->g_DoubleClickSpeed); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; case TB_THUMBTRACK: pButtonData->g_DoubleClickSpeed = (14 - (INT)HIWORD(wParam)) * 50 + 200; -// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, 0); + //SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_DoubleClickSpeed, NULL, 0); SetDoubleClickTime(pButtonData->g_DoubleClickSpeed); PropSheet_Changed(GetParent(hwndDlg), hwndDlg); break; @@ -1412,23 +1415,19 @@ OptionProc(IN HWND hwndDlg, pOptionData->OrigMouseAccel.nThreshold2 = pOptionData->MouseAccel.nThreshold2; /* snap to default button */ - if (SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->bSnapToDefaultButton, 0)) - pOptionData->bSnapToDefaultButton = FALSE; + SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->bSnapToDefaultButton, 0); pOptionData->bOrigSnapToDefaultButton = pOptionData->bSnapToDefaultButton; /* mouse trails */ - if (!SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->uMouseTrails, 0)) - pOptionData->uMouseTrails = 0; + SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->uMouseTrails, 0); pOptionData->uOrigMouseTrails = pOptionData->uMouseTrails; /* hide pointer while typing */ - if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->bMouseVanish, 0)) - pOptionData->bMouseVanish = FALSE; + SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->bMouseVanish, 0); pOptionData->bOrigMouseVanish = pOptionData->bMouseVanish; /* show pointer with Ctrl-Key */ - if (!SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->bMouseSonar, 0)) - pOptionData->bMouseSonar = FALSE; + SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->bMouseSonar, 0); pOptionData->bOrigMouseSonar = pOptionData->bMouseSonar; /* Set mouse speed */ @@ -1744,10 +1743,7 @@ WheelProc(IN HWND hwndDlg, SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pWheelData); /* Get wheel scroll lines */ - if (!SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &pWheelData->uWheelScrollLines, 0)) - { - pWheelData->uWheelScrollLines = DEFAULT_WHEEL_SCROLL_LINES; - } + SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &pWheelData->uWheelScrollLines, 0); ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, TRUE); SendDlgItemMessage(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES, UDM_SETRANGE, 0, MAKELONG((short)100, (short)0)); diff --git a/reactos/subsystems/win32/win32k/include/sysparams.h b/reactos/subsystems/win32/win32k/include/sysparams.h index d8761d7c908..ae9b85dd651 100644 --- a/reactos/subsystems/win32/win32k/include/sysparams.h +++ b/reactos/subsystems/win32/win32k/include/sysparams.h @@ -31,6 +31,7 @@ enum UPM_TOOLTIPANIMATION = 0x800, UPM_TOOLTIPFADE = 0x1000, UPM_CURSORSHADOW = 0x2000, + UPM_CLICKLOCK = 0x8000, // room for more UPM_UIEFFECTS = 0x80000000, UPM_DEFAULT = 0x80003E9E diff --git a/reactos/subsystems/win32/win32k/ntuser/sysparams.c b/reactos/subsystems/win32/win32k/ntuser/sysparams.c index 882459fa369..6861d780543 100644 --- a/reactos/subsystems/win32/win32k/ntuser/sysparams.c +++ b/reactos/subsystems/win32/win32k/ntuser/sysparams.c @@ -66,6 +66,7 @@ static const WCHAR* VAL_DRAGHEIGHT = L"DragHeight"; static const WCHAR* VAL_DRAGWIDTH = L"DragWidth"; static const WCHAR* VAL_FNTSMOOTH = L"FontSmoothing"; static const WCHAR* VAL_SCRLLLINES = L"WheelScrollLines"; +static const WCHAR* VAL_CLICKLOCKTIME = L"ClickLockTime"; #if (_WIN32_WINNT >= 0x0600) static const WCHAR* VAL_SCRLLCHARS = L"WheelScrollChars"; #endif @@ -95,6 +96,18 @@ static const WCHAR* VAL_ON = L"On"; /** Loading the settings ******************************************************/ +static +INT +SpiLoadDWord(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue) +{ + DWORD Result; + if (!RegReadUserSetting(pwszKey, pwszValue, REG_DWORD, &Result, sizeof(Result))) + { + return iValue; + } + return Result; +} + static INT SpiLoadInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue) @@ -235,6 +248,7 @@ SpiUpdatePerUserSystemParameters() /* Load desktop settings */ gspv.bDragFullWindows = SpiLoadInt(KEY_DESKTOP, VAL_DRAG, 0); gspv.iWheelScrollLines = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLLINES, 3); + gspv.dwMouseClickLockTime = SpiLoadDWord(KEY_DESKTOP, VAL_CLICKLOCKTIME, 1200); #if (_WIN32_WINNT >= 0x0600) gspv.iWheelScrollChars = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLCHARS, 3); #endif @@ -297,6 +311,17 @@ NtUserUpdatePerUserSystemParameters( /** Storing the settings ******************************************************/ +static +VOID +SpiStoreDWord(PCWSTR pwszKey, PCWSTR pwszValue, DWORD Value) +{ + RegWriteUserSetting(pwszKey, + pwszValue, + REG_DWORD, + &Value, + sizeof(Value)); +} + static VOID SpiStoreSz(PCWSTR pwszKey, PCWSTR pwszValue, PCWSTR pwsz) @@ -446,6 +471,19 @@ SpiSetBool(BOOL *pbData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl) return (UINT_PTR)pwszKey; } +static inline +UINT_PTR +SpiSetDWord(PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl) +{ + REQ_INTERACTIVE_WINSTA(ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION); + *(INT*)pvData = iValue; + if (fl & SPIF_UPDATEINIFILE) + { + SpiStoreDWord(pwszKey, pwszValue, iValue); + } + return (UINT_PTR)pwszKey; +} + static inline UINT_PTR SpiSetInt(PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl) @@ -1268,10 +1306,10 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl) return SpiSetBool(&gspv.bMouseSonar, uiParam, KEY_MOUSE, L"", fl); case SPI_GETMOUSECLICKLOCK: - return SpiGetInt(pvParam, &gspv.bMouseClickLock, fl); + return SpiGetUserPref(UPM_CLICKLOCK, pvParam, fl); case SPI_SETMOUSECLICKLOCK: - return SpiSetBool(&gspv.bMouseClickLock, uiParam, KEY_MOUSE, L"", fl); + return SpiSetUserPref(UPM_CLICKLOCK, pvParam, fl); case SPI_GETMOUSEVANISH: return SpiGetInt(pvParam, &gspv.bMouseVanish, fl); @@ -1351,7 +1389,7 @@ SpiGetSet(UINT uiAction, UINT uiParam, PVOID pvParam, FLONG fl) return SpiGetInt(pvParam, &gspv.dwMouseClickLockTime, fl); case SPI_SETMOUSECLICKLOCKTIME: - return SpiSetInt(&gspv.dwMouseClickLockTime, uiParam, KEY_MOUSE, L"", fl); + return SpiSetDWord(&gspv.dwMouseClickLockTime, uiParam, KEY_DESKTOP, VAL_CLICKLOCKTIME, fl); case SPI_GETFONTSMOOTHINGTYPE: return SpiGetInt(pvParam, &gspv.uiFontSmoothingType, fl);