Skip to content

auto: B19S1 merge master into user-dict 📖 - #16563

Open
keyman-server wants to merge 142 commits into
epic/user-dictfrom
auto/B19S1-merge-base-into-user-dict
Open

auto: B19S1 merge master into user-dict 📖#16563
keyman-server wants to merge 142 commits into
epic/user-dictfrom
auto/B19S1-merge-base-into-user-dict

Conversation

@keyman-server

Copy link
Copy Markdown
Collaborator

Test-bot: skip
Build-bot: build

jahorton and others added 30 commits August 17, 2026 15:33
This PR provides two main services:
- It allows on-device KMP file providers (such as Chrome downloads or the local Files app) to smoothly pass those KMP files into Keyman for Android for installation.
- It also removes wildcard-host http / https deep-links from the app manifest, as these are invalid.

Fixes: #14854
Fixes: #10133

Upon my investigation into related documentation, I've determined that with current versions of Android, setting up a general, "anywhere on the web" deep link for KMP files is not supported and should not be attempted.

How, then, do we facilitate external apps passing off KMP links or files to Keyman for Android?  Turns out... we've already done the work for downloaded files with `file:` and `content:` scheme deep-links.  The issue is that some of our permissions-checking code logic was bad.   With a little work to correct them - removing the bad checks that never should have existed anyway - the files load nicely!

Build-bot: skip release:android
Clean up the keyboard refresh process. Keyman COM API will post a
`wm_keyman_refresh`, `KR_REQUEST_REFRESH` message when changes have been
made to the list of installed keyboards (or some other keyboard-related
settings change).

Keyman Engine (any arch) will handle this message, in any process, and
post a message to the master controller (keyman.exe, TfrmKeyman7Main),
`wm_keyman_refresh`, `KR_PRE_REFRESH`.

Keyman Engine (keyman32) will handle _this_ message in the master
controller thread context, and increment the global refresh tag. It also
asks the other architecture host process(es) to update their global
refresh counter to the same value (by posting `wm_keyman_refresh`,
`KM_PRE_REFRESH` to those process(es).)

This refresh tag is then compared on-demand in each thread to the
thread's current refresh tag value, when a keyboard activation is
received, on set focus, or on a keystroke, and the keyboard list is
refreshed at that point.

This means that keyboard installation no longer triggers a large amount
of activity reloading all the keyboards on all windowed threads, but
rather they will gradually reload as the user interacts with them. It
also fixes #15333, which related to having threads with only child
windows -- that is, that were parented by top-level windows from other
threads -- which thus never received the global broadcast in the earlier
design. For example, VSCode, Notepad in Win11, Chrome.

Fixes: #15333
Cleanup of unused `wm_keyman_control` and `wm_keyman_refresh` values,
and some other unused messages, which were making the implementation
harder to understand.

