When a keyboard is installed, Keyman will now only refresh its internal
state on a given thread when that thread receives focus and/or input,
rather than immediately. This will dramatically reduce the chatter
caused by Keyman Engine when a keyboard is installed or settings are
changed.
Fixes#4011.
Fixes#4039.
Fixes#4121.
This change completes the immediate-change model for Keyman
Configuration, by refactoring the refresh of settings out of the render
phase and more appropriately splitting applying and refreshing. It adds
a new message flag for wm_keyman_refresh, KR_SETTINGS_CHANGED, which
uses a random token approach broadcast to all applications on the
desktop to ensure that the refresh is received and multiple
notifications for the same event can be appropriately coalesced.
Most of the files touched are stripping out the refresh flags from the
render phase.
There is one small bug resolved at the same time with the options
properties, which were not reset to default if they had been deleted
from the registry prior to a refresh (see utilkeymanoption.pas).
This does not fix the core issue. Examining the logs shows that
sentrytool is failing with an access violation when running on the
build agent, although it works on my local machine. This first step
is to get the build to fail, and then I will test again directly on the
build agent.
Fixes#3749.
Fixes#3759.
Adds a warning dialog when user attempts to add a transient language to
a keyboard but the maximum number of transient languages is already
installed.
If this issue arises when a user is installing a keyboard for the first
time, Keyman instead installs the keyboard for the user's default
language. This may be a little confusing, but the error condition is
difficult to explain and non-technical users will probably be stuck
and need to install under their default language in any case. Happy to
receive any pushback on this decision.
Fixes#4008.
Fixes issue of font helper popping out separately and secondary crash,
as well as the font helper not actually working because the font data
was never passed in.
In the future, we could improve this by moving the font enumeration into
the back end web server thread but that's a bigger refactor and not
appropriate for beta.
Fixes#4004.
Centres the help window when it first appears.
There is still a small resizing event but that will be handled with a
separate PR for #3765.
Fixes#4113.
The option "Switch to On Screen Keyboard/Help automatically when a
keyboard is selected" is obsolete and we should remove it from the UI.
Note that this does not remove the API surface, just hides the option
from view, as there may be apps relying on the API value.
Not touching help just now as that will be addressed in a help update
in the future.
Fixes#4012.
If the menu previously was scrollable, then it would potentially show
items at the wrong offset because the offsets were not reset when the
menu popup was called if no scroll was needed.
1. This is an initial conversion, so much editing to do.
2. Establishes a build script with pandoc dependency.
3. Works to build both .chm and .md on website.
4. Docbook is no longer required; removed in follow-up PR.
Fixes#4068.
If a keyman://download/keyboard/ link contains an `=` sign (e.g. for
BCP 47 tag), then kmshell was treating it as a parameterised local
filename rather than giving it the property url protocol handler
treatment.