From 735a3292ca3feceb8e111a3e9324c575a86218db Mon Sep 17 00:00:00 2001 From: Andriy Palamarchuk Date: Wed, 26 Dec 2001 23:39:50 +0000 Subject: [PATCH] Implemented basic handling of assessibility actions. --- include/winuser.h | 164 +++++++++++++++++++++++++++++++++++++++++++- windows/sysparams.c | 143 +++++++++++++++++++++++++++++++++++--- 2 files changed, 298 insertions(+), 9 deletions(-) diff --git a/include/winuser.h b/include/winuser.h index 68434e01499..c8b4527e4db 100644 --- a/include/winuser.h +++ b/include/winuser.h @@ -62,6 +62,169 @@ DECL_WINELIB_TYPE_AW(WINSTAENUMPROC) typedef HANDLE HDWP; +/* flags for FILTERKEYS dwFlags field */ +#define FKF_AVAILABLE 0x00000002 +#define FKF_CLICKON 0x00000040 +#define FKF_FILTERKEYSON 0x00000001 +#define FKF_HOTKEYACTIVE 0x00000004 +#define FKF_HOTKEYSOUND 0x00000010 +#define FKF_CONFIRMHOTKEY 0x00000008 +#define FKF_INDICATOR 0x00000020 + +typedef struct tagFILTERKEYS +{ + UINT cbSize; + DWORD dwFlags; + DWORD iWaitMSec; + DWORD iDelayMSec; + DWORD iRepeatMSec; + DWORD iBounceMSec; +} FILTERKEYS, *PFILTERKEYS, *LPFILTERKEYS; + +/* flags for TOGGLEKEYS dwFlags field */ +#define TKF_AVAILABLE 0x00000002 +#define TKF_CONFIRMHOTKEY 0x00000008 +#define TKF_HOTKEYACTIVE 0x00000004 +#define TKF_HOTKEYSOUND 0x00000010 +#define TKF_TOGGLEKEYSON 0x00000001 + +typedef struct tagTOGGLEKEYS +{ + DWORD cbSize; + DWORD dwFlags; +} TOGGLEKEYS, *PTOGGLEKEYS, *LPTOGGLEKEYS; + +/* flags for MOUSEKEYS dwFlags field */ +#define MKF_AVAILABLE 0x00000002 +#define MKF_CONFIRMHOTKEY 0x00000008 +#define MKF_HOTKEYACTIVE 0x00000004 +#define MKF_HOTKEYSOUND 0x00000010 +#define MKF_INDICATOR 0x00000020 +#define MKF_MOUSEKEYSON 0x00000001 +#define MKF_MODIFIERS 0x00000040 +#define MKF_REPLACENUMBERS 0x00000080 + +typedef struct tagMOUSEKEYS +{ + UINT cbSize; + DWORD dwFlags; + DWORD iMaxSpeed; + DWORD iTimeToMaxSpeed; + DWORD iCtrlSpeed; + DWORD dwReserved1; + DWORD dwReserved2; +} MOUSEKEYS, *PMOUSEKEYS, *LPMOUSEKEYS; + +/* flags for STICKYKEYS dwFlags field */ +#define SKF_AUDIBLEFEEDBACK 0x00000040 +#define SKF_AVAILABLE 0x00000002 +#define SKF_CONFIRMHOTKEY 0x00000008 +#define SKF_HOTKEYACTIVE 0x00000004 +#define SKF_HOTKEYSOUND 0x00000010 +#define SKF_INDICATOR 0x00000020 +#define SKF_STICKYKEYSON 0x00000001 +#define SKF_TRISTATE 0x00000080 +#define SKF_TWOKEYSOFF 0x00000100 + +typedef struct tagSTICKYKEYS +{ + DWORD cbSize; + DWORD dwFlags; +} STICKYKEYS, *PSTICKYKEYS, *LPSTICKYKEYS; + +/* flags for ACCESSTIMEOUT dwFlags field */ +#define ATF_ONOFFFEEDBACK 0x00000002 +#define ATF_AVAILABLE 0x00000004 +#define ATF_TIMEOUTON 0x00000001 + +typedef struct tagACCESSTIMEOUT +{ + UINT cbSize; + DWORD dwFlags; + DWORD iTimeOutMSec; +} ACCESSTIMEOUT, *PACCESSTIMEOUT, *LPACCESSTIMEOUT; + +/* flags for SERIALKEYS dwFlags field */ +#define SERKF_ACTIVE 0x00000008 +#define SERKF_AVAILABLE 0x00000002 +#define SERKF_INDICATOR 0x00000004 +#define SERKF_SERIALKEYSON 0x00000001 + +typedef struct tagSERIALKEYSA +{ + UINT cbSize; + DWORD dwFlags; + LPSTR lpszActivePort; + LPSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} SERIALKEYSA, *LPSERIALKEYSA; + +typedef struct tagSERIALKEYSW { + UINT cbSize; + DWORD dwFlags; + LPWSTR lpszActivePort; + LPWSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} SERIALKEYSW,*LPSERIALKEYSW; + +DECL_WINELIB_TYPE_AW(SERIALKEYS) +DECL_WINELIB_TYPE_AW(LPSERIALKEYS) + +/* flags for SOUNDSENTRY dwFlags field */ +#define SSF_AVAILABLE 0x00000002 +#define SSF_SOUNDSENTRYON 0x00000001 + +#define SSTF_BORDER 0x00000002 +#define SSTF_CHARS 0x00000001 +#define SSTF_DISPLAY 0x00000003 +#define SSTF_NONE 0x00000000 + +#define SSGF_DISPLAY 0x00000003 +#define SSGF_NONE 0x00000000 + +#define SSWF_DISPLAY 0x00000003 +#define SSWF_NONE 0x00000000 +#define SSWF_TITLE 0x00000001 +#define SSWF_WINDOW 0x00000002 + +typedef struct tagSOUNDSENTRYA +{ + UINT cbSize; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} SOUNDSENTRYA, *LPSOUNDSENTRYA; + +typedef struct tagSOUNDSENTRYW +{ + UINT cbSize; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPWSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} SOUNDSENTRYW, *LPSOUNDSENTRYW; + +DECL_WINELIB_TYPE_AW(SOUNDSENTRY) +DECL_WINELIB_TYPE_AW(LPSOUNDSENTRY) /* flags for HIGHCONTRAST dwFlags field */ #define HCF_HIGHCONTRASTON 0x00000001 @@ -98,7 +261,6 @@ typedef struct HWND hwnd; } EVENTMSG, *PEVENTMSG, *LPEVENTMSG; - /* WH_KEYBOARD_LL structure */ typedef struct tagKBDLLHOOKSTRUCT { diff --git a/windows/sysparams.c b/windows/sysparams.c index f1eb8843860..80b991ebe17 100644 --- a/windows/sysparams.c +++ b/windows/sysparams.c @@ -1255,12 +1255,66 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, WINE_SPI_FIXME(SPI_SETPENWINDOWS); /* 49 WINVER >= 0x400 */ - WINE_SPI_FIXME(SPI_GETFILTERKEYS); /* 50 */ + case SPI_GETFILTERKEYS: /* 50 */ + { + LPFILTERKEYS lpFilterKeys = (LPFILTERKEYS)pvParam; + WARN("SPI_GETFILTERKEYS not fully implemented\n"); + if (lpFilterKeys->cbSize == sizeof(FILTERKEYS)) + { + /* Indicate that no FilterKeys feature available */ + lpFilterKeys->dwFlags = 0; + lpFilterKeys->iWaitMSec = 0; + lpFilterKeys->iDelayMSec = 0; + lpFilterKeys->iRepeatMSec = 0; + lpFilterKeys->iBounceMSec = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETFILTERKEYS); /* 51 */ - WINE_SPI_FIXME(SPI_GETTOGGLEKEYS); /* 52 */ + + case SPI_GETTOGGLEKEYS: /* 52 */ + { + LPTOGGLEKEYS lpToggleKeys = (LPTOGGLEKEYS)pvParam; + WARN("SPI_GETTOGGLEKEYS not fully implemented\n"); + if (lpToggleKeys->cbSize == sizeof(TOGGLEKEYS)) + { + /* Indicate that no ToggleKeys feature available */ + lpToggleKeys->dwFlags = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETTOGGLEKEYS); /* 53 */ - WINE_SPI_FIXME(SPI_GETMOUSEKEYS); /* 54 */ + + case SPI_GETMOUSEKEYS: /* 54 */ + { + LPMOUSEKEYS lpMouseKeys = (LPMOUSEKEYS)pvParam; + WARN("SPI_GETMOUSEKEYS not fully implemented\n"); + if (lpMouseKeys->cbSize == sizeof(MOUSEKEYS)) + { + /* Indicate that no MouseKeys feature available */ + lpMouseKeys->dwFlags = 0; + lpMouseKeys->iMaxSpeed = 360; + lpMouseKeys->iTimeToMaxSpeed = 1000; + lpMouseKeys->iCtrlSpeed = 0; + lpMouseKeys->dwReserved1 = 0; + lpMouseKeys->dwReserved2 = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETMOUSEKEYS); /* 55 */ + case SPI_GETSHOWSOUNDS: /* 56 */ spi_idx = SPI_SETSHOWSOUNDS_IDX; @@ -1297,15 +1351,88 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, ret = FALSE; break; } - WINE_SPI_FIXME(SPI_GETSTICKYKEYS); /* 58 */ + + case SPI_GETSTICKYKEYS: /* 58 */ + { + LPSTICKYKEYS lpStickyKeys = (LPSTICKYKEYS)pvParam; + WARN("SPI_GETSTICKYKEYS not fully implemented\n"); + if (lpStickyKeys->cbSize == sizeof(STICKYKEYS)) + { + /* Indicate that no StickyKeys feature available */ + lpStickyKeys->dwFlags = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETSTICKYKEYS); /* 59 */ - WINE_SPI_FIXME(SPI_GETACCESSTIMEOUT); /* 60 */ + + case SPI_GETACCESSTIMEOUT: /* 60 */ + { + LPACCESSTIMEOUT lpAccessTimeout = (LPACCESSTIMEOUT)pvParam; + WARN("SPI_GETACCESSTIMEOUT not fully implemented\n"); + if (lpAccessTimeout->cbSize == sizeof(ACCESSTIMEOUT)) + { + /* Indicate that no accessibility features timeout is available */ + lpAccessTimeout->dwFlags = 0; + lpAccessTimeout->iTimeOutMSec = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETACCESSTIMEOUT); /* 61 */ - WINE_SPI_FIXME(SPI_GETSERIALKEYS); /* 62 WINVER >= 0x400 */ + case SPI_GETSERIALKEYS: /* 62 WINVER >= 0x400 */ + { + LPSERIALKEYSA lpSerialKeysA = (LPSERIALKEYSA)pvParam; + WARN("SPI_GETSERIALKEYS not fully implemented\n"); + if (lpSerialKeysA->cbSize == sizeof(SERIALKEYSA)) + { + /* Indicate that no SerialKeys feature available */ + lpSerialKeysA->dwFlags = 0; + lpSerialKeysA->lpszActivePort = NULL; + lpSerialKeysA->lpszPort = NULL; + lpSerialKeysA->iBaudRate = 0; + lpSerialKeysA->iPortState = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETSERIALKEYS); /* 63 WINVER >= 0x400 */ - WINE_SPI_FIXME(SPI_GETSOUNDSENTRY); /* 64 */ + case SPI_GETSOUNDSENTRY: /* 64 */ + { + LPSOUNDSENTRYA lpSoundSentryA = (LPSOUNDSENTRYA)pvParam; + WARN("SPI_GETSOUNDSENTRY not fully implemented\n"); + if (lpSoundSentryA->cbSize == sizeof(SOUNDSENTRYA)) + { + /* Indicate that no SoundSentry feature available */ + lpSoundSentryA->dwFlags = 0; + lpSoundSentryA->iFSTextEffect = 0; + lpSoundSentryA->iFSTextEffectMSec = 0; + lpSoundSentryA->iFSTextEffectColorBits = 0; + lpSoundSentryA->iFSGrafEffect = 0; + lpSoundSentryA->iFSGrafEffectMSec = 0; + lpSoundSentryA->iFSGrafEffectColor = 0; + lpSoundSentryA->iWindowsEffect = 0; + lpSoundSentryA->iWindowsEffectMSec = 0; + lpSoundSentryA->lpszWindowsEffectDLL = 0; + lpSoundSentryA->iWindowsEffectOrdinal = 0; + } + else + { + ret = FALSE; + } + break; + } WINE_SPI_FIXME(SPI_SETSOUNDSENTRY); /* 65 */ case SPI_GETHIGHCONTRAST: /* 66 WINVER >= 0x400 */ @@ -1314,7 +1441,7 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, WARN("SPI_GETHIGHCONTRAST not fully implemented\n"); if (lpHighContrastA->cbSize == sizeof(HIGHCONTRASTA)) { - /* Indicate that there is no high contrast available */ + /* Indicate that no high contrast feature available */ lpHighContrastA->dwFlags = 0; lpHighContrastA->lpszDefaultScheme = NULL; }