Moved code to the X11 driver.

diff --git a/windows/dinput.c b/windows/dinput.c
index b77d203..86c1100 100644
--- a/windows/dinput.c
+++ b/windows/dinput.c
@@ -24,14 +24,16 @@
 #include <assert.h>
 #include <sys/signal.h>
 
-#include "winuser.h"
-#include "winerror.h"
 #include "wine/obj_base.h"
-#include "dinput.h"
 #include "debug.h"
-#include "message.h"
+#include "dinput.h"
 #include "display.h"
+#include "keyboard.h"
+#include "message.h"
 #include "mouse.h"
+#include "sysmetrics.h"
+#include "winerror.h"
+#include "winuser.h"
 
 DEFAULT_DEBUG_CHANNEL(dinput)
 
@@ -399,24 +401,7 @@
 	LPDIRECTINPUTDEVICE2A iface,DWORD len,LPVOID ptr
 )
 {
-	if (len==256) {
-		int keyc,vkey;
-
-		memset(ptr,0,256);
-		for (keyc=min_keycode;keyc<max_keycode;keyc++)
-                {
-                    /* X keycode to virtual key */
-                    vkey = keyc2vkey[keyc] & 0xFF;
-                    /* The windows scancode is keyc-min_keycode */
-                    if (InputKeyStateTable[vkey]&0x80) {
-                        ((LPBYTE)ptr)[keyc-min_keycode]=0x80;
-                        ((LPBYTE)ptr)[(keyc-min_keycode)|0x80]=0x80;
-                    }
-                }
-		return 0;
-	}
-	WARN(dinput,"whoops, SysKeyboardAImpl_GetDeviceState got len %ld?\n",len);
-	return 0;
+	return KEYBOARD_Driver->pGetDIState(len, ptr)?DI_OK:E_FAIL;
 }
 
 static HRESULT WINAPI SysKeyboardAImpl_GetDeviceData(
@@ -425,44 +410,12 @@
 )
 {
 	ICOM_THIS(SysKeyboardAImpl,iface);
-	int			keyc,n,vkey,xentries;
 
-	TRACE(dinput,"(this=%p,%ld,%p,%p(%ld)),0x%08lx)\n",
-    		This,dodsize,dod,entries,entries?*entries:0,flags);
+	TRACE(dinput, "(this=%p,%ld,%p,%p(%ld)),0x%08lx)\n",
+	      This,dodsize,dod,entries,entries?*entries:0,flags);
 
-        /* FIXME !!! */
-
-	EVENT_Synchronize( FALSE );
-
-	if (entries)
-		xentries = *entries; 
-	else
-		xentries = 1;
-
-        n = 0;
-
-        for (keyc=min_keycode;(keyc<max_keycode) && (n<*entries);keyc++)
-        {
-                    /* X keycode to virtual key */
-                    vkey = keyc2vkey[keyc] & 0xFF;
-                    if (This->keystate[vkey] == (InputKeyStateTable[vkey]&0x80))
-			continue;
-		if (dod) {
-			/* add an entry */
-                        dod[n].dwOfs		= keyc-min_keycode; /* scancode */
-			dod[n].dwData		= InputKeyStateTable[vkey]&0x80;
-			dod[n].dwTimeStamp	= 0; /* umm */
-			dod[n].dwSequence	= 0; /* umm */
-			n++;
-		}
-		if (!(flags & DIGDD_PEEK))
-			This->keystate[vkey] = InputKeyStateTable[vkey]&0x80;
-                    
-        }
-        
-	if (n) fprintf(stderr,"%d entries\n",n);
-	*entries = n;
-	return 0;
+	return KEYBOARD_Driver->pGetDIData(
+		This->keystate, dodsize, dod, entries, flags)?DI_OK:E_FAIL;
 }
 
 static HRESULT WINAPI SysKeyboardAImpl_Acquire(LPDIRECTINPUTDEVICE2A iface)