internal override int SendInput(IntPtr handle, Queue keys) {
if (handle == IntPtr.Zero)
return 0;
int count = keys.Count;
Hwnd hwnd = Hwnd.ObjectFromHandle(handle);
while (keys.Count > 0) {
MSG msg = (MSG)keys.Dequeue();
XEvent xevent = new XEvent ();
xevent.type = (msg.message == Msg.WM_KEYUP ? XEventName.KeyRelease : XEventName.KeyPress);
xevent.KeyEvent.display = DisplayHandle;
if (hwnd != null) {
xevent.KeyEvent.window = hwnd.whole_window;
} else {
xevent.KeyEvent.window = IntPtr.Zero;
}
xevent.KeyEvent.keycode = Keyboard.ToKeycode((int)msg.wParam);
hwnd.Queue.EnqueueLocked (xevent);
}
return count;
}