2 * PROJECT: ReactOS Accessibility Control Panel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/cpl/access/mouse.c
5 * PURPOSE: Mouse-related accessibility settings
6 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
7 * Copyright 2007 Eric Kohl
16 static UINT nSpeedArray
[SPEEDTICKS
] = {10, 20, 30, 40, 60, 80, 120, 180, 360};
20 MouseKeysDlgProc(HWND hwndDlg
,
25 PGLOBAL_DATA pGlobalData
;
28 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
33 pGlobalData
= (PGLOBAL_DATA
)lParam
;
34 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
36 CheckDlgButton(hwndDlg
,
37 IDC_MOUSEKEYS_ACTIVATE_CHECK
,
38 pGlobalData
->mouseKeys
.dwFlags
& MKF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
40 /* Set the number of ticks for the speed trackbar */
41 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETRANGE
,
42 TRUE
, MAKELONG(0, SPEEDTICKS
- 1));
44 /* Calculate the matching tick */
45 for (i
= 0; i
< SPEEDTICKS
; i
++)
47 if (pGlobalData
->mouseKeys
.iMaxSpeed
<= nSpeedArray
[i
])
52 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETPOS
, TRUE
, i
);
54 /* Set the number of ticks for the accelleration trackbar */
55 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETRANGE
,
56 TRUE
, MAKELONG(0, ACCELTICKS
- 1));
58 /* Calculate the matching tick */
59 i
= (ACCELTICKS
+ 1) - pGlobalData
->mouseKeys
.iTimeToMaxSpeed
/ 500;
60 if (i
> ACCELTICKS
- 1)
67 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETPOS
, TRUE
, i
);
69 CheckDlgButton(hwndDlg
,
70 IDC_MOUSEKEYS_SPEED_CHECK
,
71 pGlobalData
->mouseKeys
.dwFlags
& MKF_MODIFIERS
? BST_CHECKED
: BST_UNCHECKED
);
73 CheckRadioButton(hwndDlg
,
74 IDC_MOUSEKEYS_ON_RADIO
,
75 IDC_MOUSEKEYS_OFF_RADIO
,
76 pGlobalData
->mouseKeys
.dwFlags
& MKF_REPLACENUMBERS
? IDC_MOUSEKEYS_ON_RADIO
: IDC_MOUSEKEYS_OFF_RADIO
);
78 CheckDlgButton(hwndDlg
,
79 IDC_MOUSEKEYS_STATUS_CHECK
,
80 pGlobalData
->mouseKeys
.dwFlags
& MKF_INDICATOR
? BST_CHECKED
: BST_UNCHECKED
);
84 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
86 case IDC_MOUSEKEYS_SPEED_TRACK
:
87 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_GETPOS
, 0, 0);
88 if (i
>= 0 && i
< SPEEDTICKS
)
89 pGlobalData
->mouseKeys
.iMaxSpeed
= nSpeedArray
[i
];
92 case IDC_MOUSEKEYS_ACCEL_TRACK
:
93 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_GETPOS
, 0, 0);
94 if (i
>= 0 && i
< ACCELTICKS
)
95 pGlobalData
->mouseKeys
.iTimeToMaxSpeed
= (ACCELTICKS
+ 1 - i
) * 500;
101 switch (LOWORD(wParam
))
103 case IDC_MOUSEKEYS_ACTIVATE_CHECK
:
104 pGlobalData
->mouseKeys
.dwFlags
^= MKF_HOTKEYACTIVE
;
107 case IDC_MOUSEKEYS_SPEED_CHECK
:
108 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MODIFIERS
;
111 case IDC_MOUSEKEYS_ON_RADIO
:
112 pGlobalData
->mouseKeys
.dwFlags
|= MKF_REPLACENUMBERS
;
115 case IDC_MOUSEKEYS_OFF_RADIO
:
116 pGlobalData
->mouseKeys
.dwFlags
&= ~MKF_REPLACENUMBERS
;
119 case IDC_MOUSEKEYS_STATUS_CHECK
:
120 pGlobalData
->mouseKeys
.dwFlags
^= MKF_INDICATOR
;
124 EndDialog(hwndDlg
, TRUE
);
128 EndDialog(hwndDlg
, FALSE
);
141 /* Property page dialog callback */
143 MousePageProc(HWND hwndDlg
,
148 PGLOBAL_DATA pGlobalData
;
151 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
156 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
157 if (pGlobalData
== NULL
)
160 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
162 /* Set the checkbox */
163 CheckDlgButton(hwndDlg
,
165 pGlobalData
->mouseKeys
.dwFlags
& MKF_MOUSEKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
170 switch (LOWORD(wParam
))
173 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MOUSEKEYSON
;
174 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
177 case IDC_MOUSE_BUTTON
:
178 if (DialogBoxParam(hApplet
,
179 MAKEINTRESOURCE(IDD_MOUSEKEYSOPTIONS
),
181 (DLGPROC
)MouseKeysDlgProc
,
182 (LPARAM
)pGlobalData
))
183 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
192 lppsn
= (LPPSHNOTIFY
)lParam
;
193 if (lppsn
->hdr
.code
== PSN_APPLY
)
195 SystemParametersInfo(SPI_SETMOUSEKEYS
,
197 &pGlobalData
->mouseKeys
,
198 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);