Fixes#3936.
This is a trial change as I am not able to reproduce the problem on my
machine, probably due to timing.
@makarasok, can you please test if this resolves the UAC window not
coming to foreground on your test scenario for #3936?
Turns out that @darcywong00's suggestion for a test case was a Very Good
Idea. The SMP handling in Keyman Core had an egregious bug where only
half of a surrogate pair was being deleted in the UTF-16 context; see
kmx_processor.cpp 425-428. This was then masked by the test runner
masking the damage in the original test case; see kmx.cpp 193-203.
The new test case exercises a number of additional ways of manipulating
the context where surrogate pairs exist, to show we handle the deletion
properly within Keyman Core and in the test runner.
* Fix titles
* Remove unused osk_usage.md
* Remove link to osk_usage because the actual link is onscreenkeyboard
* Fix link to charactermap
* Remove unused links to psrt*language
Fixes#4116.
Fixes KEYMAN-WINDOWS-5T.
If we get an 'access denied' error, we won't report it to Sentry. This
error is of minor consequence as it arises in normal configurations only
if the task was already present, created by an elevated instance of
kmshell under the same user name. In that situation, the task works
fine; it just cannot be updated by a non-elevated instance of kmshell.
If there are other reasons for receiving access denied, we won't be able
to distinguish them anyway, so the best response is to suppress this
message.
An alternative would have been to either (a) avoid creating the task as
an elevated user, or (b) only ever create the task as an elevated user.
However, this adds extra unnecessary complexity and means that the task
may not always be present when we want it to be.
Matches the work in #4360 for Windows, tweaks to documentation.
Note that this does not add the BK_SURROGATE flag at this point. I
will add that in a future update if it proves necessary, when working on
the core integration into Windows.
In order for the BK_SURROGATE and BK_DEADKEY flags to be matched with
the correct xstring elements in the context, we need to delete the
elements from the buffer in reverse order.
decxstr would previously assert if attempting to move before start of
string. This is undesirable behaviour as it should instead return NULL
to indicate that we've finished the string.
I also corretected a buffer underrun which would be possible if
malformed data was in the xstring.
I checked all uses of decxstr to ensure that the NULL return value is
being tested correctly.
Fixes#4196.
When deleting characters in a TSF-aware app, we must delete both halves
of a surrogate pair. This behaviour differs from legacy apps, where a
single backspace is usually sufficient to delete both characters.
Truly ancient apps that do not know about Unicode surrogate pairs are
not going to delete both halves with a single backspace event.
Fortunately, these are few and far between; we would handle them on a
case-by-case basis if support questions for them arise.
When we come to integrating Keyman Core into Keyman for Windows, there
will need to be some careful checking of surrogate pair support, as it
is likely that the handling will need to change.
When running unit tests we try to install some keyboards with
invalid URLs which normally results in an issue being reported on
Sentry. This change detects when we're running unit tests and
in that case doesn't initialize Sentry reporting.
This PR adds the labeler-action GH action that applies labels
based on the PR title. This allows to automatically assign
labels based on our conventional commit message.
Cherry-pick from PR #4226 (8f8b8eb787).
When running unit tests we try to install some keyboards with
invalid URLs which normally results in an issue being reported on
Sentry. This change sets an environment variable when running
the tests and modifies the initialization code to not initialize
Sentry reporting when the environment variable `KEYMAN_NOSENTRY`
is set to 1.