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.
lib/arch. This should make porting easier. Will probably
continue to refactor a little more, moving platform dependent
event handling stuff into lib/platform.
and sending those options to the appropriate client screens.
Currently, two options are supported: halfDuplexCapsLock and
halfDuplexNumLock mark the caps lock and num lock keys,
respectively, as being half-duplex.
the mouse is locked to the screen. We can't tell if a half-
duplex key is physically down and logically down just means
it's active so there's no point in letting it lock the mouse
to the screen.
from a windows server. Was converting ctrl+alt on windows to
mode switch on the server. No longer doing that; windows clients
will interpret ctrl+alt as AltGr and other clients will just see
ctrl+alt. Also made the right alt key mode switch on windows
servers in case the user wants to force a mode switch, but that
means the right alt key no longer acts as alt on clients.
more robust now. Also added handling of Super modifier key and
changed windows keys to map to Super instead of Meta, which is
the default on my keyboard.