- bind (almost all) mouse settings to system and registry and fixup sysparams

svn path=/trunk/; revision=43312
This commit is contained in:
Matthias Kupfer 2009-10-06 09:02:31 +00:00
parent 89c0cc229a
commit 91e81e3263
3 changed files with 54 additions and 19 deletions

View file

@ -333,6 +333,7 @@ ButtonProc(IN HWND hwndDlg,
SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0); SendMessage((HWND)lParam, BM_SETCHECK, (WPARAM)BST_CHECKED, (LPARAM)0);
SendDlgItemMessage(hwndDlg, IDC_IMAGE_SWAP_MOUSE, STM_SETIMAGE, IMAGE_ICON, (LPARAM)pButtonData->hButtonRight); 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); PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break; break;
@ -379,6 +380,8 @@ ButtonProc(IN HWND hwndDlg,
SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, SPIF_SENDCHANGE | SPIF_UPDATEINIFILE); 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) #if (WINVER >= 0x0500)
SystemParametersInfo(SPI_SETMOUSECLICKLOCK, pButtonData->g_ClickLockEnabled, NULL, SPIF_SENDCHANGE); 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); SystemParametersInfo(SPI_SETMOUSEBUTTONSWAP, pButtonData->g_OrigSwapMouseButtons, NULL, 0);
/* Reset double click speed setting */ /* Reset double click speed setting */
// SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, 0); SystemParametersInfo(SPI_SETDOUBLECLICKTIME, pButtonData->g_OrigDoubleClickSpeed, NULL, 0);
SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed); //SetDoubleClickTime(pButtonData->g_OrigDoubleClickSpeed);
} }
return TRUE; return TRUE;
@ -411,14 +414,14 @@ ButtonProc(IN HWND hwndDlg,
case TB_ENDTRACK: case TB_ENDTRACK:
lResult = SendDlgItemMessage(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED, TBM_GETPOS, 0, 0); lResult = SendDlgItemMessage(hwndDlg, IDC_SLIDER_DOUBLE_CLICK_SPEED, TBM_GETPOS, 0, 0);
pButtonData->g_DoubleClickSpeed = (14 - (INT)lResult) * 50 + 200; 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); SetDoubleClickTime(pButtonData->g_DoubleClickSpeed);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg); PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break; break;
case TB_THUMBTRACK: case TB_THUMBTRACK:
pButtonData->g_DoubleClickSpeed = (14 - (INT)HIWORD(wParam)) * 50 + 200; 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); SetDoubleClickTime(pButtonData->g_DoubleClickSpeed);
PropSheet_Changed(GetParent(hwndDlg), hwndDlg); PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
break; break;
@ -1412,23 +1415,19 @@ OptionProc(IN HWND hwndDlg,
pOptionData->OrigMouseAccel.nThreshold2 = pOptionData->MouseAccel.nThreshold2; pOptionData->OrigMouseAccel.nThreshold2 = pOptionData->MouseAccel.nThreshold2;
/* snap to default button */ /* snap to default button */
if (SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->bSnapToDefaultButton, 0)) SystemParametersInfo(SPI_GETSNAPTODEFBUTTON, 0, &pOptionData->bSnapToDefaultButton, 0);
pOptionData->bSnapToDefaultButton = FALSE;
pOptionData->bOrigSnapToDefaultButton = pOptionData->bSnapToDefaultButton; pOptionData->bOrigSnapToDefaultButton = pOptionData->bSnapToDefaultButton;
/* mouse trails */ /* mouse trails */
if (!SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->uMouseTrails, 0)) SystemParametersInfo(SPI_GETMOUSETRAILS, 0, &pOptionData->uMouseTrails, 0);
pOptionData->uMouseTrails = 0;
pOptionData->uOrigMouseTrails = pOptionData->uMouseTrails; pOptionData->uOrigMouseTrails = pOptionData->uMouseTrails;
/* hide pointer while typing */ /* hide pointer while typing */
if (!SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->bMouseVanish, 0)) SystemParametersInfo(SPI_GETMOUSEVANISH, 0, &pOptionData->bMouseVanish, 0);
pOptionData->bMouseVanish = FALSE;
pOptionData->bOrigMouseVanish = pOptionData->bMouseVanish; pOptionData->bOrigMouseVanish = pOptionData->bMouseVanish;
/* show pointer with Ctrl-Key */ /* show pointer with Ctrl-Key */
if (!SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->bMouseSonar, 0)) SystemParametersInfo(SPI_GETMOUSESONAR, 0, &pOptionData->bMouseSonar, 0);
pOptionData->bMouseSonar = FALSE;
pOptionData->bOrigMouseSonar = pOptionData->bMouseSonar; pOptionData->bOrigMouseSonar = pOptionData->bMouseSonar;
/* Set mouse speed */ /* Set mouse speed */
@ -1744,10 +1743,7 @@ WheelProc(IN HWND hwndDlg,
SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pWheelData); SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pWheelData);
/* Get wheel scroll lines */ /* Get wheel scroll lines */
if (!SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &pWheelData->uWheelScrollLines, 0)) SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &pWheelData->uWheelScrollLines, 0);
{
pWheelData->uWheelScrollLines = DEFAULT_WHEEL_SCROLL_LINES;
}
ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, TRUE); ShowDialogWheelControls(hwndDlg, pWheelData->uWheelScrollLines, TRUE);
SendDlgItemMessage(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES, UDM_SETRANGE, 0, MAKELONG((short)100, (short)0)); SendDlgItemMessage(hwndDlg, IDC_UPDOWN_WHEEL_SCROLL_LINES, UDM_SETRANGE, 0, MAKELONG((short)100, (short)0));

