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.
also no longer warping mouse to 0,0 when setting server screen
info. that was causing the mouse to jump if the server screen
had itself as its left or top neighbor (directly or indirectly)
once a screen could be its own neighbor.
restarting and daemonizing on unix. daemon sends log messages
to syslog. unix now reads config file from file named on
command line; if no command line arg then uses effective
user's config file and if that's not there it finally tries
/etc/synergy.conf. if there are no screens configured then
one is added for the primary screen. broke some startup
stuff on win32.
also now timing out if X primary screen can't grab the mouse
and keyboard. the server will just give up trying to switch
screens. the grabs will fail is some other app has a grab
and won't release it. note that kdm grabs the keyboard for
the duration that the login window is displayed, effectively
disabling synergy.
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.
CXWindowsUtil that installs/uninstalls an X error hander.
using that in primary screen, clipboard, and util to ensure
that certain errors don't kill the app.
be accessed now between open()/close(). ownership of the
clipboard is asserted via the empty() method. this parallels
the win32 model (but the win32 code hasn't been updated yet).
refactored X11 clipboard code. moved the bulk of it into
CXWindowsClipboard and moved some comment event handling into
CXWindowsScreen. changed how requests are processed into a
hopefully easier to understand model. added support for getting
clipboard from and sending clipboard to motif (or at least
lesstif) clients. sending to lesstif required a hack to work
around an apparent bug in lesstif.
a screen. this allows the secondary screen to set it's
modifier state to match the primary screen's state. this is
not strictly necessary since each keystroke should adjust the
modifier state as needed to get the right result.
That key only reports press when pressed and released when
caps-lock is activated and only reports release when pressed
and released when caps-lock is deactivated. I don't know of a
way to detect this behavior so it may have to be configured by
the user. The code assumes normal behavior; will have to add
code to set the flag (perhaps from a user configuration).
clipboard owner support (MS windows done, X windows partial)
added key transfer on ms windows
mutex fixes in CClient (had race conditions)
faster debug output in ms windows
changed temporary screen name to "secondary"
network fixes on ms windows (poll returned wrong result)
fixed transparent cursor on ms windows