Fixes#5695.
When the debugger is in single-step mode, reflects the value of option
stores at the time of the change rather than at the beginning of the
batch.
This functions was to update the keyboard options in the
windows engine with the current options in the core
However it is not needed as first thought. This is because the options
will not be updated in first Non updatable call kmtip. This is due to
the fact the actions will not be processed. A variation on the current
core implementation. I am still pushing the branch as the unit test will
be usefull.
This fixes typing `n>` with sil_ipa keyboard which no longer output
the expected `ŋ` because pressing the shift key reset the context.
For modifier key presses we now exit `KMX_ProcessEvent::ProcessEvent`
early.
This change also removes a redundant line from engine.c. Clearing
the context happens in `reset_context()` again if necessary.
Fixes#5591.
This change improves capslock handling with a capsAlwaysOff keyboard.
Previously, the caps lock indicator was turned on while holding down
the Caps Lock key. With this change we turn it off immediately. This
is done by forcing caps lock off even if the state already seems to
match.
Also, for capsAlwaysOff keyboards skip further processing of caps
lock key after we turned capslock off again.
Fixes#5465.
Fixes#5561.
If a non-BMP Unicode char was emitted into the internal context, it was
being truncated to a WORD, which caused data loss for multi-group
keyboards.
Includes an update to a unit test to validate this fix.
Moves the responsibility for deletion of markers when the users presses
the backspace key, from `kmx_processor::process_event` to
`KMX_ProcessEvent::ProcessGroup`. This has no effect on usage of Keyman
Core, but:
1. Simplifies the association between context and action further
2. Ensures that `m_actions` and `state->actions` will always be the
same length, making future refactoring of these simpler
3. Allows us to use the index into the m_actions array for Debug events,
which simplifies the interleaving of these for the upcoming Debugger.
When the user presses backspace at start of context (where there may be
markers in the cached context, but no characters), the kmx processor
will delete any markers prior to insertion point before requesting that
the consumer emit the backspace virtual key back to the application, to
allow the application to handle backspace at start of text.
Fixes#5488.
This updates Keyman Core, corresponding tests, and Keyman Engine for
Linux to support deletion of markers through an action, ensuring that
the action queue does not desynchronize with the context.
Adds some tests for Keyman Core for debugging, verifying contents of
the action list after every keystroke in the test.
Also refactors some of the test helper files to make it easier to
diagnose failing tests and share helper functions.
Adds an action_index to each debug event (not all debug events
need it). This allows the debugger to partially execute a rule
including the possibility of multiple updates to context.