Fixed handling of DGA2.0 keyboard events.
diff --git a/windows/x11drv/event.c b/windows/x11drv/event.c
index 59989a1..590ee1d 100644
--- a/windows/x11drv/event.c
+++ b/windows/x11drv/event.c
@@ -30,6 +30,7 @@
#include "debugtools.h"
#include "drive.h"
#include "heap.h"
+#include "input.h"
#include "keyboard.h"
#include "message.h"
#include "mouse.h"
@@ -270,14 +271,32 @@
}
if ((event->type == DGAKeyPressEventType) ||
(event->type == DGAKeyReleaseEventType)) {
- /* Out of laziness, use the helper function to do the conversion :-) */
+ /* Fill a XKeyEvent to send to EVENT_Key */
XKeyEvent ke;
+ XDGAKeyEvent *evt = (XDGAKeyEvent *) event;
TRACE("DGAKeyPress/ReleaseEvent received.\n");
- XDGAKeyEventToXKeyEvent((XDGAKeyEvent *) event, &ke);
+ if (evt->type == DGAKeyReleaseEventType)
+ ke.type = KeyRelease;
+ else
+ ke.type = KeyPress;
+ ke.serial = evt->serial;
+ ke.send_event = FALSE;
+ ke.display = evt->display;
+ ke.window = 0;
+ ke.root = 0;
+ ke.subwindow = 0;
+ ke.time = evt->time;
+ ke.x = PosX;
+ ke.y = PosY;
+ ke.x_root = -1;
+ ke.y_root = -1;
+ ke.state = evt->state;
+ ke.keycode = evt->keycode;
+ ke.same_screen = TRUE;
- EVENT_Key( DGAhwnd, &ke );
+ X11DRV_KEYBOARD_HandleEvent(NULL, &ke);
return;
}
}