Commit 735a3292 authored by Andriy Palamarchuk's avatar Andriy Palamarchuk Committed by Alexandre Julliard

Implemented basic handling of assessibility actions.

parent 15a478f8
...@@ -62,6 +62,169 @@ DECL_WINELIB_TYPE_AW(WINSTAENUMPROC) ...@@ -62,6 +62,169 @@ DECL_WINELIB_TYPE_AW(WINSTAENUMPROC)
typedef HANDLE HDWP; 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 */ /* flags for HIGHCONTRAST dwFlags field */
#define HCF_HIGHCONTRASTON 0x00000001 #define HCF_HIGHCONTRASTON 0x00000001
...@@ -98,7 +261,6 @@ typedef struct ...@@ -98,7 +261,6 @@ typedef struct
HWND hwnd; HWND hwnd;
} EVENTMSG, *PEVENTMSG, *LPEVENTMSG; } EVENTMSG, *PEVENTMSG, *LPEVENTMSG;
/* WH_KEYBOARD_LL structure */ /* WH_KEYBOARD_LL structure */
typedef struct tagKBDLLHOOKSTRUCT typedef struct tagKBDLLHOOKSTRUCT
{ {
......
...@@ -1255,12 +1255,66 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, ...@@ -1255,12 +1255,66 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam,
WINE_SPI_FIXME(SPI_SETPENWINDOWS); /* 49 WINVER >= 0x400 */ 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_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_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 */ WINE_SPI_FIXME(SPI_SETMOUSEKEYS); /* 55 */
case SPI_GETSHOWSOUNDS: /* 56 */ case SPI_GETSHOWSOUNDS: /* 56 */
spi_idx = SPI_SETSHOWSOUNDS_IDX; spi_idx = SPI_SETSHOWSOUNDS_IDX;
...@@ -1297,15 +1351,88 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, ...@@ -1297,15 +1351,88 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam,
ret = FALSE; ret = FALSE;
break; 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_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_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_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 */ WINE_SPI_FIXME(SPI_SETSOUNDSENTRY); /* 65 */
case SPI_GETHIGHCONTRAST: /* 66 WINVER >= 0x400 */ case SPI_GETHIGHCONTRAST: /* 66 WINVER >= 0x400 */
...@@ -1314,7 +1441,7 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam, ...@@ -1314,7 +1441,7 @@ BOOL WINAPI SystemParametersInfoA( UINT uiAction, UINT uiParam,
WARN("SPI_GETHIGHCONTRAST not fully implemented\n"); WARN("SPI_GETHIGHCONTRAST not fully implemented\n");
if (lpHighContrastA->cbSize == sizeof(HIGHCONTRASTA)) if (lpHighContrastA->cbSize == sizeof(HIGHCONTRASTA))
{ {
/* Indicate that there is no high contrast available */ /* Indicate that no high contrast feature available */
lpHighContrastA->dwFlags = 0; lpHighContrastA->dwFlags = 0;
lpHighContrastA->lpszDefaultScheme = NULL; lpHighContrastA->lpszDefaultScheme = NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment