Vitaliy Margolen : dinput: Move keyboard event queue into base device class .

Alexandre Julliard julliard at wine.codeweavers.com
Tue Dec 5 04:51:07 CST 2006


Module: wine
Branch: master
Commit: 564ad7da8c56f1b8839ed51b9aa56ed5d98c37c3
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=564ad7da8c56f1b8839ed51b9aa56ed5d98c37c3

Author: Vitaliy Margolen <wine-patches at kievinfo.com>
Date:   Mon Dec  4 10:54:30 2006 -0700

dinput: Move keyboard event queue into base device class.

This removes [Get|Set]Property and GetDeviceData.

---

 dlls/dinput/keyboard.c |  160 +++---------------------------------------------
 1 files changed, 9 insertions(+), 151 deletions(-)

diff --git a/dlls/dinput/keyboard.c b/dlls/dinput/keyboard.c
index f8ac0c9..f75d76a 100644
--- a/dlls/dinput/keyboard.c
+++ b/dlls/dinput/keyboard.c
@@ -49,14 +49,6 @@ struct SysKeyboardImpl
     struct IDirectInputDevice2AImpl base;
 
     IDirectInputImpl*           dinput;
-
-    /* SysKeyboardAImpl */
-    LPDIDEVICEOBJECTDATA        data_queue;  /* buffer for 'GetDeviceData'. Alloc at
-                                                'Acquire', Free at 'Unacquire'              */
-    int                         queue_len;   /* size of the queue - set in 'SetProperty'    */
-    int                         queue_head;  /* position to write new event into queue      */
-    int                         queue_tail;  /* next event to read from queue               */
-    BOOL                        overflow;    /* return DI_BUFFEROVERFLOW in 'GetDeviceData' */
 };
 
 static SysKeyboardImpl* current_lock = NULL; 
@@ -94,7 +86,7 @@ LRESULT CALLBACK KeyboardCallback( int c
     TRACE(" setting %02X to %02X\n", dik_code, DInputKeyState[dik_code]);
       
     EnterCriticalSection(&This->base.crit);
-    GEN_EVENT(dik_code, new_diks, hook->time, This->dinput->evsequence++);
+    queue_event((LPDIRECTINPUTDEVICE8A)This, dik_code, new_diks, hook->time, This->dinput->evsequence++);
     LeaveCriticalSection(&This->base.crit);
 
     if (This->base.hEvent) SetEvent(This->base.hEvent);
@@ -262,77 +254,13 @@ static ULONG WINAPI SysKeyboardAImpl_Rel
 
     set_dinput_hook(WH_KEYBOARD_LL, NULL);
 
-    /* Free the data queue */
-    HeapFree(GetProcessHeap(), 0, This->data_queue);
-
     DeleteCriticalSection(&This->base.crit);
+    HeapFree(GetProcessHeap(), 0, This->base.data_queue);
+    HeapFree(GetProcessHeap(), 0, This);
 
-    HeapFree(GetProcessHeap(),0,This);
     return DI_OK;
 }
 
-static HRESULT WINAPI SysKeyboardAImpl_SetProperty(
-	LPDIRECTINPUTDEVICE8A iface,REFGUID rguid,LPCDIPROPHEADER ph
-)
-{
-	SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
-
-	TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
-        TRACE("(size=%d,headersize=%d,obj=%d,how=%d\n",
-              ph->dwSize, ph->dwHeaderSize, ph->dwObj, ph->dwHow);
-	if (!HIWORD(rguid)) {
-		switch (LOWORD(rguid)) {
-		case (DWORD) DIPROP_BUFFERSIZE: {
-			LPCDIPROPDWORD	pd = (LPCDIPROPDWORD)ph;
-
-			TRACE("(buffersize=%d)\n", pd->dwData);
-
-                        if (This->base.acquired)
-                           return DIERR_INVALIDPARAM;
-
-                        This->queue_len = pd->dwData;
-
-			break;
-		}
-		default:
-			WARN("Unknown type %p\n",rguid);
-			break;
-		}
-	}
-	return DI_OK;
-}
-
-static HRESULT WINAPI SysKeyboardAImpl_GetProperty(
-	LPDIRECTINPUTDEVICE8A iface,REFGUID rguid,LPDIPROPHEADER ph
-)
-{
-	SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
-
-	TRACE("(this=%p,%s,%p)\n",This,debugstr_guid(rguid),ph);
-        TRACE("(size=%d,headersize=%d,obj=%d,how=%d\n",
-              ph->dwSize, ph->dwHeaderSize, ph->dwObj, ph->dwHow);
-	if (!HIWORD(rguid)) {
-		switch (LOWORD(rguid)) {
-		case (DWORD) DIPROP_BUFFERSIZE: {
-			LPDIPROPDWORD	pd = (LPDIPROPDWORD)ph;
-
-			TRACE("(buffersize=%d)\n", pd->dwData);
-
-                        if (This->base.acquired)
-                           return DIERR_INVALIDPARAM;
-
-                        pd->dwData = This->queue_len;
-
-			break;
-		}
-		default:
-			WARN("Unknown type %p\n",rguid);
-			break;
-		}
-	}
-	return DI_OK;
-}
-
 static HRESULT WINAPI SysKeyboardAImpl_GetDeviceState(
 	LPDIRECTINPUTDEVICE8A iface,DWORD len,LPVOID ptr
 )
@@ -364,61 +292,6 @@ static HRESULT WINAPI SysKeyboardAImpl_G
     return DI_OK;
 }
 
