Richard Frith-Macdonald wrote:
Ah ... so if I understand correctly, you are saying that the X
library checks and reads from the socket at times *other* than when
we call XPending() in the handler which deals with run loop
events. Thus there is a window between us checking for pending
events and us telling the runloop to watch the socket, in which the
x library can read the events we are expecting from the socket.
Indeed, this is what happens. I guess the code which highlights the
button (rather redraws the window, but that is another issue) is
requesting some information from the server in this particular case.
I think there is a possible workaround for this in our runloop code
in gnustep-base ...
As well as the -receivedEvent:type:extra:forMode: method that the
backend code uses to handle events, it can also implement the -
runLoopShouldBlock: method to tell the run loop how to behave
before doing the select/poll.
So it could be something like:
- (BOOL) runLoopShouldBlock: (BOOL*)trigger
{
*trigger = YES; // Should trigger this event
if (XPending(dpy) > 0)
{
return NO; // Don't block
}
return YES;
}
I gave it a quick try and it solves issue. Thanks Richard.
Wolfgang
_______________________________________________
Discuss-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnustep