installing and uninstalling the new error handler, causing
errors before the lock to be caught and errors during the lock
to not be caught. had to add Display* as argument to c'tor.
and untested. also some known problems: not detecting an
xscreensaver started after us and not detecting built-in
screen saver activation (not sure if we can without using
ugly extensions).
multiple times is *not* the same as calling XIfEvent() because the
former will re-encounter events that it didn't process previously.
to make things simple it now pulls events off the queue and saves
them if not processed for selection transfer and puts them back
afterwards.
when it wasn't necessary. (in particular, we were getting the
clipboard update time from the owner then emptying the clipboard,
so we didn't need to get the time. worse, most owners don't
support getting the time and we often timed out.)
also fixed a multithread bug using the X display. we were using
a CThread to send an event after a timeout while we were waiting
in XIfEvent(). this necessarily involved two threads calling
into Xlib at once, which is not allowed. now using polling to
do the timeout because Xlib doesn't have a function to get
events with a timeout.