refactor(linux): remove warning if no custom keyboards exist
If the dconf setting for custom keyboards doesn't exist, i.e. we never saved custom keyboards before, the previous code resulted in a warning showing up: `(ibus-engine-keyman:4276): GLib-CRITICAL **: 14:31:16.030: g_hash_table_lookup: assertion 'hash_table != NULL' failed`.
This PR adds a null check before trying to access the custom keyboards hash table and thus removes the warning.
The previous code resulted in warnings showing up:
`(ibus-engine-keyman:4276): GLib-CRITICAL **: 14:31:16.030: g_hash_table_lookup: assertion 'hash_table != NULL' failed`.
This should work around the warning.
This is a workaround for missing 'und' language tag.
`(new Intl.Locale('und')).language` returns `undefined` in V8, as of 31
March 2025. This means we cannot rely on `Intl.Locale` to parse the
bcp47 string for us. The implemented workaround is to replace `und` with
a known-good language subtag, and then swap it back out in later
processing.
Also adds unit test and new warning messages for invalid language tags
that were exposed during testing of this.
Fixes: #13610
Fixes: #13620
Turns out there was actually a final-row pixel offset being applied for the OSK. I _believe_ this was something originally done for touch-oriented OSKs that ended up applied to all during 17.0's OSK refactoring efforts.
kmwosk.css does define layer-group padding above and below (1 px each) for touch keyboards already. Furthermore, things look fine when removing this extra 1px offset on the bottom from the last row. I think we're fine to just drop this minor offset and move on for now.
Suggested by @Nnyny. Give more detail on the semantic version format for
keyboard version, as well as details on the limitations to semver
imposed by the Keyman toolchain.
This change tries to map all keys to corresponding Core VKeys so that Core sees them and can reset the context if necessary. Previously we had 0 for most of the keys, which meant that we didn't send them to Core but instead returned right away. While this doesn't directly fix the failing tests described in #12968, it fixes the original tests in #11172.
Also adds a baseline test for resetting the context.
Closes: #12968
For some reason when using a LDML keyboard we ended up emitting a keystroke even though Core returned FALSE for emitting_keystroke. I wasn't able to track down where this happened, but this change seems like an easy way to fix it.
This showed up when debugging why the changes in #13372 didn't work for non-compliant apps.
Removed the redundant thread check guard on load modifer. Added guard
to reading the option. Also fixed some formating. and made the load
modifier private.
Fixes: #13440
This refactors the cached of the right modifier key used in hotkeys
option. In the lowlevelhook you couldn't reset the cached value.
It is now part of the hotkeys class which is more logical encapsulation
the logic assocaited with the hotkeys.
Several keys that are defined in `winuser.h` were added after Keyman
defined its vkeys and so are not documented in the Keyman docs. This
change adds underscores before and after to mark them as being internal.
It's still useful to have them in the source code because it makes the
mapping between Linux keys and Keyman vkeys easier.
Addresses code review comment.
Rewrite of publish-minimum-versions.sh to add some baseline tests for
up-to-date status of minimum-versions.md, and adds first test against
source data, where we have it, with language-subtag-registry.
The scroll bar was also not working correctly for display content.
Different options where explored but the best was to make the outer
update content block a "display: block" instead of using flex.