ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

keyboard.c
Go to the documentation of this file.
00001 /* $Id: keyboard.c 29170 2007-09-23 22:59:00Z ekohl $
00002  *
00003  * PROJECT:         ReactOS Accessibility Control Panel
00004  * LICENSE:         GPL - See COPYING in the top level directory
00005  * FILE:            dll/cpl/access/keyboard.c
00006  * PURPOSE:         Keyboard-related accessibility settings
00007  * COPYRIGHT:       Copyright 2004 Johannes Anderwald (j_anderw@sbox.tugraz.at)
00008  *                  Copyright 2007 Eric Kohl
00009  */
00010 
00011 #include "access.h"
00012 
00013 
00014 #define BOUNCETICKS 5
00015 static UINT nBounceArray[BOUNCETICKS] = {500, 700, 1000, 1500, 2000};
00016 
00017 #define DELAYTICKS 5
00018 static UINT nDelayArray[DELAYTICKS] = {300, 700, 1000, 1500, 2000};
00019 
00020 #define REPEATTICKS 6
00021 static UINT nRepeatArray[REPEATTICKS] = {300, 500, 700, 1000, 1500, 2000};
00022 
00023 #define WAITTICKS 10
00024 static UINT nWaitArray[WAITTICKS] = {0, 300, 500, 700, 1000, 1500, 2000, 5000, 10000, 20000};
00025 
00026 
00027 static VOID
00028 EnableFilterKeysTest(PGLOBAL_DATA pGlobalData)
00029 {
00030     pGlobalData->filterKeys.dwFlags |= FKF_FILTERKEYSON;
00031     pGlobalData->filterKeys.dwFlags &= ~FKF_INDICATOR;
00032 
00033     SystemParametersInfo(SPI_SETFILTERKEYS,
00034                          sizeof(FILTERKEYS),
00035                          &pGlobalData->filterKeys,
00036                          0);
00037 }
00038 
00039 
00040 static VOID
00041 DisableFilterKeysTest(PGLOBAL_DATA pGlobalData)
00042 {
00043     if (pGlobalData->oldFilterKeys.dwFlags & FKF_FILTERKEYSON)
00044     {
00045         pGlobalData->filterKeys.dwFlags |= FKF_FILTERKEYSON;
00046     }
00047     else
00048     {
00049         pGlobalData->filterKeys.dwFlags &= ~FKF_FILTERKEYSON;
00050     }
00051 
00052     if (pGlobalData->oldFilterKeys.dwFlags & FKF_INDICATOR)
00053     {
00054         pGlobalData->filterKeys.dwFlags |= FKF_INDICATOR;
00055     }
00056     else
00057     {
00058         pGlobalData->filterKeys.dwFlags &= ~FKF_INDICATOR;
00059     }
00060 
00061     SystemParametersInfo(SPI_SETFILTERKEYS,
00062                          sizeof(FILTERKEYS),
00063                          &pGlobalData->filterKeys,
00064                          0);
00065 }
00066 
00067 
00068 /* Property page dialog callback */
00069 INT_PTR CALLBACK
00070 StickyKeysDlgProc(HWND hwndDlg,
00071                   UINT uMsg,
00072                   WPARAM wParam,
00073                   LPARAM lParam)
00074 {
00075     PGLOBAL_DATA pGlobalData;
00076 
00077     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00078 
00079     switch (uMsg)
00080     {
00081         case WM_INITDIALOG:
00082             pGlobalData = (PGLOBAL_DATA)lParam;
00083             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00084 
00085             memcpy(&pGlobalData->oldStickyKeys,
00086                    &pGlobalData->stickyKeys,
00087                    sizeof(STICKYKEYS));
00088 
00089             CheckDlgButton(hwndDlg,
00090                            IDC_STICKY_ACTIVATE_CHECK,
00091                            pGlobalData->stickyKeys.dwFlags & SKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED);
00092 
00093             CheckDlgButton(hwndDlg,
00094                            IDC_STICKY_LOCK_CHECK,
00095                            pGlobalData->stickyKeys.dwFlags & SKF_TRISTATE ? BST_CHECKED : BST_UNCHECKED);
00096 
00097             CheckDlgButton(hwndDlg,
00098                            IDC_STICKY_UNLOCK_CHECK,
00099                            pGlobalData->stickyKeys.dwFlags & SKF_TWOKEYSOFF ? BST_CHECKED : BST_UNCHECKED);
00100 
00101             CheckDlgButton(hwndDlg,
00102                            IDC_STICKY_SOUND_CHECK,
00103                            pGlobalData->stickyKeys.dwFlags & SKF_AUDIBLEFEEDBACK ? BST_CHECKED : BST_UNCHECKED);
00104 
00105             CheckDlgButton(hwndDlg,
00106                            IDC_STICKY_STATUS_CHECK,
00107                            pGlobalData->stickyKeys.dwFlags & SKF_INDICATOR ? BST_CHECKED : BST_UNCHECKED);
00108             break;
00109 
00110         case WM_COMMAND:
00111             switch (LOWORD(wParam))
00112             {
00113                 case IDC_STICKY_ACTIVATE_CHECK:
00114                     pGlobalData->stickyKeys.dwFlags ^= SKF_HOTKEYACTIVE;
00115                     break;
00116 
00117                 case IDC_STICKY_LOCK_CHECK:
00118                     pGlobalData->stickyKeys.dwFlags ^= SKF_TRISTATE;
00119                     break;
00120 
00121                 case IDC_STICKY_UNLOCK_CHECK:
00122                     pGlobalData->stickyKeys.dwFlags ^= SKF_TWOKEYSOFF;
00123                     break;
00124 
00125                 case IDC_STICKY_SOUND_CHECK:
00126                     pGlobalData->stickyKeys.dwFlags ^= SKF_AUDIBLEFEEDBACK;
00127                     break;
00128 
00129                 case IDC_STICKY_STATUS_CHECK:
00130                     pGlobalData->stickyKeys.dwFlags ^= SKF_INDICATOR;
00131                     break;
00132 
00133                 case IDOK:
00134                     EndDialog(hwndDlg,
00135                               (pGlobalData->stickyKeys.dwFlags != pGlobalData->oldStickyKeys.dwFlags));
00136                     break;
00137 
00138                 case IDCANCEL:
00139                     EndDialog(hwndDlg, FALSE);
00140                     break;
00141 
00142                 default:
00143                     break;
00144             }
00145             break;
00146     }
00147 
00148     return FALSE;
00149 }
00150 
00151 
00152 static VOID
00153 AddComboBoxTime(HWND hwnd, INT nId, INT nTimeMs)
00154 {
00155     TCHAR szBuffer[32];
00156     TCHAR szSeconds[20];
00157 
00158     if (LoadString(hApplet, IDS_SECONDS, szSeconds, 20) == 0)
00159         lstrcpy(szSeconds, L"Seconds");
00160 
00161     _stprintf(szBuffer, _T("%d.%d %s"),
00162               nTimeMs / 1000, (nTimeMs % 1000) / 100,
00163               szSeconds);
00164 
00165     SendDlgItemMessage(hwnd, nId, CB_ADDSTRING, 0, (LPARAM)szBuffer);
00166 }
00167 
00168 
00169 INT_PTR CALLBACK
00170 BounceKeysDlgProc(HWND hwndDlg,
00171                   UINT uMsg,
00172                   WPARAM wParam,
00173                   LPARAM lParam)
00174 {
00175     PGLOBAL_DATA pGlobalData;
00176     INT i, n;
00177 
00178     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00179 
00180     switch (uMsg)
00181     {
00182         case WM_INITDIALOG:
00183             pGlobalData = (PGLOBAL_DATA)lParam;
00184             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00185 
00186             /* Determine the current bounce time */
00187             if (pGlobalData->filterKeys.iBounceMSec == 0)
00188                 pGlobalData->filterKeys.iBounceMSec = nBounceArray[0];
00189 
00190             for (n = 0; n < BOUNCETICKS; n++)
00191             {
00192                  if (pGlobalData->filterKeys.iBounceMSec < nBounceArray[n])
00193                      break;
00194             }
00195             n--;
00196 
00197             for (i = 0; i < BOUNCETICKS; i++)
00198             {
00199                  AddComboBoxTime(hwndDlg, IDC_BOUNCE_TIME_COMBO, nBounceArray[i]);
00200             }
00201 
00202             SendDlgItemMessage(hwndDlg, IDC_BOUNCE_TIME_COMBO, CB_SETCURSEL, n, 0);
00203             break;
00204 
00205         case WM_COMMAND:
00206             switch (LOWORD(wParam))
00207             {
00208                 case IDC_BOUNCE_TIME_COMBO:
00209                     if (HIWORD(wParam) == CBN_SELCHANGE)
00210                     {
00211                         i = SendDlgItemMessage(hwndDlg, IDC_BOUNCE_TIME_COMBO, CB_GETCURSEL, 0, 0);
00212                         if (i != CB_ERR)
00213                         {
00214                             pGlobalData->filterKeys.iBounceMSec = nBounceArray[i];
00215                         }
00216                     }
00217                     break;
00218 
00219                 case IDC_BOUNCE_TEST_EDIT:
00220                     switch (HIWORD(wParam))
00221                     {
00222                         case EN_SETFOCUS:
00223                             EnableFilterKeysTest(pGlobalData);
00224                             break;
00225 
00226                         case EN_KILLFOCUS:
00227                             DisableFilterKeysTest(pGlobalData);
00228                             break;
00229                     }
00230                     break;
00231 
00232                 case IDOK:
00233                     EndDialog(hwndDlg, TRUE);
00234                     break;
00235 
00236                 case IDCANCEL:
00237                     EndDialog(hwndDlg, FALSE);
00238                     break;
00239 
00240                 default:
00241                     break;
00242             }
00243             break;
00244     }
00245 
00246     return FALSE;
00247 }
00248 
00249 
00250 INT_PTR CALLBACK
00251 RepeatKeysDlgProc(HWND hwndDlg,
00252                   UINT uMsg,
00253                   WPARAM wParam,
00254                   LPARAM lParam)
00255 {
00256     PGLOBAL_DATA pGlobalData;
00257     INT i, n;
00258 
00259     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00260 
00261     switch (uMsg)
00262     {
00263         case WM_INITDIALOG:
00264             pGlobalData = (PGLOBAL_DATA)lParam;
00265             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00266 
00267             CheckRadioButton(hwndDlg,
00268                              IDC_REPEAT_NOREPEAT_RADIO,
00269                              IDC_REPEAT_REPEAT_RADIO,
00270                              (pGlobalData->filterKeys.iDelayMSec == 0) ? IDC_REPEAT_NOREPEAT_RADIO : IDC_REPEAT_REPEAT_RADIO);
00271 
00272             /* Initialize the delay combobox */
00273             for (n = 0; n < DELAYTICKS; n++)
00274             {
00275                  if (pGlobalData->filterKeys.iDelayMSec < nDelayArray[n])
00276                      break;
00277             }
00278             n--;
00279 
00280             for (i = 0; i < DELAYTICKS; i++)
00281             {
00282                  AddComboBoxTime(hwndDlg, IDC_REPEAT_DELAY_COMBO, nDelayArray[i]);
00283             }
00284 
00285             SendDlgItemMessage(hwndDlg, IDC_REPEAT_DELAY_COMBO, CB_SETCURSEL, n, 0);
00286 
00287             /* Initialize the repeat combobox */
00288             for (n = 0; n < REPEATTICKS; n++)
00289             {
00290                  if (pGlobalData->filterKeys.iRepeatMSec < nRepeatArray[n])
00291                      break;
00292             }
00293             n--;
00294 
00295             for (i = 0; i < REPEATTICKS; i++)
00296             {
00297                  AddComboBoxTime(hwndDlg, IDC_REPEAT_REPEAT_COMBO, nRepeatArray[i]);
00298             }
00299 
00300             SendDlgItemMessage(hwndDlg, IDC_REPEAT_REPEAT_COMBO, CB_SETCURSEL, n, 0);
00301 
00302             /* Disable the delay and repeat comboboxes if needed */
00303             if (pGlobalData->filterKeys.iDelayMSec == 0)
00304             {
00305                 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), FALSE);
00306                 EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), FALSE);
00307             }
00308 
00309             /* Initialize the wait combobox */
00310             for (n = 0; n < WAITTICKS; n++)
00311             {
00312                  if (pGlobalData->filterKeys.iWaitMSec < nWaitArray[n])
00313                      break;
00314             }
00315             n--;
00316 
00317             for (i = 0; i < WAITTICKS; i++)
00318             {
00319                  AddComboBoxTime(hwndDlg, IDC_REPEAT_WAIT_COMBO, nWaitArray[i]);
00320             }
00321 
00322             SendDlgItemMessage(hwndDlg, IDC_REPEAT_WAIT_COMBO, CB_SETCURSEL, n, 0);
00323             break;
00324 
00325         case WM_COMMAND:
00326             switch (LOWORD(wParam))
00327             {
00328                 case IDC_REPEAT_NOREPEAT_RADIO:
00329                     pGlobalData->filterKeys.iDelayMSec = 0;
00330                     pGlobalData->filterKeys.iRepeatMSec = 0;
00331                     EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), FALSE);
00332                     EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), FALSE);
00333                     break;
00334 
00335                 case IDC_REPEAT_REPEAT_RADIO:
00336                     EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_DELAY_COMBO), TRUE);
00337                     EnableWindow(GetDlgItem(hwndDlg, IDC_REPEAT_REPEAT_COMBO), TRUE);
00338                     break;
00339 
00340                 case IDC_REPEAT_DELAY_COMBO:
00341                     if (HIWORD(wParam) == CBN_SELCHANGE)
00342                     {
00343                         i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_DELAY_COMBO, CB_GETCURSEL, 0, 0);
00344                         if (i != CB_ERR)
00345                         {
00346                             pGlobalData->filterKeys.iDelayMSec = nDelayArray[i];
00347                         }
00348                     }
00349                     break;
00350 
00351                 case IDC_REPEAT_REPEAT_COMBO:
00352                     if (HIWORD(wParam) == CBN_SELCHANGE)
00353                     {
00354                         i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_REPEAT_COMBO, CB_GETCURSEL, 0, 0);
00355                         if (i != CB_ERR)
00356                         {
00357                             pGlobalData->filterKeys.iRepeatMSec = nRepeatArray[i];
00358                         }
00359                     }
00360                     break;
00361 
00362                 case IDC_REPEAT_WAIT_COMBO:
00363                     if (HIWORD(wParam) == CBN_SELCHANGE)
00364                     {
00365                         i = SendDlgItemMessage(hwndDlg, IDC_REPEAT_WAIT_COMBO, CB_GETCURSEL, 0, 0);
00366                         if (i != CB_ERR)
00367                         {
00368                             pGlobalData->filterKeys.iWaitMSec = nWaitArray[i];
00369                         }
00370                     }
00371                     break;
00372 
00373                 case IDC_REPEAT_TEST_EDIT:
00374                     switch (HIWORD(wParam))
00375                     {
00376                         case EN_SETFOCUS:
00377                             EnableFilterKeysTest(pGlobalData);
00378                             break;
00379 
00380                         case EN_KILLFOCUS:
00381                             DisableFilterKeysTest(pGlobalData);
00382                             break;
00383                     }
00384                     break;
00385 
00386                 case IDOK:
00387                     EndDialog(hwndDlg, TRUE);
00388                     break;
00389 
00390                 case IDCANCEL:
00391                     EndDialog(hwndDlg, FALSE);
00392                     break;
00393 
00394                 default:
00395                     break;
00396             }
00397             break;
00398     }
00399 
00400     return FALSE;
00401 }
00402 
00403 
00404 /* Property page dialog callback */
00405 INT_PTR CALLBACK
00406 FilterKeysDlgProc(HWND hwndDlg,
00407                   UINT uMsg,
00408                   WPARAM wParam,
00409                   LPARAM lParam)
00410 {
00411     PGLOBAL_DATA pGlobalData;
00412 
00413     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00414 
00415     switch (uMsg)
00416     {
00417         case WM_INITDIALOG:
00418             pGlobalData = (PGLOBAL_DATA)lParam;
00419             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00420 
00421             memcpy(&pGlobalData->oldFilterKeys,
00422                    &pGlobalData->filterKeys,
00423                    sizeof(FILTERKEYS));
00424 
00425             CheckDlgButton(hwndDlg,
00426                            IDC_FILTER_ACTIVATE_CHECK,
00427                            pGlobalData->filterKeys.dwFlags & FKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED);
00428 
00429             if (pGlobalData->filterKeys.iBounceMSec != 0)
00430             {
00431                 CheckRadioButton(hwndDlg, IDC_FILTER_BOUNCE_RADIO, IDC_FILTER_REPEAT_RADIO, IDC_FILTER_BOUNCE_RADIO);
00432                 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), TRUE);
00433                 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), FALSE);
00434             }
00435             else
00436             {
00437                 CheckRadioButton(hwndDlg, IDC_FILTER_BOUNCE_RADIO, IDC_FILTER_REPEAT_RADIO, IDC_FILTER_REPEAT_RADIO);
00438                 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), FALSE);
00439                 EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), TRUE);
00440             }
00441 
00442             CheckDlgButton(hwndDlg,
00443                            IDC_FILTER_SOUND_CHECK,
00444                            pGlobalData->filterKeys.dwFlags & FKF_CLICKON ? BST_CHECKED : BST_UNCHECKED);
00445 
00446             CheckDlgButton(hwndDlg,
00447                            IDC_FILTER_STATUS_CHECK,
00448                            pGlobalData->filterKeys.dwFlags & FKF_INDICATOR ? BST_CHECKED : BST_UNCHECKED);
00449             break;
00450 
00451         case WM_COMMAND:
00452             switch (LOWORD(wParam))
00453             {
00454                 case IDC_FILTER_ACTIVATE_CHECK:
00455                     pGlobalData->filterKeys.dwFlags ^= FKF_HOTKEYACTIVE;
00456                     break;
00457 
00458                 case IDC_FILTER_BOUNCE_RADIO:
00459                     EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), TRUE);
00460                     EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), FALSE);
00461                     break;
00462 
00463                 case IDC_FILTER_REPEAT_RADIO:
00464                     EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_BOUNCE_BUTTON), FALSE);
00465                     EnableWindow(GetDlgItem(hwndDlg, IDC_FILTER_REPEAT_BUTTON), TRUE);
00466                     break;
00467 
00468                 case IDC_FILTER_BOUNCE_BUTTON:
00469                     DialogBoxParam(hApplet,
00470                                    MAKEINTRESOURCE(IDD_BOUNCEKEYSOPTIONS),
00471                                    hwndDlg,
00472                                    (DLGPROC)BounceKeysDlgProc,
00473                                    (LPARAM)pGlobalData);
00474                     break;
00475 
00476                 case IDC_FILTER_TEST_EDIT:
00477                     switch (HIWORD(wParam))
00478                     {
00479                         case EN_SETFOCUS:
00480                             EnableFilterKeysTest(pGlobalData);
00481                             break;
00482 
00483                         case EN_KILLFOCUS:
00484                             DisableFilterKeysTest(pGlobalData);
00485                             break;
00486                     }
00487                     break;
00488 
00489                 case IDC_FILTER_SOUND_CHECK:
00490                     pGlobalData->filterKeys.dwFlags ^= FKF_CLICKON;
00491                     break;
00492 
00493                 case IDC_FILTER_REPEAT_BUTTON:
00494                     DialogBoxParam(hApplet,
00495                                    MAKEINTRESOURCE(IDD_REPEATKEYSOPTIONS),
00496                                    hwndDlg,
00497                                    (DLGPROC)RepeatKeysDlgProc,
00498                                    (LPARAM)pGlobalData);
00499                     break;
00500 
00501                 case IDC_FILTER_STATUS_CHECK:
00502                     pGlobalData->filterKeys.dwFlags ^= FKF_INDICATOR;
00503                     break;
00504 
00505                 case IDOK:
00506                     EndDialog(hwndDlg,
00507                               (pGlobalData->filterKeys.dwFlags != pGlobalData->oldFilterKeys.dwFlags));
00508                     break;
00509 
00510                 case IDCANCEL:
00511                     EndDialog(hwndDlg, FALSE);
00512                     break;
00513 
00514                 default:
00515                     break;
00516             }
00517             break;
00518     }
00519 
00520     return FALSE;
00521 }
00522 
00523 
00524 /* Property page dialog callback */
00525 INT_PTR CALLBACK
00526 ToggleKeysDlgProc(HWND hwndDlg,
00527                   UINT uMsg,
00528                   WPARAM wParam,
00529                   LPARAM lParam)
00530 {
00531     PGLOBAL_DATA pGlobalData;
00532 
00533     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00534 
00535     switch (uMsg)
00536     {
00537         case WM_INITDIALOG:
00538             pGlobalData = (PGLOBAL_DATA)lParam;
00539             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00540 
00541             memcpy(&pGlobalData->oldToggleKeys,
00542                    &pGlobalData->toggleKeys,
00543                    sizeof(TOGGLEKEYS));
00544 
00545             CheckDlgButton(hwndDlg,
00546                            IDC_TOGGLE_ACTIVATE_CHECK,
00547                            pGlobalData->toggleKeys.dwFlags & TKF_HOTKEYACTIVE ? BST_CHECKED : BST_UNCHECKED);
00548             break;
00549 
00550         case WM_COMMAND:
00551             switch (LOWORD(wParam))
00552             {
00553                 case IDC_TOGGLE_ACTIVATE_CHECK:
00554                     pGlobalData->toggleKeys.dwFlags ^= TKF_HOTKEYACTIVE;
00555                     break;
00556 
00557                 case IDOK:
00558                     EndDialog(hwndDlg,
00559                               (pGlobalData->toggleKeys.dwFlags != pGlobalData->oldToggleKeys.dwFlags));
00560                     break;
00561 
00562                 case IDCANCEL:
00563                     EndDialog(hwndDlg, FALSE);
00564                     break;
00565 
00566                 default:
00567                     break;
00568             }
00569             break;
00570     }
00571 
00572     return FALSE;
00573 }
00574 
00575 
00576 /* Property page dialog callback */
00577 INT_PTR CALLBACK
00578 KeyboardPageProc(HWND hwndDlg,
00579                  UINT uMsg,
00580                  WPARAM wParam,
00581                  LPARAM lParam)
00582 {
00583     PGLOBAL_DATA pGlobalData;
00584     LPPSHNOTIFY lppsn;
00585 
00586     pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER);
00587 
00588     switch (uMsg)
00589     {
00590         case WM_INITDIALOG:
00591             pGlobalData = (PGLOBAL_DATA)((LPPROPSHEETPAGE)lParam)->lParam;
00592             if (pGlobalData == NULL)
00593                 return FALSE;
00594 
00595             SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pGlobalData);
00596 
00597             CheckDlgButton(hwndDlg,
00598                            IDC_STICKY_BOX,
00599                            pGlobalData->stickyKeys.dwFlags & SKF_STICKYKEYSON ? BST_CHECKED : BST_UNCHECKED);
00600 
00601             CheckDlgButton(hwndDlg,
00602                            IDC_FILTER_BOX,
00603                            pGlobalData->filterKeys.dwFlags & FKF_FILTERKEYSON ? BST_CHECKED : BST_UNCHECKED);
00604 
00605             CheckDlgButton(hwndDlg,
00606                            IDC_TOGGLE_BOX,
00607                            pGlobalData->toggleKeys.dwFlags & TKF_TOGGLEKEYSON ? BST_CHECKED : BST_UNCHECKED);
00608 
00609             CheckDlgButton(hwndDlg,
00610                            IDC_KEYBOARD_EXTRA,
00611                            pGlobalData->bKeyboardPref ? BST_CHECKED : BST_UNCHECKED);
00612             return TRUE;
00613 
00614         case WM_COMMAND:
00615             switch (LOWORD(wParam))
00616             {
00617                 case IDC_STICKY_BOX:
00618                     pGlobalData->stickyKeys.dwFlags ^= SKF_STICKYKEYSON;
00619                     PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00620                     break;
00621 
00622                 case IDC_STICKY_BUTTON:
00623                     if (DialogBoxParam(hApplet,
00624                                        MAKEINTRESOURCE(IDD_STICKYKEYSOPTIONS),
00625                                        hwndDlg,
00626                                        (DLGPROC)StickyKeysDlgProc,
00627                                        (LPARAM)pGlobalData))
00628                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00629                     break;
00630 
00631                 case IDC_FILTER_BOX:
00632                     pGlobalData->filterKeys.dwFlags ^= FKF_FILTERKEYSON;
00633                     PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00634                     break;
00635 
00636                 case IDC_FILTER_BUTTON:
00637                     if (DialogBoxParam(hApplet,
00638                                        MAKEINTRESOURCE(IDD_FILTERKEYSOPTIONS),
00639                                        hwndDlg,
00640                                        (DLGPROC)FilterKeysDlgProc,
00641                                        (LPARAM)pGlobalData))
00642                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00643                     break;
00644 
00645                 case IDC_TOGGLE_BOX:
00646                     pGlobalData->toggleKeys.dwFlags ^= TKF_TOGGLEKEYSON;
00647                     PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00648                     break;
00649 
00650                 case IDC_TOGGLE_BUTTON:
00651                     if (DialogBoxParam(hApplet,
00652                                        MAKEINTRESOURCE(IDD_TOGGLEKEYSOPTIONS),
00653                                        hwndDlg,
00654                                        (DLGPROC)ToggleKeysDlgProc,
00655                                        (LPARAM)pGlobalData))
00656                         PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00657                     break;
00658 
00659                 case IDC_KEYBOARD_EXTRA:
00660                     pGlobalData->bKeyboardPref = !pGlobalData->bKeyboardPref;
00661                     PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
00662                     break;
00663 
00664                 default:
00665                     break;
00666             }
00667             break;
00668 
00669         case WM_NOTIFY:
00670             lppsn = (LPPSHNOTIFY)lParam;
00671             if (lppsn->hdr.code == PSN_APPLY)
00672             {
00673                 SystemParametersInfo(SPI_SETSTICKYKEYS,
00674                                      sizeof(STICKYKEYS),
00675                                      &pGlobalData->stickyKeys,
00676                                      SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/);
00677 
00678                 SystemParametersInfo(SPI_SETFILTERKEYS,
00679                                      sizeof(FILTERKEYS),
00680                                      &pGlobalData->filterKeys,
00681                                      SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/);
00682 
00683                 SystemParametersInfo(SPI_SETTOGGLEKEYS,
00684                                      sizeof(TOGGLEKEYS),
00685                                      &pGlobalData->toggleKeys,
00686                                      SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/);
00687 
00688                 SystemParametersInfo(SPI_SETKEYBOARDPREF,
00689                                      pGlobalData->bKeyboardPref,
00690                                      NULL,
00691                                      SPIF_UPDATEINIFILE | SPIF_SENDCHANGE /*0*/);
00692 
00693                 return TRUE;
00694             }
00695             break;
00696     }
00697 
00698     return FALSE;
00699 }

Generated on Sun May 27 2012 04:18:59 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.