-static HRESULT WINAPI SysKeyboardAImpl_GetDeviceData(
-	LPDIRECTINPUTDEVICE8A iface,DWORD dodsize,LPDIDEVICEOBJECTDATA dod,
-	LPDWORD entries,DWORD flags
-)
-{
-    SysKeyboardImpl *This = (SysKeyboardImpl *)iface;
-    HRESULT ret = DI_OK;
-    int len;
-
-    TRACE("(%p) %p -> %p(%d) x%d, 0x%08x\n",
-          This, dod, entries, entries ? *entries : 0, dodsize, flags);
-
-    if (!This->base.acquired)
-        return DIERR_NOTACQUIRED;
-
-    if (!This->data_queue)
-        return DIERR_NOTBUFFERED;
-
-    if (dodsize < sizeof(DIDEVICEOBJECTDATA_DX3))
-        return DIERR_INVALIDPARAM;
-
-    MsgWaitForMultipleObjectsEx(0, NULL, 0, QS_ALLINPUT, 0);
-    EnterCriticalSection(&This->base.crit);
-
-    len = ((This->queue_head < This->queue_tail) ? This->queue_len : 0) +
-            This->queue_head - This->queue_tail;
-    if ((*entries != INFINITE) && (len > *entries)) len = *entries;
-
-    if (dod)
-    {
-        int i;
-        for(i = 0; i < len; i++)
-        {
-            int n = (This->queue_tail + i) % This->queue_len;
-            memcpy((char *)dod + dodsize * i, This->data_queue + n, dodsize);
-        }
-    }
-    *entries = len;
-
-    if (This->overflow)
-        ret = DI_BUFFEROVERFLOW;
-
-    if (!(flags & DIGDD_PEEK))
-    {
-        /* Empty buffer */
-        This->queue_tail = (This->queue_tail + len) % This->queue_len;
-        This->overflow = FALSE;
-    }
-
-    LeaveCriticalSection(&This->base.crit);
-
-    TRACE("Returning %d events queued\n", *entries);
-    return ret;
-}
-
 static HRESULT WINAPI SysKeyboardAImpl_EnumObjects(
 	LPDIRECTINPUTDEVICE8A iface,
 	LPDIENUMDEVICEOBJECTSCALLBACKA lpCallback,
@@ -485,16 +358,6 @@ static HRESULT WINAPI SysKeyboardAImpl_A
     }
     current_lock = This;
 
-    if (This->queue_len > 0)
-    {
-        This->data_queue = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
-                                     This->queue_len * sizeof(*(This->data_queue)));
-        This->queue_head = 0;
-        This->queue_tail = 0;
-        This->overflow = FALSE;
-    } else
-        This->data_queue = NULL;
-
     set_dinput_hook(WH_KEYBOARD_LL, KeyboardCallback);
 
     return DI_OK;
@@ -517,11 +380,6 @@ static HRESULT WINAPI SysKeyboardAImpl_U
     else
         ERR("this != current_lock\n");
 
-    if (This->queue_len >= 0) {
-        HeapFree(GetProcessHeap(), 0, This->data_queue);
-        This->data_queue = NULL;
-    }
-
     return DI_OK;
 }
 
@@ -688,12 +546,12 @@ static const IDirectInputDevice8AVtbl Sy
 	SysKeyboardAImpl_Release,
 	SysKeyboardAImpl_GetCapabilities,
 	SysKeyboardAImpl_EnumObjects,
-	SysKeyboardAImpl_GetProperty,
-	SysKeyboardAImpl_SetProperty,
+	IDirectInputDevice2AImpl_GetProperty,
+	IDirectInputDevice2AImpl_SetProperty,
 	SysKeyboardAImpl_Acquire,
 	SysKeyboardAImpl_Unacquire,
 	SysKeyboardAImpl_GetDeviceState,
-	SysKeyboardAImpl_GetDeviceData,
+	IDirectInputDevice2AImpl_GetDeviceData,
 	IDirectInputDevice2AImpl_SetDataFormat,
 	IDirectInputDevice2AImpl_SetEventNotification,
 	IDirectInputDevice2AImpl_SetCooperativeLevel,
@@ -730,12 +588,12 @@ static const IDirectInputDevice8WVtbl Sy
 	XCAST(Release)SysKeyboardAImpl_Release,
 	XCAST(GetCapabilities)SysKeyboardAImpl_GetCapabilities,
 	SysKeyboardWImpl_EnumObjects,
-	XCAST(GetProperty)SysKeyboardAImpl_GetProperty,
-	XCAST(SetProperty)SysKeyboardAImpl_SetProperty,
+	XCAST(GetProperty)IDirectInputDevice2AImpl_GetProperty,
+	XCAST(SetProperty)IDirectInputDevice2AImpl_SetProperty,
 	XCAST(Acquire)SysKeyboardAImpl_Acquire,
 	XCAST(Unacquire)SysKeyboardAImpl_Unacquire,
 	XCAST(GetDeviceState)SysKeyboardAImpl_GetDeviceState,
-	XCAST(GetDeviceData)SysKeyboardAImpl_GetDeviceData,
+	XCAST(GetDeviceData)IDirectInputDevice2AImpl_GetDeviceData,
 	XCAST(SetDataFormat)IDirectInputDevice2AImpl_SetDataFormat,
 	XCAST(SetEventNotification)IDirectInputDevice2AImpl_SetEventNotification,
 	XCAST(SetCooperativeLevel)IDirectInputDevice2AImpl_SetCooperativeLevel,




More information about the wine-cvs mailing list