1 /* $Id: mouse.c 29112 2007-09-19 21:31:49Z ekohl $
3 * PROJECT: ReactOS Accessibility Control Panel
4 * LICENSE: GPL - See COPYING in the top level directory
5 * FILE: dll/cpl/access/mouse.c
6 * PURPOSE: Mouse-related accessibility settings
7 * COPYRIGHT: Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
8 * Copyright 2007 Eric Kohl
17 static UINT nSpeedArray
[SPEEDTICKS
] = {10, 20, 30, 40, 60, 80, 120, 180, 360};
21 MouseKeysDlgProc(HWND hwndDlg
,
26 PGLOBAL_DATA pGlobalData
;
29 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
34 pGlobalData
= (PGLOBAL_DATA
)lParam
;
35 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
37 CheckDlgButton(hwndDlg
,
38 IDC_MOUSEKEYS_ACTIVATE_CHECK
,
39 pGlobalData
->mouseKeys
.dwFlags
& MKF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
41 /* Set the number of ticks for the speed trackbar */
42 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETRANGE
,
43 TRUE
, MAKELONG(0, SPEEDTICKS
- 1));
45 /* Calculate the matching tick */
46 for (i
= 0; i
< SPEEDTICKS
; i
++)
48 if (pGlobalData
->mouseKeys
.iMaxSpeed
<= nSpeedArray
[i
])
53 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETPOS
, TRUE
, i
);
55 /* Set the number of ticks for the accelleration trackbar */
56 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETRANGE
,
57 TRUE
, MAKELONG(0, ACCELTICKS
- 1));
59 /* Calculate the matching tick */
60 i
= (ACCELTICKS
+ 1) - pGlobalData
->mouseKeys
.iTimeToMaxSpeed
/ 500;
61 if (i
> ACCELTICKS
- 1)
68 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETPOS
, TRUE
, i
);
70 CheckDlgButton(hwndDlg
,
71 IDC_MOUSEKEYS_SPEED_CHECK
,
72 pGlobalData
->mouseKeys
.dwFlags
& MKF_MODIFIERS
? BST_CHECKED
: BST_UNCHECKED
);
74 CheckRadioButton(hwndDlg
,
75 IDC_MOUSEKEYS_ON_RADIO
,
76 IDC_MOUSEKEYS_OFF_RADIO
,
77 pGlobalData
->mouseKeys
.dwFlags
& MKF_REPLACENUMBERS
? IDC_MOUSEKEYS_ON_RADIO
: IDC_MOUSEKEYS_OFF_RADIO
);
79 CheckDlgButton(hwndDlg
,
80 IDC_MOUSEKEYS_STATUS_CHECK
,
81 pGlobalData
->mouseKeys
.dwFlags
& MKF_INDICATOR
? BST_CHECKED
: BST_UNCHECKED
);
85 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
87 case IDC_MOUSEKEYS_SPEED_TRACK
:
88 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_GETPOS
, 0, 0);
89 if (i
>= 0 && i
< SPEEDTICKS
)
90 pGlobalData
->mouseKeys
.iMaxSpeed
= nSpeedArray
[i
];
93 case IDC_MOUSEKEYS_ACCEL_TRACK
:
94 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_GETPOS
, 0, 0);
95 if (i
>= 0 && i
< ACCELTICKS
)
96 pGlobalData
->mouseKeys
.iTimeToMaxSpeed
= (ACCELTICKS
+ 1 - i
) * 500;
102 switch (LOWORD(wParam
))
104 case IDC_MOUSEKEYS_ACTIVATE_CHECK
:
105 pGlobalData
->mouseKeys
.dwFlags
^= MKF_HOTKEYACTIVE
;
108 case IDC_MOUSEKEYS_SPEED_CHECK
:
109 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MODIFIERS
;
112 case IDC_MOUSEKEYS_ON_RADIO
:
113 pGlobalData
->mouseKeys
.dwFlags
|= MKF_REPLACENUMBERS
;
116 case IDC_MOUSEKEYS_OFF_RADIO
:
117 pGlobalData
->mouseKeys
.dwFlags
&= ~MKF_REPLACENUMBERS
;
120 case IDC_MOUSEKEYS_STATUS_CHECK
:
121 pGlobalData
->mouseKeys
.dwFlags
^= MKF_INDICATOR
;
125 EndDialog(hwndDlg
, TRUE
);
129 EndDialog(hwndDlg
, FALSE
);
142 /* Property page dialog callback */
144 MousePageProc(HWND hwndDlg
,
149 PGLOBAL_DATA pGlobalData
;
152 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
157 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
158 if (pGlobalData
== NULL
)
161 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
163 /* Set the checkbox */
164 CheckDlgButton(hwndDlg
,
166 pGlobalData
->mouseKeys
.dwFlags
& MKF_MOUSEKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
171 switch (LOWORD(wParam
))
174 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MOUSEKEYSON
;
175 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
178 case IDC_MOUSE_BUTTON
:
179 if (DialogBoxParam(hApplet
,
180 MAKEINTRESOURCE(IDD_MOUSEKEYSOPTIONS
),
182 (DLGPROC
)MouseKeysDlgProc
,
183 (LPARAM
)pGlobalData
))
184 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
193 lppsn
= (LPPSHNOTIFY
)lParam
;
194 if (lppsn
->hdr
.code
== PSN_APPLY
)
196 SystemParametersInfo(SPI_SETMOUSEKEYS
,
198 &pGlobalData
->mouseKeys
,
199 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);