Implemented basic handling of assessibility actions.
This commit is contained in:
parent
15a478f839
commit
735a3292ca
|
@ -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
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue