i succeded to run the game "Wizardry 8" with original wine. Now the input is broken, almost every event is handled twice (e.g. i hit a and 2 a's appear, clicking with mouse results in doubleclick) and it does not seem to be a problem with dlls/x11drv/[event.c|keyboard.c|mouse.c]. Also the windows/input.c sends all requests only once!
to see this insert in windows/input.c line 113 (the queue_raw_hardwar...):
if (message == 0x0100) printf("request KeyDown\n"); if (message == 0x0101) printf("request KeyUp\n");
here, 0x0100 is WM_KEYDOWN, 0x0101 is WM_KEYUP now, i've added to scheduler/client.c line 745 (the wine_server_call):
if (req->u.req.send_message_request.msg == 0x0100) \ printf("sending KeyDown\n"); if (req->u.req.send_message_request.msg == 0x0101) \ printf("sending KeyUp\n");
In most cases this results in two send_requests per action (mouse also) and sometimes (nondeterministic) i've got only one WM_KEYDOWN => only one keypress (at the end of the mail is some output).
I'm stuck now at this point and do not know how to debug furhtermore. It's obvious that wine_server_call gets called twice (once from windows/input.c and the second time from ?!?). Can someone help me and tell me how to continue. What do I have to do now to find the bug ?
mIc
P.S.: Yes, beeing addicted to computer games make's me debug wine!!!!!
Output: request KeyDown sending KeyDown sending KeyDown request KeyUp sending KeyUp sending KeyUp request KeyDown sending KeyDown sending KeyDown request KeyUp sending KeyUp request KeyDown sending KeyDown sending KeyDown request KeyUp sending KeyUp sending KeyUp request KeyDown sending KeyDown request KeyUp sending KeyUp sending KeyUp request KeyDown sending KeyDown sending KeyDown request KeyUp sending KeyUp sending KeyUp
i succeded to run the game "Wizardry 8" with original wine. Now the input is broken, almost every event is handled twice (e.g. i hit a and 2 a's appear, clicking with mouse results in doubleclick) and it does not seem to be a problem with dlls/x11drv/[event.c|keyboard.c|mouse.c]. Also the windows/input.c sends all requests only once!
Got a workaround: in ./windows/message.c line 597 comment that OUT: if (!remove) queue_hardware_message( msg, extra_info, \ MSG_HARDWARE_COOKED); then it will work.
As I said, that is a workaround, here is my debugging output .. does anyone know what to do to really fix this problem?
mIc
windows/message.c: SERVER_START_REQ( send_message ): 0x40586bdc windows/input.c:SERVER_START_REQ( send_message ): 0x405869e0
Breakpoint 1, wine_server_call (req_ptr=0x405869e0) at ../../scheduler/client.c:236 (gdb) backtrace #0 wine_server_call (req_ptr=0x405869e0) at ../../scheduler/client.c:236 #1 0x406c828a in queue_raw_hardware_message (message=256, wParam=65, lParam=1966081, xPos=1, yPos=478, time=173385, extraInfo=0) at ../../windows/input.c:127 #2 0x406c841e in queue_kbd_event (ki=0x40586adc, injected_flags=0) at ../../windows/input.c:186 #3 0x406c88af in SendInput (count=1, inputs=0x40586ad8, size=28) at ../../windows/input.c:337 #4 0x414bc0e5 in send_keyboard_input (wVk=65, wScan=30, dwFlags=0, time=173385) at keyboard.c:802 #5 0x414bc86f in X11DRV_KeyEvent (hwnd=65569, event=0x40586bbc) at keyboard.c:1005 #6 0x414ba7bd in EVENT_ProcessEvent (event=0x40586bbc) at event.c:287 #7 0x414ba2c1 in process_events (data=0x403986b8) at event.c:147 #8 0x414ba3ba in X11DRV_MsgWaitForMultipleObjectsEx (count=0, handles=0x0, timeout=0, mask=0, flags=0) at event.c:179 #9 0x406fcc9f in PeekMessageW (msg_out=0x40586de8, hwnd=0, first=0, last=0, flags=0) at message.c:2070 #10 0x406fcddb in PeekMessageA (msg=0x40586de8, hwnd=0, first=0, last=0, flags=0) at message.c:2128 #11 0x00401789 in ?? () #12 0x565720ec in ?? () Cannot access memory at address 0x83e58955 (gdb) cont schedule.c:wine_server_call:0x0100: 0x405869e0 windows/input.c:SERVER_START_REQ( send_message ): 0x405869e0 schedule.c:wine_server_call:0x0101: 0x405869e0 windows/input.c:SERVER_START_REQ( send_message ): 0x405869b8 windows/input.c:SERVER_START_REQ( send_message ): 0x405869b8 windows/message.c: SERVER_START_REQ( send_message ): 0x40586bdc
Breakpoint 1, wine_server_call (req_ptr=0x40586bdc) at ../../scheduler/client.c:236 (gdb) backtrace #0 wine_server_call (req_ptr=0x40586bdc) at ../../scheduler/client.c:236 #1 0x406cd889 in queue_hardware_message (msg=0x40586d28, extra_info=0, type=MSG_HARDWARE_COOKED) at ../../windows/message.c:130 #2 0x406ce38a in MSG_process_raw_hardware_message (msg=0x40586d28, extra_info=0, hwnd_filter=0, first=0, last=4294967295, remove=0) at ../../windows/message.c:597 #3 0x406fbc55 in MSG_peek_message (msg=0x40586d78, hwnd=0, first=0, last=4294967295, flags=0) at message.c:1477 #4 0x406fcce8 in PeekMessageW (msg_out=0x40586de8, hwnd=0, first=0, last=0, flags=0) at message.c:2075 #5 0x406fcddb in PeekMessageA (msg=0x40586de8, hwnd=0, first=0, last=0, flags=0) at message.c:2128 #6 0x00401789 in ?? () #7 0x565720ec in ?? () Cannot access memory at address 0x83e58955 (gdb)