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

Reply via email to