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 (johannes.anderwald@reactos.org)
7 * Copyright 2007 Eric Kohl
15 static UINT nSpeedArray
[SPEEDTICKS
] = {10, 20, 30, 40, 60, 80, 120, 180, 360};
19 MouseKeysDlgProc(HWND hwndDlg
,
24 PGLOBAL_DATA pGlobalData
;
27 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
32 pGlobalData
= (PGLOBAL_DATA
)lParam
;
33 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
35 CheckDlgButton(hwndDlg
,
36 IDC_MOUSEKEYS_ACTIVATE_CHECK
,
37 pGlobalData
->mouseKeys
.dwFlags
& MKF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
39 /* Set the number of ticks for the speed trackbar */
40 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETRANGE
,
41 TRUE
, MAKELONG(0, SPEEDTICKS
- 1));
43 /* Calculate the matching tick */
44 for (i
= 0; i
< SPEEDTICKS
; i
++)
46 if (pGlobalData
->mouseKeys
.iMaxSpeed
<= nSpeedArray
[i
])
51 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETPOS
, TRUE
, i
);
53 /* Set the number of ticks for the acceleration trackbar */
54 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETRANGE
,
55 TRUE
, MAKELONG(0, ACCELTICKS
- 1));
57 /* Calculate the matching tick */
58 i
= (ACCELTICKS
+ 1) - pGlobalData
->mouseKeys
.iTimeToMaxSpeed
/ 500;
59 if (i
> ACCELTICKS
- 1)
66 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETPOS
, TRUE
, i
);
68 CheckDlgButton(hwndDlg
,
69 IDC_MOUSEKEYS_SPEED_CHECK
,
70 pGlobalData
->mouseKeys
.dwFlags
& MKF_MODIFIERS
? BST_CHECKED
: BST_UNCHECKED
);
72 CheckRadioButton(hwndDlg
,
73 IDC_MOUSEKEYS_ON_RADIO
,
74 IDC_MOUSEKEYS_OFF_RADIO
,
75 pGlobalData
->mouseKeys
.dwFlags
& MKF_REPLACENUMBERS
? IDC_MOUSEKEYS_ON_RADIO
: IDC_MOUSEKEYS_OFF_RADIO
);
77 CheckDlgButton(hwndDlg
,
78 IDC_MOUSEKEYS_STATUS_CHECK
,
79 pGlobalData
->mouseKeys
.dwFlags
& MKF_INDICATOR
? BST_CHECKED
: BST_UNCHECKED
);
83 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
85 case IDC_MOUSEKEYS_SPEED_TRACK
:
86 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_GETPOS
, 0, 0);
87 if (i
>= 0 && i
< SPEEDTICKS
)
88 pGlobalData
->mouseKeys
.iMaxSpeed
= nSpeedArray
[i
];
91 case IDC_MOUSEKEYS_ACCEL_TRACK
:
92 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_GETPOS
, 0, 0);
93 if (i
>= 0 && i
< ACCELTICKS
)
94 pGlobalData
->mouseKeys
.iTimeToMaxSpeed
= (ACCELTICKS
+ 1 - i
) * 500;
100 switch (LOWORD(wParam
))
102 case IDC_MOUSEKEYS_ACTIVATE_CHECK
:
103 pGlobalData
->mouseKeys
.dwFlags
^= MKF_HOTKEYACTIVE
;
106 case IDC_MOUSEKEYS_SPEED_CHECK
:
107 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MODIFIERS
;
110 case IDC_MOUSEKEYS_ON_RADIO
:
111 pGlobalData
->mouseKeys
.dwFlags
|= MKF_REPLACENUMBERS
;
114 case IDC_MOUSEKEYS_OFF_RADIO
:
115 pGlobalData
->mouseKeys
.dwFlags
&= ~MKF_REPLACENUMBERS
;
118 case IDC_MOUSEKEYS_STATUS_CHECK
:
119 pGlobalData
->mouseKeys
.dwFlags
^= MKF_INDICATOR
;
123 EndDialog(hwndDlg
, TRUE
);
127 EndDialog(hwndDlg
, FALSE
);
140 /* Property page dialog callback */
142 MousePageProc(HWND hwndDlg
,
147 PGLOBAL_DATA pGlobalData
;
150 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
155 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
156 if (pGlobalData
== NULL
)
159 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
161 /* Set the checkbox */
162 CheckDlgButton(hwndDlg
,
164 pGlobalData
->mouseKeys
.dwFlags
& MKF_MOUSEKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
169 switch (LOWORD(wParam
))
172 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MOUSEKEYSON
;
173 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
176 case IDC_MOUSE_BUTTON
:
177 if (DialogBoxParam(hApplet
,
178 MAKEINTRESOURCE(IDD_MOUSEKEYSOPTIONS
),
180 (DLGPROC
)MouseKeysDlgProc
,
181 (LPARAM
)pGlobalData
))
182 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
191 lppsn
= (LPPSHNOTIFY
)lParam
;
192 if (lppsn
->hdr
.code
== PSN_APPLY
)
194 SystemParametersInfo(SPI_SETMOUSEKEYS
,
196 &pGlobalData
->mouseKeys
,
197 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);