When the user clicks either Shift key on the OSK, that emits a VK_LSHIFT
down key event. If the user subsequently presses and releases the Right
Shift key on their hardware keyboard, that does not reset the isDown
state for the Left Shift key, so the key is not released on the OSK, and
the state becomes inconsistent for apps also.
This change emits a key up event, if when Right Shift is released,
Keyman detects that Left Shift is still "down". Note that if the user
presses and holds Left Shift, and presses and releases Right Shift, the
left shift state will be reset before the users releases Left Shift. But
that's a pathological state!
Fixes: #12611
For Keyman Developer Server, add app.webmanifest so that it can be saved
to the home screen; other pages should not require this.
Fixes: #16172
Test-bot: skip
Keyman currenlty only supports Windows 10 and 11
so the exception was low risk. If it is not available we
return false as metered connections werent possilble before
this the functionality will be the consistent with those
windows versions. i.e. always updating in the background
This adds a helper unit which uses the windows API to obtain a
ConnectionProfile. This profile provides information about the
connection status and connectivity statistics. This includes
the connection costs, roaming, restricted etc. It also can
check to see if background networking activity has been restricted.
Using the recommened example this commit combines these to determine
if a network is metered. It also provides access to the background
network being restricted.
Fixes: #13566
Add Base Keyboard, Proxy Settings, and Keyman System Settings
documentation and links to the Options context help.
Fixes: keymanapp/help.keyman.com#10
Test-bot: skip
* Add `TKeymanPaths.KeymanLocalePath` for consistent access to locales
folder, and update references.
* Remove the `SKDefaultLanguageCode` string and hard code the default
language in CustomisationMessages.pas.
* Hide the test locale 'qqq' on release builds.
Fixes: #15164
* Move the following files from common/windows/cpp/include/ to
common/include/:
* keymanversion.h
* vkeys.h
* Move the following file from common/windows/cpp/ to common/cpp/:
* vkeys.cpp
* Move crc32.cpp,crc32.h into kmcmplib, as they are only used there.
* Remove unused ConvertUTF.c and ConvertUTF.h.
* Update references to the above files.
* Remove precompiled header refs from vkeys.cpp and change data type to
`char*` for types in vkeys.cpp (unless `USE_CHAR16_T` is defined), so
that it is more cross-platform accessible, update usages accordingly,
fixup project definitions accordingly.
* Remove unused define `KMN_KBP_EXPORTING` from kmcmplib/meson.build.
Fixes: #15565
Test-bot: skip
Update the lastkey, lastscankey and lasttransition in aaitp.
This ensures that when the pfEaten is FALSE and the get_message_hook
does not recieve the key press the "last" value is correct.
Added a Key transition member to the thread globals.
This help so better insure we actually matching the key value
that may have been cleared by kmhook_getmessage to the right key.
More importantly makes sure we are not matching it to the wrong
key press. This was happening when a synthazised capslock key press was followed
by and actuall capslock key press.
The SCAN_FLAG_KEYMAN_KEY_EVENT was checked in OnKey pressess as well
as an early return option in _KeymanProcessKeystroke. This change
removes the extra and allows _KeymanProcessKeystroke, to be the
central place for code readablitiy and maintainablity.
It also adds a processToggleChange call in kmhook_getmessage as
it is sometimes called before the TIP hook. the call is also idempotent