restart if the X server connection was lost; since synergy
is likely to be started by xdm or the user's xsession, it's
better for synergy to simply terminate when the connection
is lost. synergy will still restart due to other errors.
also fixed numerous other minor bugs and cleaned some stuff
up (like app error codes are now consistent and enumerated
in Version.h, for lack of a better place). and boosted
version and protocol numbers.
screens into CPrimaryScreen and merged common code from secondary
screens into CSecondaryScreen. changed is-a relationship to a
has-a between the primary and secondary screen classes and the
generic platform dependent screen class to avoid multiple
inheritance of implementation. also standardized the interface
for those generic screen classes. adding a platform now involves
implementing simpler interfaces: IScreen for the generic screen,
IScreenEventHandler and some methods of CPrimaryScreen for the
primary screen, and IScreenEventHandler and some methods of
CSecondaryScreen for the secondary screen. did X11 platform
but not win32 platform.
the client screen is closed. this fixes the bug where the
client's keyboard was left with some keys logically pressed
when the client died (e.g. using ctrl+c on the client program
from the server's keyboard would leave the ctrl key logically
pressed).
init() it while it's already running. fixed an uninitialized
pointer bug in CServer and some cleanup-on-error code in
CMSWindowsPrimaryScreen. also added timeout to read() on
IInputStream and a heartbeat sent by clients so the server
can disconnect clients that are dead but never reset the TCP
connection. previously the server would keep these dead
clients around forever and if the user was locked on the
client screen for some reason then the server would have to
be rebooted (or the server would have to be killed via a
remote login).
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).
motion events relative to the previous mouse position. for
example, if two mouse events arrive, the first at x+1,y and
the second at x+2,y, we used to compute deltas of 1,0 and 2,0
instead of 1,0 and 1,0. that's fixed. also worked around a
bug (probably) in windows that caused a motion event after a
SetCursorPos() to be lost or reported one pixel off from the
correct position. now using mouse_event() which doesn't
have that problem. also fixed calculation of normalized
coordinates for mouse_event() when there are multiple
displays.
the address and port to listen on or connect to. changed the
default port and put it in ProtocolTypes.h. the HTTP port is
now no longer opened unless the --http argument is supplied
or the config file includes it.
the apps still exit but they do it in a mostly controlled
manner. in particular, the server threads except the one
processing primary screen events will terminate gracefully.
this will be important should the server ever allow HTTP
clients to rewrite the configuration file.
note that X makes it effectively impossible to continue once
the X server disconnects. even if it didn't it would be
difficult for synergy to recover. users will have to add
synergy to the X display manager's startup script if they
expect the server to be restarted. alternatively, we could
add code to fork synergy at startup; the child would do
the normal work while the parent would simply wait for the
child to exit and restart it.
CServer to the primary screen when the configuration changes so it
can make necessary adjustments (the win32 primary screen must tell
the hook dll about the new jump zones).
changed includes of some std c++ library files to go through
our own include files. these wrap the include with stuff to
keep vc++ quiet when compiling at warning level 4, which is
what it does now. it also works around missing <istream> and
<ostream> on g++2.96.
added missing std:: where necessary. g++ doesn't really support
namespaces so it lets references without the namespace slip
through.
added workaround or fix. not sure if istringstream::str(string)
should reset eofbit. it does on g++ but does not on vc++.
added clear() after str() so it works either way.
added low-level keyboard hook to win32. if available (it's only
available on NT SP3 and up) it allows us to catch and handle
alt+tab, alt+esc, ctrl+esc, and windows key hot keys. i think
that leaves only ctrl+alt+del and accessibility functions
uncaught on those systems.