[haiku-appserver] Re: [Haiku-commits] r14131 - haiku/trunk/src/servers/app

  • From: Adi Oanca <adioanca@xxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxx
  • Date: Thu, 08 Sep 2005 23:12:43 +0300

Hi Stephan,

Stephan AÃmus wrote:
Hi Adi,

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.

I did not address this part in this small redesign, but I am very glad that you, the graphic artist, realized there's something wrong with input 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".

Yes, bad!

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.

You are right, this problem should be resolved. But I not sure the solution you proposed is good. That's because messages that come from input_server are BMessages and the ones that come to ServerWindow are PortLink messages. And you can't use the same queue to receive both types of messages.
I think we need another thread that should receive BMessages from input_server, handle them, drop some of them if required by the pointed BView, then forward to the appropriate BWindow-BView.

P.S. And sorry I cannot contribute code myself right now...

That's OK, we all know about those times. :-)

bye, Adi.

Other related posts: