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
23 static UINT nSpeedArray
[SPEEDTICKS
] = {10, 20, 30, 40, 60, 80, 120, 180, 360};
27 MouseKeysDlgProc(HWND hwndDlg
,
32 PGLOBAL_DATA pGlobalData
;
35 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
40 pGlobalData
= (PGLOBAL_DATA
)lParam
;
41 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
43 CheckDlgButton(hwndDlg
,
44 IDC_MOUSEKEYS_ACTIVATE_CHECK
,
45 pGlobalData
->mouseKeys
.dwFlags
& MKF_HOTKEYACTIVE
? BST_CHECKED
: BST_UNCHECKED
);
47 /* Set the number of ticks for the speed trackbar */
48 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETRANGE
,
49 TRUE
, MAKELONG(0, SPEEDTICKS
- 1));
51 /* Calculate the matching tick */
52 for (i
= 0; i
< SPEEDTICKS
; i
++)
54 if (pGlobalData
->mouseKeys
.iMaxSpeed
<= nSpeedArray
[i
])
59 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_SETPOS
, TRUE
, i
);
61 /* Set the number of ticks for the accelleration trackbar */
62 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETRANGE
,
63 TRUE
, MAKELONG(0, ACCELTICKS
- 1));
65 /* Calculate the matching tick */
66 i
= (ACCELTICKS
+ 1) - pGlobalData
->mouseKeys
.iTimeToMaxSpeed
/ 500;
67 if (i
> ACCELTICKS
- 1)
74 SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_SETPOS
, TRUE
, i
);
76 CheckDlgButton(hwndDlg
,
77 IDC_MOUSEKEYS_SPEED_CHECK
,
78 pGlobalData
->mouseKeys
.dwFlags
& MKF_MODIFIERS
? BST_CHECKED
: BST_UNCHECKED
);
80 CheckRadioButton(hwndDlg
,
81 IDC_MOUSEKEYS_ON_RADIO
,
82 IDC_MOUSEKEYS_OFF_RADIO
,
83 pGlobalData
->mouseKeys
.dwFlags
& MKF_REPLACENUMBERS
? IDC_MOUSEKEYS_ON_RADIO
: IDC_MOUSEKEYS_OFF_RADIO
);
85 CheckDlgButton(hwndDlg
,
86 IDC_MOUSEKEYS_STATUS_CHECK
,
87 pGlobalData
->mouseKeys
.dwFlags
& MKF_INDICATOR
? BST_CHECKED
: BST_UNCHECKED
);
91 switch (GetWindowLongPtr((HWND
) lParam
, GWL_ID
))
93 case IDC_MOUSEKEYS_SPEED_TRACK
:
94 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_SPEED_TRACK
, TBM_GETPOS
, 0, 0);
95 if (i
>= 0 && i
< SPEEDTICKS
)
96 pGlobalData
->mouseKeys
.iMaxSpeed
= nSpeedArray
[i
];
99 case IDC_MOUSEKEYS_ACCEL_TRACK
:
100 i
= SendDlgItemMessage(hwndDlg
, IDC_MOUSEKEYS_ACCEL_TRACK
, TBM_GETPOS
, 0, 0);
101 if (i
>= 0 && i
< ACCELTICKS
)
102 pGlobalData
->mouseKeys
.iTimeToMaxSpeed
= (ACCELTICKS
+ 1 - i
) * 500;
108 switch (LOWORD(wParam
))
110 case IDC_MOUSEKEYS_ACTIVATE_CHECK
:
111 pGlobalData
->mouseKeys
.dwFlags
^= MKF_HOTKEYACTIVE
;
114 case IDC_MOUSEKEYS_SPEED_CHECK
:
115 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MODIFIERS
;
118 case IDC_MOUSEKEYS_ON_RADIO
:
119 pGlobalData
->mouseKeys
.dwFlags
|= MKF_REPLACENUMBERS
;
122 case IDC_MOUSEKEYS_OFF_RADIO
:
123 pGlobalData
->mouseKeys
.dwFlags
&= ~MKF_REPLACENUMBERS
;
126 case IDC_MOUSEKEYS_STATUS_CHECK
:
127 pGlobalData
->mouseKeys
.dwFlags
^= MKF_INDICATOR
;
131 EndDialog(hwndDlg
, TRUE
);
135 EndDialog(hwndDlg
, FALSE
);
148 /* Property page dialog callback */
150 MousePageProc(HWND hwndDlg
,
155 PGLOBAL_DATA pGlobalData
;
158 pGlobalData
= (PGLOBAL_DATA
)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
163 pGlobalData
= (PGLOBAL_DATA
)((LPPROPSHEETPAGE
)lParam
)->lParam
;
164 if (pGlobalData
== NULL
)
167 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pGlobalData
);
169 /* Set the checkbox */
170 CheckDlgButton(hwndDlg
,
172 pGlobalData
->mouseKeys
.dwFlags
& MKF_MOUSEKEYSON
? BST_CHECKED
: BST_UNCHECKED
);
177 switch (LOWORD(wParam
))
180 pGlobalData
->mouseKeys
.dwFlags
^= MKF_MOUSEKEYSON
;
181 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
184 case IDC_MOUSE_BUTTON
:
185 if (DialogBoxParam(hApplet
,
186 MAKEINTRESOURCE(IDD_MOUSEKEYSOPTIONS
),
188 (DLGPROC
)MouseKeysDlgProc
,
189 (LPARAM
)pGlobalData
))
190 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
199 lppsn
= (LPPSHNOTIFY
)lParam
;
200 if (lppsn
->hdr
.code
== PSN_APPLY
)
202 SystemParametersInfo(SPI_SETMOUSEKEYS
,
204 &pGlobalData
->mouseKeys
,
205 SPIF_UPDATEINIFILE
| SPIF_SENDCHANGE
/*0*/);