Alexandre Julliard wrote:
Raw messages are not supposed to get processed while there is a cooked message in the queue. Is the app filtering messages in GetMessage? Could you please do a +server trace showing the problem?
Well, raw messages can be processed even though there is a cooked message in the queue if the application calls GetMessage and the requested message range does not include mouse messages. This seems to be the case here.
It looks like the correct fix is much more simple than I thought it would be: wineserver get_message handler just needs to check that there are no pending cooked messages before returning raw messages and some signaling magic must be added to prevent wakeups for raw messages if a cooked message has been queued.
Here is (hopefully) the relevant part of +server trace:
080703b8: get_message( flags=1, get_win=00000000, get_first=00000100, get_last=00000108 ) 080703b8: get_message() = 0 { type=6, win=00000000, msg=00000200, wparam=00000001, lparam=00000000, x=142, y=26, time=0000b7b8, info=00020022, data={} } 080703b8: send_message( id=0x80703b8, type=7, win=00020022, msg=000000a0, wparam=00000005, lparam=001a008e, x=142, y=26, time=0000b7b8, info=00020022, timeout=0, data={} ) 080703b8: send_message() = 0 080703b8: get_message( flags=1, get_win=00000000, get_first=00000100, get_last=00000108 ) 080703b8: get_message() = 0 { type=6, win=00000000, msg=00000202, wparam=00000000, lparam=00000000, x=142, y=26, time=0000b7b8, info=00020022, data={} } 080703b8: send_message( id=0x80703b8, type=7, win=00020022, msg=000000a2, wparam=00000005, lparam=001a008e, x=142, y=26, time=0000b7b8, info=00020022, timeout=0, data={} ) 080703b8: send_message() = 0