View file

@ -31,6 +31,7 @@ enum
UPM_TOOLTIPANIMATION = 0x800, UPM_TOOLTIPANIMATION = 0x800,
UPM_TOOLTIPFADE = 0x1000, UPM_TOOLTIPFADE = 0x1000,
UPM_CURSORSHADOW = 0x2000, UPM_CURSORSHADOW = 0x2000,
UPM_CLICKLOCK = 0x8000,
// room for more // room for more
UPM_UIEFFECTS = 0x80000000, UPM_UIEFFECTS = 0x80000000,
UPM_DEFAULT = 0x80003E9E UPM_DEFAULT = 0x80003E9E

View file

@ -66,6 +66,7 @@ static const WCHAR* VAL_DRAGHEIGHT = L"DragHeight";
static const WCHAR* VAL_DRAGWIDTH = L"DragWidth"; static const WCHAR* VAL_DRAGWIDTH = L"DragWidth";
static const WCHAR* VAL_FNTSMOOTH = L"FontSmoothing"; static const WCHAR* VAL_FNTSMOOTH = L"FontSmoothing";
static const WCHAR* VAL_SCRLLLINES = L"WheelScrollLines"; static const WCHAR* VAL_SCRLLLINES = L"WheelScrollLines";
static const WCHAR* VAL_CLICKLOCKTIME = L"ClickLockTime";
#if (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT >= 0x0600)
static const WCHAR* VAL_SCRLLCHARS = L"WheelScrollChars"; static const WCHAR* VAL_SCRLLCHARS = L"WheelScrollChars";
#endif #endif
@ -95,6 +96,18 @@ static const WCHAR* VAL_ON = L"On";
/** Loading the settings ******************************************************/ /** 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 static
INT INT
SpiLoadInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue) SpiLoadInt(PCWSTR pwszKey, PCWSTR pwszValue, INT iValue)
@ -235,6 +248,7 @@ SpiUpdatePerUserSystemParameters()
/* Load desktop settings */ /* Load desktop settings */
gspv.bDragFullWindows = SpiLoadInt(KEY_DESKTOP, VAL_DRAG, 0); gspv.bDragFullWindows = SpiLoadInt(KEY_DESKTOP, VAL_DRAG, 0);
gspv.iWheelScrollLines = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLLINES, 3); gspv.iWheelScrollLines = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLLINES, 3);
gspv.dwMouseClickLockTime = SpiLoadDWord(KEY_DESKTOP, VAL_CLICKLOCKTIME, 1200);
#if (_WIN32_WINNT >= 0x0600) #if (_WIN32_WINNT >= 0x0600)
gspv.iWheelScrollChars = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLCHARS, 3); gspv.iWheelScrollChars = SpiLoadInt(KEY_DESKTOP, VAL_SCRLLCHARS, 3);
#endif #endif
@ -297,6 +311,17 @@ NtUserUpdatePerUserSystemParameters(
/** Storing the settings ******************************************************/ /** Storing the settings ******************************************************/
static
VOID
SpiStoreDWord(PCWSTR pwszKey, PCWSTR pwszValue, DWORD Value)
{
RegWriteUserSetting(pwszKey,
pwszValue,
REG_DWORD,
&Value,
sizeof(Value));
}
static static
VOID VOID
SpiStoreSz(PCWSTR pwszKey, PCWSTR pwszValue, PCWSTR pwsz) 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; 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 static inline
UINT_PTR UINT_PTR
SpiSetInt(PVOID pvData, INT iValue, PCWSTR pwszKey, PCWSTR pwszValue, FLONG fl) 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); return SpiSetBool(&gspv.bMouseSonar, uiParam, KEY_MOUSE, L"", fl);
case SPI_GETMOUSECLICKLOCK: case SPI_GETMOUSECLICKLOCK:
return SpiGetInt(pvParam, &gspv.bMouseClickLock, fl); return SpiGetUserPref(UPM_CLICKLOCK, pvParam, fl);
case SPI_SETMOUSECLICKLOCK: case SPI_SETMOUSECLICKLOCK:
return SpiSetBool(&gspv.bMouseClickLock, uiParam, KEY_MOUSE, L"", fl); return SpiSetUserPref(UPM_CLICKLOCK, pvParam, fl);
case SPI_GETMOUSEVANISH: case SPI_GETMOUSEVANISH:
return SpiGetInt(pvParam, &gspv.bMouseVanish, fl); 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); return SpiGetInt(pvParam, &gspv.dwMouseClickLockTime, fl);
case SPI_SETMOUSECLICKLOCKTIME: 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: case SPI_GETFONTSMOOTHINGTYPE:
return SpiGetInt(pvParam, &gspv.uiFontSmoothingType, fl); return SpiGetInt(pvParam, &gspv.uiFontSmoothingType, fl);