Fixes #5004. This cleans up the use of controller windows. A single window is now given the responsibility of being the master controller, which receives messages from Keyman32 and other components around UI activation, active keyboard, etc. The master controller is keyman.exe's `TApplication` window, which does not get destroyed and recreated, unlike the main form window. Any thread which has responsibility for Keyman UI (keyman.exe main thread, keymanx64.exe main thread) is also registered as a controller thread. A controller thread has special handling for interactions with keyman32 around focus tracking. Caveats: * While keymanx64 does not have a visible window and thus probably does not need to be registered as a controller thread, it doesn't really hurt. * Note that keymanx64 registers the 32-bit controller thread as well, which again is probably unnecessary as the 64-bit process cannot interact with the 32-bit thread. * Keyman's main form still handles wm_keyman_control messages, as there are a number of other components which post to that window (e.g. text editor, com library visual keyboard interactions). Unlike the original problem trigger, the reference handle is not stored long-term and so there is unlikely to be a problem with main form window re-creation causing an issue in these contexts. There are several TODO items in this which I will address in follow-ups, to reduce the scope of these changes. I hope to cherry-pick this to stable-14.0, but will run for a while in 15.0 before doing so. |
||
|---|---|---|
| .github | ||
| android | ||
| common | ||
| developer | ||
| docs | ||
| ios | ||
| linux | ||
| mac | ||
| oem/firstvoices | ||
| resources | ||
| web | ||
| windows/src | ||
| .editorconfig | ||
| .flake8 | ||
| .gitignore | ||
| configure-repo.sh | ||
| crowdin.yml | ||
| HISTORY.md | ||
| lerna.json | ||
| linux.code-workspace | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| TIER.md | ||
| VERSION.md | ||
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 already contributed keyboard layouts for over 1,500 languages!
Keyman is an open source project distributed under the MIT license.
Get Involved
Development Status on status.keyman.com
| Platform | Alpha | Beta | Stable |
|---|---|---|---|
| Windows | |||
| macOS | |||
| Web | |||
| Android | |||
| iOS | |||
| Linux |
Getting Started
Desktop Platforms
Web & Mobile Platforms
Release Types
Each platform maintains multiple types of releases:
- Stable: A released version. On a
stableorstable-<version>branch. - Beta: A version that is nearing full "stable" release. On the
betabranch. - Alpha: Contains the very latest code. These versions are published daily whenever the code changes. On
masterbranch.
License
Copyright (c) 2018-2021 SIL International. All rights reserved.
Licensed under the MIT License.
Keyman for Linux is licensed under the MIT License apart from ibus-kmfl which is licensed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
Notes for Contributors
When cloning this repo for local development on a Windows machine, take care not to place it overly deep in your file system.
Some of the paths for compilation can push character lengths around 160 characters long, while certain operations on Windows systems may be limited to paths of 260 characters or less.
For example, git clean on Windows with msys is limited due to dependence on older Windows APIs.