Relates-to: #15333
Follows: #16435
Co-authored-by: Marc Durdin <marc@durdin.net>
…witchOSKPages`, osVista, osWin7, osWin8, cleanup

* Remove references to `koSwitchLanguageForAllApplications` and
  `koAutoSwitchOSKPages` options, translated strings for them, and
  related `GlobalKeyboardChangeManager` -- no longer required since
  Win8.
* Remove Windows Vista-, 7-, and 8-specific code paths - except for the
  one user-facing setting for installing keyboards on downlevel
  operating systems.
* Remove commented code

Fixes: #16433
Test-bot: skip
Co-authored-by: Ross Cruickshank <rc-swag@users.noreply.github.com>
A string with leading delimiters passed into `u16tok()` would not skip
those delimiters. This impacted `&targets` store and other locations.

Note that this tightens input parameter checks for delimiters and
context as well.

Fixes: #13721
Test-bot: skip
…uple-construction' into change/web/narrow-autoselection-comparisons
Previously we uploaded the webview source map during a web build. This
can lead to problems because that is not the actual artifact used for
Android and iOS.

This change therefore moves uploading the webview source map to Sentry
to the android and ios builds.

Build-bot: skip build:web,android,ios
Test-bot: skip
Add support for specifying an output folder instead of filename for the
`--out-file` parameter of kmc. This allows for batch builds, which can
be much faster than invoking kmc for each file separately.

Alongside that, add a `--continue-on-error` parameter that allows for
batch builds to continue even if a single file fails to build. (Note
that if a fatal error is encountered, kmc aborts with exit code 70).
…ompiler

`KeysCompiler` runs before `LayrCompiler` so this verification needs to
defer rather than throw. We can assume that the `LayrCompiler` will
catch it.

Fixes: KEYMAN-DEVELOPER-3XD
Fixes: #16454
Test-bot: skip
Per the spec, the `id` attribute is required for touch layers, and
`modifiers` attribute is required for hardware layers. There is
ambiguity in the spec at present as to whether they should be allowed
for the alternative type.

* Validate that the attributes are present where required.
* Tighten validation of `modifiers` attribute - it cannot be empty or
  missing for hardware; "" != "none".
* Hint if the attribute is present when it probably shouldn't be (to be
  potentially raised to warning or error after spec clarified).
* Fixup all keyboard3 xml files to conform to spec and eliminate hints.
* Add unit tests.
* Removed threshold warning for coverage as kmc-ldml is already > 90%.

Fixes: #12423
Build-bot: skip release:web,android,ios
Co-authored-by: Eberhard Beilharz <ermshiperete@users.noreply.github.com>
Co-authored-by: Sabine Schmitt <SabineSIL@users.noreply.github.com>
The Character Map scroll will now scroll from current scroll position
when the scroll wheel is used, one row at a time, rather than moving the
currently selected cell. This behavior is more natural and allows mixed
use of the scrollbar and the scrollwheel.

Fixes: #14159
Test-bot: skip
Also reorder the buttons more logically, so Copy Link is next to Test
Keyboard, so that the Email Links button which applies to all items in
the list is separate from the Test Keyboard and Copy Link buttons.

Fixes: #12669
Test-bot: skip
Use `KEYMAN_VERSION` instead of parsing version information.

Test-bot: skip
Server lacks tests at present. Removing version-data tests as no longer
relevant meant that there were no tests! So, added environment tests
which relate to changes in #16476.
@keymanapp-test-bot

keymanapp-test-bot Bot commented Sep 12, 2026

Copy link
Copy Markdown

User Test Results

Test specification and instructions

User tests are not required

Test Artifacts

  • Android (no artifacts on BuildLevel "build")
    • Keyman for Android apk - build : ✅ all tests passed
    • FirstVoices Keyboards for Android apk - build : ✅ all tests passed
    • KeyboardHarness apk - build : ✅ all tests passed
    • KMSample1 apk - build : ✅ all tests passed
    • KMSample2 apk - build : ✅ all tests passed
  • Developer (no artifacts on BuildLevel "build")
    • Keyman Developer - build : ✅ all tests passed
    • Compiler Regression Tests - build : ✅ all tests passed
    • kmcomp.zip - build : ✅ all tests passed
  • iOS (no artifacts on BuildLevel "build")
    • Keyman for iOS (simulator image) - build : ✅ all tests passed
    • FirstVoices Keyboards for iOS (simulator image) - build : ✅ all tests passed
  • Keyboards (no artifacts on BuildLevel "build")
    • Test Keyboards - build : ✅ all tests passed
  • macOS (no artifacts on BuildLevel "build")
    • Keyman for macOS (.dmg) - build : ✅ all tests passed
    • Keyman for macOS (.pkg) - build : ✅ all tests passed
  • Web (no artifacts on BuildLevel "build")
    • KeymanWeb Test Home - build : ✅ all tests passed
  • Windows (no artifacts on BuildLevel "build")
    • Keyman for Windows - build : ✅ all tests passed
    • FirstVoices Keyboards for Windows - build : ✅ all tests passed
    • Text Editor (ARM64) - build : ✅ all tests passed
    • Text Editor (x64) - build : ✅ all tests passed
    • Text Editor (x86) - build : ✅ all tests passed

@keymanapp-test-bot keymanapp-test-bot Bot changed the title auto: B19S1 merge master into user-dict auto: B19S1 merge master into user-dict 📖 Sep 12, 2026
@keymanapp-test-bot keymanapp-test-bot Bot added this to the B19S2 milestone Sep 12, 2026
auto-merge was automatically disabled September 12, 2026 07:58

Branch protection rule check failed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

5 participants