Keyman cross platform input methods system running on Android, iOS, Linux, macOS, Windows and mobile and desktop web
Find a file
Marc Durdin fbcfd62678 fix(windows): refactor controller windows
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.
2021-05-11 14:47:17 +10:00
.github chore: Add cherry-pick label for cherry-pick PRs 2021-04-23 12:14:28 +02:00
android Merge pull request #5047 from keymanapp/chore/android/offline-help 2021-05-10 16:31:40 +07:00
common auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
developer auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
docs chore: Merge branch 'master' into chore/B14S8-beta-to-master 2021-03-22 06:16:44 +11:00
ios chore(ios): Xcode check-in 2021-05-06 11:52:06 +07:00
linux Merge pull request #4992 from keymanapp/chore/common/crowdin-az 2021-05-07 13:41:59 +07:00
mac chore(mac): update requirements to include Big Sur 2021-05-05 09:50:02 +10:00
oem/firstvoices fix(oem/fv/ios): fixes typo in build script changes 2021-04-23 10:27:21 +07:00
resources auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
web auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
windows/src fix(windows): refactor controller windows 2021-05-11 14:47:17 +10:00
.editorconfig fix(linux): add more package requirements 2020-02-06 18:26:57 +01:00
.flake8 feat(linux): Install keyboard on Gnome 2020-06-24 19:13:40 +02:00
.gitignore chore(windows): remove obsolete importkeyboard app 2020-12-15 11:20:09 +11:00
configure-repo.sh feat(common): Support git worktree when configuring local hooks 2020-02-24 18:30:57 +01:00
crowdin.yml chore(android): Check in crowdin for Indonesian 2021-03-31 11:05:31 +07:00
HISTORY.md auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
lerna.json auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04:00
linux.code-workspace default platform and baselayout for linux 2018-12-18 15:49:56 +07:00
package-lock.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
package.json fix(common): specifies version of hoisted TypeScript 2020-05-25 10:04:13 +07:00
README.md chore: Add localization progress badge 2021-02-04 11:40:34 +07:00
TIER.md chore: update tier 2020-12-15 06:43:19 +11:00
VERSION.md auto: increment master version to 15.0.44 2021-05-10 14:02:21 -04: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 already contributed keyboard layouts for over 1,500 languages!

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

Get Involved

Crowdin

Get involved

Development Status on status.keyman.com

Platform Alpha Beta Stable
Windows Alpha Beta Stable
macOS Alpha Beta Stable
Web Alpha Beta Stable
Android Alpha Beta Stable
iOS Alpha Beta Stable
Linux Alpha Beta Stable

Getting Started

Desktop Platforms

Web & Mobile Platforms

Release Types

Each platform maintains multiple types of releases:

  • Stable: A released version. On a stable or stable-<version> branch.
  • Beta: A version that is nearing full "stable" release. On the beta branch.
  • Alpha: Contains the very latest code. These versions are published daily whenever the code changes. On master branch.

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.