Relates to KEYMAN-WINDOWS-B.
While this doesn't address the root cause of the exception, it should
prevent this unhandled exception, and adds breadcrumbs to help us see
which code path might be triggering the issue.
While Keyman Core already supported the base layout flags, they were not
being passed in from Keyman Engine for Windows. This meant that any
rules that used `baselayout` would fail, such as in sil_ipa with AltGr+0
for }
0bf72bed74/release/sil/sil_ipa/source/sil_ipa.kmn (L348-L350)
This patch adds support for the following properties:
* KM_KBP_KMX_ENV_BASELAYOUT: the legacy base layout name, e.g. kbdus.dll
* KM_KBP_KMX_ENV_BASELAYOUTALT: the BCP 47 base layout name, e.g. en-US
* KM_KBP_KMX_ENV_SIMULATEALTGR: whether the user has selected to emulate
AltGr with Ctrl+Alt, for example on laptops without a right alt key.
* KM_KBP_KMX_ENV_BASELAYOUTGIVESCTRLRALTFORRALT: whether the system base
layout in use generates Ctrl+RAlt when RAlt is pressed, which can be
true for many European system layouts. This is necessary when
associating the keyboard with a European language because the base
keyboard becomes the language's default keyboard, rather than kbdus.
Fixes#7658.
When manipulating text that contains an unpaired surrogate, the text
editor could throw an exception trying to encode the text to send
through to the token command. This simply masks that error.
Fixes#7656.
If Keyman Developer is installed, but not Keyman for Windows, then
tsysinfo.exe is not present. If a crash occurs, this causes a secondary
crash when trying to display the error handler dialog. In this
situation, we now just show a dialog box with a short message rather
than the more friendly dialog available via tsysinfo.exe.
We could consider adding tsysinfo.exe into Keyman Developer for a future
release.
Fixes#4757.
Fixes#6928.
Three separate ways shutdown is more robust:
1. Destroy main form before web server -- this ensures that all main
form routines have deregistered app sources from web server.
2. In some situations, `FormClose` can be skipped by shutdown routines,
for example, if you call `Application.Terminate`. This change ensures
that we get a second chance to cleanup in the form destructor with
`DoCloseCleanup`.
3. In the Online Update Check, instead of `Application.Terminate`, we
now use `Application.MainForm.Close`, which is much more polite, as
it ensures that changed files are saved, etc, and does proper
cleanup. This particular change may make the other two somewhat
irrelevant but they are still sensible as they will cover us for
other potential form destruction sequences.
Relates to #6928 and KEYMAN-DEVELOPER-74.
Fixes one more potential pathway for assertions being raised, and adds
some extra debugging in case there are additional pathways we are not
capturing.