- removed keyboard auto-repeat when DInput acquires it
- removed some (now) obsolete fixme's
This commit is contained in:
parent
8b7c1906a7
commit
c9713e58c0
@ -30,6 +30,11 @@ VOID WINAPI KEYBOARD_Disable(VOID);
|
|||||||
|
|
||||||
/* Wine internals */
|
/* Wine internals */
|
||||||
|
|
||||||
|
#define WINE_KEYBOARD_CONFIG_AUTO_REPEAT 0x00000001
|
||||||
|
typedef struct tagKEYBOARD_CONFIG {
|
||||||
|
BOOL auto_repeat;
|
||||||
|
} KEYBOARD_CONFIG;
|
||||||
|
|
||||||
typedef struct tagKEYBOARD_DRIVER {
|
typedef struct tagKEYBOARD_DRIVER {
|
||||||
void (*pInit)(void);
|
void (*pInit)(void);
|
||||||
WORD (*pVkKeyScan)(CHAR);
|
WORD (*pVkKeyScan)(CHAR);
|
||||||
@ -41,6 +46,8 @@ typedef struct tagKEYBOARD_DRIVER {
|
|||||||
void (*pBeep)(void);
|
void (*pBeep)(void);
|
||||||
BOOL (*pGetDIState)(DWORD, LPVOID);
|
BOOL (*pGetDIState)(DWORD, LPVOID);
|
||||||
BOOL (*pGetDIData)(BYTE *, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD);
|
BOOL (*pGetDIData)(BYTE *, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD);
|
||||||
|
void (*pGetKeyboardConfig)(KEYBOARD_CONFIG *);
|
||||||
|
void (*pSetKeyboardConfig)(KEYBOARD_CONFIG *, DWORD);
|
||||||
} KEYBOARD_DRIVER;
|
} KEYBOARD_DRIVER;
|
||||||
|
|
||||||
extern KEYBOARD_DRIVER *KEYBOARD_Driver;
|
extern KEYBOARD_DRIVER *KEYBOARD_Driver;
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#include "wine/winuser16.h"
|
#include "wine/winuser16.h"
|
||||||
#include "wine/wingdi16.h"
|
#include "wine/wingdi16.h"
|
||||||
|
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
struct tagBITMAPOBJ;
|
struct tagBITMAPOBJ;
|
||||||
struct tagCLASS;
|
struct tagCLASS;
|
||||||
struct tagDC;
|
struct tagDC;
|
||||||
@ -164,6 +166,8 @@ extern void TTYDRV_KEYBOARD_SetBeepActive(BOOL bActivate);
|
|||||||
extern void TTYDRV_KEYBOARD_Beep(void);
|
extern void TTYDRV_KEYBOARD_Beep(void);
|
||||||
extern BOOL TTYDRV_KEYBOARD_GetDIState(DWORD len, LPVOID ptr);
|
extern BOOL TTYDRV_KEYBOARD_GetDIState(DWORD len, LPVOID ptr);
|
||||||
extern BOOL TTYDRV_KEYBOARD_GetDIData(BYTE *keystate, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, LPDWORD entries, DWORD flags);
|
extern BOOL TTYDRV_KEYBOARD_GetDIData(BYTE *keystate, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, LPDWORD entries, DWORD flags);
|
||||||
|
extern void TTYDRV_KEYBOARD_GetKeyboardConfig(KEYBOARD_CONFIG *cfg);
|
||||||
|
extern void TTYDRV_KEYBOARD_SetKeyboardConfig(KEYBOARD_CONFIG *cfg, DWORD mask);
|
||||||
|
|
||||||
/* TTY monitor driver */
|
/* TTY monitor driver */
|
||||||
|
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
|
||||||
|
#include "keyboard.h"
|
||||||
|
|
||||||
#include <X11/extensions/XShm.h>
|
#include <X11/extensions/XShm.h>
|
||||||
|
|
||||||
struct tagBITMAPOBJ;
|
struct tagBITMAPOBJ;
|
||||||
@ -396,6 +398,8 @@ extern void X11DRV_KEYBOARD_SetBeepActive(BOOL bActivate);
|
|||||||
extern void X11DRV_KEYBOARD_Beep(void);
|
extern void X11DRV_KEYBOARD_Beep(void);
|
||||||
extern BOOL X11DRV_KEYBOARD_GetDIState(DWORD len, LPVOID ptr);
|
extern BOOL X11DRV_KEYBOARD_GetDIState(DWORD len, LPVOID ptr);
|
||||||
extern BOOL X11DRV_KEYBOARD_GetDIData(BYTE *keystate, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, LPDWORD entries, DWORD flags);
|
extern BOOL X11DRV_KEYBOARD_GetDIData(BYTE *keystate, DWORD dodsize, LPDIDEVICEOBJECTDATA dod, LPDWORD entries, DWORD flags);
|
||||||
|
extern void X11DRV_KEYBOARD_GetKeyboardConfig(KEYBOARD_CONFIG *cfg);
|
||||||
|
extern void X11DRV_KEYBOARD_SetKeyboardConfig(KEYBOARD_CONFIG *cfg, DWORD mask);
|
||||||
|
|
||||||
extern void X11DRV_KEYBOARD_HandleEvent(struct tagWND *pWnd, XKeyEvent *event);
|
extern void X11DRV_KEYBOARD_HandleEvent(struct tagWND *pWnd, XKeyEvent *event);
|
||||||
|
|
||||||
|
@ -81,6 +81,7 @@ struct SysKeyboardAImpl
|
|||||||
GUID guid;
|
GUID guid;
|
||||||
/* SysKeyboardAImpl */
|
/* SysKeyboardAImpl */
|
||||||
BYTE keystate[256];
|
BYTE keystate[256];
|
||||||
|
KEYBOARD_CONFIG initial_config;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_LINUX_22_JOYSTICK_API
|
#ifdef HAVE_LINUX_22_JOYSTICK_API
|
||||||
@ -294,7 +295,7 @@ static HRESULT WINAPI IDirectInputAImpl_CreateDevice(
|
|||||||
char xbuf[50];
|
char xbuf[50];
|
||||||
|
|
||||||
WINE_StringFromCLSID(rguid,xbuf);
|
WINE_StringFromCLSID(rguid,xbuf);
|
||||||
FIXME("(this=%p,%s,%p,%p): stub\n",This,xbuf,pdev,punk);
|
TRACE("(this=%p,%s,%p,%p)\n",This,xbuf,pdev,punk);
|
||||||
if ((!memcmp(&GUID_SysKeyboard,rguid,sizeof(GUID_SysKeyboard))) || /* Generic Keyboard */
|
if ((!memcmp(&GUID_SysKeyboard,rguid,sizeof(GUID_SysKeyboard))) || /* Generic Keyboard */
|
||||||
(!memcmp(&DInput_Wine_Keyboard_GUID,rguid,sizeof(GUID_SysKeyboard)))) { /* Wine Keyboard */
|
(!memcmp(&DInput_Wine_Keyboard_GUID,rguid,sizeof(GUID_SysKeyboard)))) { /* Wine Keyboard */
|
||||||
SysKeyboardAImpl* newDevice;
|
SysKeyboardAImpl* newDevice;
|
||||||
@ -431,7 +432,7 @@ static HRESULT WINAPI IDirectInputDevice2AImpl_SetCooperativeLevel(
|
|||||||
LPDIRECTINPUTDEVICE2A iface,HWND hwnd,DWORD dwflags
|
LPDIRECTINPUTDEVICE2A iface,HWND hwnd,DWORD dwflags
|
||||||
) {
|
) {
|
||||||
ICOM_THIS(IDirectInputDevice2AImpl,iface);
|
ICOM_THIS(IDirectInputDevice2AImpl,iface);
|
||||||
FIXME("(this=%p,0x%08lx,0x%08lx): stub\n",This,(DWORD)hwnd,dwflags);
|
TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags);
|
||||||
if (TRACE_ON(dinput))
|
if (TRACE_ON(dinput))
|
||||||
_dump_cooperativelevel(dwflags);
|
_dump_cooperativelevel(dwflags);
|
||||||
return 0;
|
return 0;
|
||||||
@ -507,7 +508,7 @@ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceData(
|
|||||||
ret=KEYBOARD_Driver->pGetDIData(
|
ret=KEYBOARD_Driver->pGetDIData(
|
||||||
This->keystate, dodsize, dod, entries, flags)?DI_OK:E_FAIL;
|
This->keystate, dodsize, dod, entries, flags)?DI_OK:E_FAIL;
|
||||||
for (i=0;i<*entries;i++) {
|
for (i=0;i<*entries;i++) {
|
||||||
dod[i].dwTimeStamp = time(NULL);
|
dod[i].dwTimeStamp = GetTickCount();
|
||||||
dod[i].dwSequence = evsequence++;
|
dod[i].dwSequence = evsequence++;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@ -516,15 +517,28 @@ static HRESULT WINAPI SysKeyboardAImpl_GetDeviceData(
|
|||||||
static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE2A iface)
|
static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE2A iface)
|
||||||
{
|
{
|
||||||
ICOM_THIS(SysKeyboardAImpl,iface);
|
ICOM_THIS(SysKeyboardAImpl,iface);
|
||||||
TRACE("(this=%p): stub\n",This);
|
KEYBOARD_CONFIG no_auto;
|
||||||
return 0;
|
|
||||||
|
TRACE("(this=%p)\n",This);
|
||||||
|
/* Save the original config */
|
||||||
|
KEYBOARD_Driver->pGetKeyboardConfig(&(This->initial_config));
|
||||||
|
|
||||||
|
/* Now, remove auto-repeat */
|
||||||
|
no_auto.auto_repeat = FALSE;
|
||||||
|
KEYBOARD_Driver->pSetKeyboardConfig(&no_auto, WINE_KEYBOARD_CONFIG_AUTO_REPEAT);
|
||||||
|
|
||||||
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE2A iface)
|
static HRESULT WINAPI SysKeyboardAImpl_Unacquire(LPDIRECTINPUTDEVICE2A iface)
|
||||||
{
|
{
|
||||||
ICOM_THIS(SysKeyboardAImpl,iface);
|
ICOM_THIS(SysKeyboardAImpl,iface);
|
||||||
TRACE("(this=%p): stub\n",This);
|
TRACE("(this=%p)\n",This);
|
||||||
return 0;
|
|
||||||
|
/* Restore the original configuration */
|
||||||
|
KEYBOARD_Driver->pSetKeyboardConfig(&(This->initial_config), 0xFFFFFFFF);
|
||||||
|
|
||||||
|
return DI_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface(
|
static HRESULT WINAPI IDirectInputDevice2AImpl_QueryInterface(
|
||||||
@ -760,7 +774,7 @@ static HRESULT WINAPI SysMouseAImpl_SetCooperativeLevel(
|
|||||||
{
|
{
|
||||||
ICOM_THIS(SysMouseAImpl,iface);
|
ICOM_THIS(SysMouseAImpl,iface);
|
||||||
|
|
||||||
TRACE("(this=%p,0x%08lx,0x%08lx): stub\n",This,(DWORD)hwnd,dwflags);
|
TRACE("(this=%p,0x%08lx,0x%08lx)\n",This,(DWORD)hwnd,dwflags);
|
||||||
|
|
||||||
if (TRACE_ON(dinput))
|
if (TRACE_ON(dinput))
|
||||||
_dump_cooperativelevel(dwflags);
|
_dump_cooperativelevel(dwflags);
|
||||||
|
@ -59,7 +59,9 @@ KEYBOARD_DRIVER TTYDRV_KEYBOARD_Driver =
|
|||||||
TTYDRV_KEYBOARD_SetBeepActive,
|
TTYDRV_KEYBOARD_SetBeepActive,
|
||||||
TTYDRV_KEYBOARD_Beep,
|
TTYDRV_KEYBOARD_Beep,
|
||||||
TTYDRV_KEYBOARD_GetDIState,
|
TTYDRV_KEYBOARD_GetDIState,
|
||||||
TTYDRV_KEYBOARD_GetDIData
|
TTYDRV_KEYBOARD_GetDIData,
|
||||||
|
TTYDRV_KEYBOARD_GetKeyboardConfig,
|
||||||
|
TTYDRV_KEYBOARD_SetKeyboardConfig
|
||||||
};
|
};
|
||||||
|
|
||||||
MONITOR_DRIVER TTYDRV_MONITOR_Driver =
|
MONITOR_DRIVER TTYDRV_MONITOR_Driver =
|
||||||
|
@ -93,3 +93,18 @@ BOOL TTYDRV_KEYBOARD_GetDIData(
|
|||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* TTYDRV_KEYBOARD_GetKeyboardConfig
|
||||||
|
*/
|
||||||
|
void TTYDRV_KEYBOARD_GetKeyboardConfig(KEYBOARD_CONFIG *cfg) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* TTYDRV_KEYBOARD_SetKeyboardConfig
|
||||||
|
*/
|
||||||
|
extern void TTYDRV_KEYBOARD_SetKeyboardConfig(KEYBOARD_CONFIG *cfg, DWORD mask) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,9 @@ KEYBOARD_DRIVER X11DRV_KEYBOARD_Driver =
|
|||||||
X11DRV_KEYBOARD_SetBeepActive,
|
X11DRV_KEYBOARD_SetBeepActive,
|
||||||
X11DRV_KEYBOARD_Beep,
|
X11DRV_KEYBOARD_Beep,
|
||||||
X11DRV_KEYBOARD_GetDIState,
|
X11DRV_KEYBOARD_GetDIState,
|
||||||
X11DRV_KEYBOARD_GetDIData
|
X11DRV_KEYBOARD_GetDIData,
|
||||||
|
X11DRV_KEYBOARD_GetKeyboardConfig,
|
||||||
|
X11DRV_KEYBOARD_SetKeyboardConfig
|
||||||
};
|
};
|
||||||
|
|
||||||
MONITOR_DRIVER X11DRV_MONITOR_Driver =
|
MONITOR_DRIVER X11DRV_MONITOR_Driver =
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
DECLARE_DEBUG_CHANNEL(key)
|
DECLARE_DEBUG_CHANNEL(key)
|
||||||
DECLARE_DEBUG_CHANNEL(keyboard)
|
DECLARE_DEBUG_CHANNEL(keyboard)
|
||||||
DECLARE_DEBUG_CHANNEL(x11drv)
|
DECLARE_DEBUG_CHANNEL(x11drv)
|
||||||
|
DECLARE_DEBUG_CHANNEL(dinput)
|
||||||
|
|
||||||
extern BYTE InputKeyStateTable[256];
|
extern BYTE InputKeyStateTable[256];
|
||||||
|
|
||||||
@ -1480,11 +1481,38 @@ BOOL X11DRV_KEYBOARD_GetDIData(
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n) fprintf(stderr,"%d entries\n",n);
|
if (n) TRACE_(dinput)("%d entries\n",n);
|
||||||
*entries = n;
|
*entries = n;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* X11DRV_KEYBOARD_GetKeyboardConfig
|
||||||
|
*/
|
||||||
|
void X11DRV_KEYBOARD_GetKeyboardConfig(KEYBOARD_CONFIG *cfg) {
|
||||||
|
XKeyboardState xks;
|
||||||
|
|
||||||
|
/* For the moment, only get the auto-repeat mode */
|
||||||
|
TSXGetKeyboardControl(display, &xks);
|
||||||
|
cfg->auto_repeat = xks.global_auto_repeat;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* X11DRV_KEYBOARD_SetKeyboardConfig
|
||||||
|
*/
|
||||||
|
extern void X11DRV_KEYBOARD_SetKeyboardConfig(KEYBOARD_CONFIG *cfg, DWORD mask) {
|
||||||
|
XKeyboardControl xkc;
|
||||||
|
unsigned long X_mask = 0;
|
||||||
|
|
||||||
|
if (mask & WINE_KEYBOARD_CONFIG_AUTO_REPEAT) {
|
||||||
|
X_mask |= KBAutoRepeatMode;
|
||||||
|
xkc.auto_repeat_mode = cfg->auto_repeat;
|
||||||
|
}
|
||||||
|
if (X_mask)
|
||||||
|
TSXChangeKeyboardControl(display, X_mask, &xkc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif /* !defined(X_DISPLAY_MISSING) */
|
#endif /* !defined(X_DISPLAY_MISSING) */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user