Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin 0e332b6f6c
Some checks are pending
Keyman Build Summary / Summarize build status checks (push) Waiting to run
fix(windows): simplify keyboard refresh and make it more on-demand
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
2026-08-26 10:15:46 +02:00
.github maint(windows): move to vs2026 arm runner for GHA 2026-08-21 11:46:17 +02:00
android docs(android): more direct help-page name, header text 2026-08-21 10:38:10 -05:00
common Merge pull request #12191 from keymanapp/epic/kmc-convert 2026-08-20 16:14:11 +07:00
core Merge branch 'master' into chore/developer/scatteredCode/cleanup_VKeys 2026-08-12 10:44:53 +02:00
developer Merge pull request #16420 from keymanapp/feat/developer/16407/kmc-convert-follow-up-1 2026-08-21 22:08:44 +07:00
docs Merge pull request #16408 from keymanapp/docs/mac/add-xcode-version 2026-08-21 16:55:48 +07:00
ios Merge pull request #16406 from keymanapp/docs/ios/document-autocorrect 2026-08-22 00:00:54 +07:00
linux chore(linux): improve find_locales to handle . and @ suffixes and add unit tests 2026-08-20 17:48:13 +07:00
mac Merge pull request #16358 from keymanapp/chore/crowdin-es 2026-08-14 08:32:07 -05:00
oem/firstvoices maint(android): update FV Android Target API to 36 2026-08-12 19:01:39 +02:00
resources Merge pull request #16408 from keymanapp/docs/mac/add-xcode-version 2026-08-21 16:55:48 +07:00
web Merge branch 'master' into epic/autocorrect 2026-08-19 20:37:51 +07:00
windows fix(windows): simplify keyboard refresh and make it more on-demand 2026-08-26 10:15:46 +02:00
.clang-format feat(linux): work on 2nd round of comments on PR 11816 2024-06-20 17:44:21 +02:00
.editorconfig chore(linux): Address a few more lintian warnings 2022-03-15 15:32:10 +01:00
.eslintrc.cjs maint: patchup eslint configuration 2025-05-02 14:06:33 +07:00
.flake8 chore(linux): Add integration tests for ibus-keyman 2021-11-04 09:22:28 +01:00
.gitattributes maint(common): use LF line endings for scripts 2025-08-18 17:50:28 +02:00
.gitignore chore(developer): consolidate api-extractor usage in Developer 2026-06-24 14:45:05 +02:00
.nycrc.json feat(developer): fixup and prepare build scripts and docs for kmc 2022-09-19 06:36:06 +10:00
.shellcheckrc maint(linux): remove several shellcheck directives and warnings 2025-09-23 18:30:16 +02:00
build.sh maint(common): consolidate builder scripts 2025-08-02 08:11:24 +10:00
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md 2021-10-08 10:46:53 +11:00
configure-repo.sh chore: update docs and non-standard readlink refs 2023-02-22 10:41:54 +07:00
CONTRIBUTING.md chore: add maint to CONTRIBUTING.md 2025-04-29 11:15:55 +07:00
crowdin.yml fix(common): Remove custom language mappings in crowdin.yml 2026-01-13 10:49:52 +07:00
HISTORY.md auto: increment master version to 19.0.274 2026-08-22 13:01:32 -05:00
LICENSE.md maint(linux): fix lintian warnings 2025-05-13 20:07:32 +02:00
package-lock.json chore: refresh package-lock.json after dependabot merges 2026-08-20 17:05:36 +02:00
package.json feat(developer): kmc-convert: new conversion .keylayout->kmn 😎 (#12564) 2026-08-18 15:16:02 +02:00
README.md docs(common): update README with number of languages and keyboards 2025-05-21 20:36:20 +02:00
TIER.md Update TIER.md 2022-11-14 07:34:26 +11:00
tsconfig.base.json chore(common): disable strictNullChecks for TypeScript for now 2026-08-17 11:25:04 +02:00
tsconfig.json Merge branch 'epic/kmc-convert' into auto/A19S30-merge-master-into-kmc-convert 2026-06-02 13:24:54 +02:00
VERSION.md auto: increment master version to 19.0.274 2026-08-22 13:01:32 -05:00

Keyman

Keyman makes it possible for you to type in any language on Windows, macOS, Linux, iPhone, iPad, Android tablets and phones, and even instantly in your web browser. Create keyboard layouts with Keyman Developer and share them with the community in the keyboards repository. The Keyman Community have so far contributed well over 1,000 keyboard layouts for over 2,500 languages!

License

Copyright (c) SIL Global.

Keyman is an open source project distributed under the MIT license.

Get Involved

Development Status

Important Links