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.
Fixes#7649.
emit_keystroke code path in kmx processor was writing directly to the
core queue instead of to the internal kmx processor queue. This caused
it to be out-of-order in the actions sent to the engine/debugger.
Engines didn't really care but it broke the debugger, for example if
only a deadkey was in the buffer and backspace was pressed, Developer
would assert as it would get unexpected context for the deletions.
Fixes#7643.
The kmn statement `save()` action was being written directly to the
state queue, bypassing the internal kmx action queue. This caused two
issues:
1. save() actions were out-of-order with other actions on the same key
event.
2. The number of items in the internal action queue became out of sync
with the debug item queue, which would cause the debugger to fail
with an assertion.
The new test in debug_api.cpp validates this second issue as the number
of items in the action queue now matches the expected count in the
corresponding debug item.
Fixes#7641.
If you close the active project and have the Welcome window visible, it
was possible for the Compile action to still be enabled, even though
there was nothing to compile.
It appears that components within a docking form are unable to be
focused in some, rare contexts. We don't want to crash, and the end
result of not focusing is not really all that tragic, so let's just
mask the exception.
The doModifierPress function was testing against the 'actual' device
rather than the virtual device, which meant that in the web debugger on
a desktop, testing a touch device, it was effectively testing against
the desktop device data rather than the simulated touch device data.
I did not observe any significant differences in behaviour between the
two modes. So I am not 100% confident that this change is necessary. But
it is a little concerning that there was a mismatch here.
When using the touch 'system' keyboard, the modifier keys are reset by
the kbdMismatch logic introduced in #7543. This is evident in the web
debugger of Keyman Developer, where the system keyboard is easily
accessible.
This maintains the fix from #7543, but removes the `resetContext()`
side-effect.
Fixes#7628.
Indy components do not treat URLs as UTF-8. Our legacy EncodeURL
function (sourced from Indy components) was the same. Discovered we
needed to fixup the parsing of URLs as well as the construction of them;
there may be other places we need to fix, although I did do a search for
the relevant types in TIKE source.
Updates Monaco editor from 0.14.3 to 0.15.6, incorporating
microsoft/vscode#57617 to fix#7625.
The changes to editor.js are required because `editor.model` was not a
public property and we should have been using `editor.getModel()` all
along.
I have not updated to the latest version of monaco (0.35.1 at time of
writing this), as I wish to minimize the changeset during beta.
While I prefer not to update dependencies in beta, this seems to be a
fairly clean update. Will monitor and can roll back if it leads to
instability.