hostname on each connection. This allows the client to startup
without being able to resolve the server's hostname. It also lets
it handle changes in the server's address, a typical scenario when
the client is a laptop moving between networks.
and on a secondary screen and locked to the screen (via scroll lock)
mouse motion is sent as motion deltas. When true and scroll lock
is toggled off the mouse is warped to the secondary screen's center
so the server knows where it is. This option is intended to support
games and other programs that repeatedly warp the mouse to the center
of the screen. This change adds general and X11 support but not
win32. The option name is "relativeMouseMoves".
in use. The client was being correctly rejected but the already
connected client was being forcefully disconnected too because the
client to disconnect was found by looking up the client by name.
We now instead look up the client by IClient*.
The low-level hook can report mouse positions outside the boundaries
of the screen and bogus retrograde motion. This messes up switch on
double tap. This change attempts to detect and suppress the bogus
events.
changed locking to screen so that keys no longer count (only
mouse buttons and scroll lock toggled on). This is to deal
with the unreliability of key event reporting which can leave
us locked to a screen with no key physically pressed. The
result of this is that clients get key repeats and releases
without the corresponding key press. CKeyState handles this
by discarding repeat/release events on keys it hasn't seen go
down. Also made a few other minor fixes to win32 keyboard
handling.
This new design is simpler. For keyboard support, clients need only
implement 4 virtual methods on a class derived from CKeyState and
one trivial method in the class derived from CPlatformScreen, which
is now the superclass of platform screens instead of IPlatformScreen.
Keyboard methods have been removed from IPlatformScreen, IPrimaryScreen
and ISecondaryScreen. Also, all keyboard state tracking is now in
exactly one place (the CKeyState subclass) rather than in CScreen,
the platform screen, and the key mapper. Still need to convert Win32.
absolute mouse_event(). Improved keyboard handling: now using
keyboard layout of last foreground window when leaving server
so users can meaningfully choose the locale, moved dead key
handling into hook library so there should be no more race
conditions involving the keyboard dead key buffer, simplified
keyboard and cursor handling by using a full screen transparent
window when not using low level hooks, fixed error in restoring
buffered dead key when checking for dead keys. This hopefully
fixes all known keyboard bugs on win32.
event loop model. Streams, stream filters, and sockets are
converted. Client proxies are almost converted. CServer is
in progress. Removed all HTTP code. Haven't converted the
necessary win32 arch stuff.
is ignored on that client (it has no effect on the server). This
is useful for keyboards that don't have separate number pads and
the user often uses the client's keyboard directly, when turning
on NumLock interferes with normal typing.
true, faking a mouse motion outside screen 0 is clamped onto screen 0.
When the workaround is enabled, we use XWarpPointer() instead of an
XTest fake motion. This isn't perfect but the only real fix requires
patching XTest.
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).
code in a conditional for moving left that blew an assert verifying
that the mouse position was really on the screen if the neighbor
screen wasn't connected.
After that was fixed there was another problem when one screen
linked to another which then linked (in the same direction) to
itself. If the latter screen wasn't connected then it'd get into
an infinite loop.
and the platform specific implementations to lib/platform.
Added an lib/arch method to query the platform's native wide
character encoding and changed CUnicode to use it. All
platform dependent code is now in lib/arch, lib/platform,
and the programs under cmd. Also added more documentation.