In case anyone sees this one ... two weeks ago an upgrade on my system made Netrek very unresponsive. Eventually it was tracked down to keyboard and mouse event handling between the X libraries and the client. It should have no impact on the Windows client, totally different event architecture. Thu Jul 10 16:04:55 EST 2008 quozl at us.netrek.org * input, fix for Debian Lenny Xlib changes Fix delayed response to keyboard events. Fixes a regression introduced by an upgrade of Debian GNU/Linux Lenny Xlib and Xcb layers. The symptom was that keyboard events would be delayed, they would be buffered by Xlib before our code would handle them. The cause was the use of select(2) and the handling of the X event queue by the client. The change is to allow Xlib a chance to read the X socket before asking Xlib for the events. Then, all events are processed, before proceeding. diff -rN -u old-netrek-client-cow/input.c new-netrek-client-cow/input.c --- old-netrek-client-cow/input.c 2008-07-10 16:09:01.000000000 +1000 +++ new-netrek-client-cow/input.c 2008-07-10 16:09:01.000000000 +1000 @@ -755,16 +755,21 @@ #ifndef THREADED #ifndef HAVE_WIN32 - if (FD_ISSET(xsock, &readfds)) + /* keyboard, mouse, and expose events from the X server + cause the X socket to be readable, so we must direct Xlib + to read them (W_EventsQueuedCk), then we process them. */ + if (FD_ISSET(xsock, &readfds)) { + while (W_EventsQueuedCk()) + process_event(); + doflush = 1; + } #else if (W_EventsPending()) -#endif /* !HAVE_WIN32 */ - { process_event(); - /* NOTE: we're no longer calling XPending(), need this */ doflush = 1; } +#endif /* !HAVE_WIN32 */ #endif /* !THREADED */ if (FD_ISSET(sock, &readfds) || -- James Cameron mailto:quozl at us.netrek.org http://quozl.netrek.org/