I see a problem with this concept, which is that under R5, messages generated by an input_server device get through to the window with all the "custom" fields that the device has put into the message.
A good example of this is a tablet driver.
Yup. I guess you use such a thing, isn't it?
I am absolutely sure, that whatever information the tablet driver decides to add to the message is received by the client window.
Yup. I looked into BeBook, it's confirmed.
By extracting specific information from the input_server message to create a PointerEvent in the app_server, then later creating a new message that is sent to the client, any additional information is "filtered out".
Another problem with the current code is that the message is send to the client in the RootLayer thread. This should be re-designed so that the actual sending is done by the ServerWindow thread. The RootLayer should rather put the event messages into a queue maintained by the ServerWindow. This way, it would also be possible to drop less important messages in the ServerWindow thread. Suppose you have two different clients registered for the same input events. One is fast, responsive and generally well-behaving, the other is slow as a dog (sorry dogs) and takes for ever to process messages. You would want to send less messages to the slow client. Therefor it would be best to send messages by the ServerWindow thread in the pace that the client can keep up with.
P.S. And sorry I cannot contribute code myself right now...
That's OK, we all know about those times. :-)