2011/6/14 Vincas Miliūnas <vincas.miliu...@gmail.com>: > This is a partial raw input implementation for mouse and keyboard. > > I've read in the IRC chat, that products of tools/make_request should not be > included in a patch, so I left them out. > > My first attempts were by leeching input events from queue_mouse_message and > queue_keyboard_message functions, but I couldn't get mouse cursor movement > right. Instead, I copied the way dinput receives input - by installing low > level hooks and forwarding input to the server. This is just to get "try 1" > out of the door. Of course, it would be better if the input feed would be > server-side only. > > I hit a very weird bug, where in peek_message function, info.msg.lParam was > impossible to set with the proper lParam (it was correct in reply->lparam) > value, instead is was overwritten by some constant. That was happening only > for the messages sent by the patch using post_message. I guess the tales of > server-side dragons hold some truth... If anyone wants to try to reproduce > it, just recompile without the unused #include "user.h" in raw_input.c and > run user32 tests. > > This patch game-tested and works for Quake Live (in_mouse 2 for raw input), > World of Tanks and Risen. > > Feedback is very much appreciated. Thanks. > > --- > server/protocol.def | 79 > +++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 79 insertions(+), 0 deletions(-)
Howdy Vincas, This patch breaks the compile: $ patch -p1 < ~/75274 $ ./tools/make_requests $ ./configure --disable-tests $ make make[1]: Entering directory `/home/austin/wine-git/server' gcc -o wineserver async.o atom.o change.o class.o clipboard.o completion.o console.o debugger.o device.o directory.o event.o fd.o file.o handle.o hook.o mach.o mailslot.o main.o mapping.o mutex.o named_pipe.o object.o process.o procfs.o ptrace.o queue.o region.o registry.o request.o semaphore.o serial.o signal.o snapshot.o sock.o symlink.o thread.o timer.o token.o trace.o unicode.o user.o window.o winstation.o -L../libs/wine -lwine ../libs/port/libwine_port.a -Wl,--rpath,\$ORIGIN/../libs/wine request.o:(.rodata+0x494): undefined reference to `req_get_raw_input_device_list' request.o:(.rodata+0x498): undefined reference to `req_register_raw_input_device' request.o:(.rodata+0x49c): undefined reference to `req_unregister_raw_input_device' request.o:(.rodata+0x4a0): undefined reference to `req_is_raw_input_data' request.o:(.rodata+0x4a4): undefined reference to `req_get_raw_input_data' request.o:(.rodata+0x4a8): undefined reference to `req_get_registered_raw_input_devices' request.o:(.rodata+0x4ac): undefined reference to `req_add_raw_input_data' request.o:(.rodata+0x4b0): undefined reference to `req_get_raw_input_device_info' collect2: ld returned 1 exit status make[1]: *** [wineserver] Error 1 make[1]: Leaving directory `/home/austin/wine-git/server' make: *** [server] Error 2 which you implement in patch 5. Every patch needs to stand on its own, without breaking the tests/compile. For such a complicated changeset, it's probably best to send the tests in on their own first, with the failing tests wrapped in todo_wine(). See also http://wiki.winehq.org/SubmittingPatches BTW, thanks for working on this, I used your earlier patches to play a bit of Brink ;-). -- -Austin