now captures non-client area mouse messages. Previously, these
were ignored (because i forgot about them) and they caused all
kinds of problems because they weren't forwarded. For example,
clicking on a window border would cause the window to start
resizing when the mouse came back to the server screen. Moving
inside a title bar meant that the mouse wouldn't move on the
client screen.
Second, because non-client messages are now handled, the full
screen transparent window is no longer necessary to capture
input so it's never displayed. (The window is still necessary
for clipboard ownership so it's still created.) No transparent
window means no screen flashing. It also means we don't have to
become the foreground and active window. This plays better with
apps that minimize or restore when they're no longer the
foreground application/active window.
Third, fixed the low level keyboard hook to forward toggle key
updates, which it was neglecting to do.
Finally, keyboard and mouse input is always forwarded from the hook
to the primary screen handler which then shadows the current key
and mouse button state. If we're using low level hooks then this
isn't really necessary and GetKeyState() always returns the right
info but without low level hooks it means we can just use the
shadow state. It also means we don't have to show our window in
order to get the system's key state table up to date, fixing the
screen flash when checking for the scroll lock state.
realtime priority). After some testing it appears that anything
less than this can starve synergy in some circumstances, preventing
it from forwarding messages to clients. This is a rather risky
change since synergy can now virtually take over a system if it
behaves badly. This change only affects windows systems since
lib/arch of other platforms don't yet attempt to boost priority.
key handling to win32 on both client and server. It also changes
the protocol and adds code to ensure every key pressed also gets
released and that that doesn't get confused when the KeyID for
the press is different from the KeyID of the release (or repeat).
screen saver from activating. It was unnecessary since the built-in
screen saver is disabled as appropriate; this call was just to
ensure that the screen saver wouldn't start if an external program
reactivated the screen saver after synergy disabled it.
It's possible that this was causing screen flicker under gnome, though
i don't know why. It's also possible that periodically sending events
to xscreensaver is causing the flicker but removing that code is more
difficult because xscreensaver can't be disabled, only deactivated or
killed.
events to other hook functions, which broke some tools like objectbar.
Second, windows key processing was fixed. Previously pressing and
release the key would only send a press event, locking the user onto
the client window; also, the win32 server treated as a Meta modifier
instead of a Super modifier, which broke any use of it as any kind of
modifier key. Third, added hacks to support several key combinations
on windows 95/98/me that are treated specially by windows, including
Alt+Tab, Alt+Shift+Tab, Alt+Esc, Alt+Shift+Esc, Ctrl+Esc, and any
combination using the windows key like Win+E and Win+F but not
Ctrl+Alt+Del. Fourth, scroll lock only locking to the client (which
only happened when using a synergy server on windows) has been fixed;
unfortunately the solution causes a lot of screen redraws for some
reason. Finally, there's been a fix to clipboard handling that may
or may not fix a problem where the clipboard would stop transferring
between systems after a little while. I can't be sure if it fixes
the problem because I can't reproduce the problem.
entering the loop waiting for it to deactivate. The failure
to check was causing the screen saver code to kick in when
the screen saver timeout occurred, even if the screen saver
wasn't enabled (because Windows still sends the screen saver
activating message for no good reason when the screen saver
is disabled).
when not on the primary monitor. This should eliminate the flicker
between virtual display 0,0 and the correct position. While this
allows the user to confuse synergy by using the client's mouse,
synergy recovers quickly and easily from any confusion.
a race condition where the synergy server updates the mouse
position but the synergy hook later receives a mouse update from
before the position change (i.e. out of order).
use Xlib to convert an unmatched keysym to upper and lower case and
use whichever, if any, is not the same as the original keysym.
This supports case conversion in any language that Xlib supports
it in.