Commit graph

3843 commits

Author SHA1 Message Date
Darcy Wong
f908546969
Merge pull request #15034 from keymanapp/chore/common/platform-rules
chore(common): Consolidate platformtest.js keyboard to `/common/test/keyboards/` 🚛
2025-11-06 13:24:14 +07:00
Marc Durdin
9e1fe8e6de chore(windows): upgrade VC++ projects to v143 (VS2022)
Test-bot: skip
Build-bot: skip release:developer,windows
2025-10-30 16:31:45 +01:00
Darcy Wong
5bf5a5941f chore(common): Move platformtest to common/test/keyboards 2025-10-28 07:18:49 +07:00
Marc Durdin
ba411774f6 maint(resources): move NPM package publishing to GitHub Actions
Due to recent changes in NPM package publishing security requirements,
we have to move from TeamCity build to a GitHub Action to publish our
NPM packages, so we can take advantage of trusted publishing. This
change also consolidates and centralizes the npm publishing into
resources/build/ci/npm-publish.sh, which removes a lot of boilerplate
from each of the build.sh scripts, and ensures consistency.

Packages will be `npm pack`ed on PR and test builds, and published in
release builds.

Ref: https://docs.npmjs.com/trusted-publishers
Ref: https://github.blog/changelog/2025-09-29-strengthening-npm-security-important-changes-to-authentication-and-token-management/
Fixes: #14963
Test-bot: skip
Build-bot: release:developer
2025-10-27 16:31:55 +01:00
Darcy Wong
5f021e3884 chore(windows): Beautify platformtest.js 2025-10-24 14:10:57 +07:00
Darcy Wong
b1fe097a82 chore(windows): Update platformtest keyboard 2025-10-24 10:24:11 +07:00
Marc Durdin
96e7ed56b5
Merge pull request #14909 from keymanapp/fix/windows/14890-ctrl-ralt-on-osk
fix(windows): osk: handle simulated left Control event when AltGr pressed
2025-10-13 10:39:42 +02:00
Marc Durdin
03cd865c09
Apply suggestions from code review
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-10-13 10:37:35 +02:00
Darcy Wong
c38f488986 chore(common): Update crowdin strings for Vietnamese 2025-10-09 11:40:18 +07:00
Marc Durdin
c99e0c01c4 chore(windows): address warnings 2025-10-08 15:08:04 +02:00
Marc Durdin
cb6063a954 chore(windows): add test app for investigating low level keyboard events
Relates-to: #14890
2025-10-08 14:59:48 +02:00
Marc Durdin
50ffbb2722 fix(windows): osk: handle simulated left Control event when AltGr pressed
When a European layout is active, and the user presses AltGr, Windows
generates a simulated VK_LCONTROL event alongside the VK_RMENU event.
This was causing the OSK to show LCtrl as depressed alongside RAlt, so
the OSK would show the wrong modifier layer, which was unhelpful and
confusing to the end user.

It is possible to detect the simulated VK_LCONTROL in the WH_KEYBOARD_LL
hook, because the scan code generated is 0x21D, instead of 0x1D.
Warning: this is not a documented value. (But, this 0x21D scan code is
not passed to the WM_KEYDOWN event!) Therefore, we use Keyman's existing
kmnLowLevelKeyboardProc to pass modifier key events on to the visual
keyboard.

This patch handles only this specific scenario, by watching for that
specific scan code in the new handler in the UfrmOSKOnScreenKeyboard
module, together with some minor refactoring so that it fits neatly.

A future improvement would be to have all modifier key processing go
through this new handler, and eliminate the timer-based polling of the
keyboard. However, there is some additional risk around missing events,
leading to 'stuck modifiers'.

Fixes: #14890
Build-bot: skip release:windows
2025-10-08 14:32:40 +02:00
rc-swag
d769ef31b5
Merge pull request #14683 from keymanapp/fix/windows/14577/clean-cache-idle-state
fix(windows): remove cached files in idle state
2025-10-03 09:19:56 +10:00
Marc Durdin
881e08282a
Merge pull request #14795 from keymanapp/feat/windows/14787-improve-startup-time
feat(windows): improve startup time by caching locale names
2025-09-26 09:09:24 +02:00
rc-swag
96a28feeed
Merge pull request #13573 from keymanapp/fix/windows/13376-language-Selector-setup-is-not-sorted
fix(windows): sort setup UI language selector according to language names
2025-09-26 15:28:13 +10:00
Marc Durdin
39b4d630dd docs(windows): add documentation for localization functions
Build-bot: skip
2025-09-25 09:46:24 +02:00
Marc Durdin
914bf6a8a4 fix(windows): disable .msi shortcut advertisement
Change Keyman shortcuts to standard Windows shortcuts, rather than
advertised shortcuts, to work around a problem with advertised shortcuts,
elevated custom actions, and non-admin users, as described in #14791.

The problem is related to advertised shortcuts in Windows Installer. When
you have an advertised shortcut, the first use of the shortcut triggers a
repair to prepare the app for use in the new user's context. And now, with
Aug 2025 Windows security patch KB5063878, tweaked in Sep 2025, this
triggers an elevation dialog, which the non-admin user cannot work around.

This means that the shortcuts will be regular Windows shortcut files rather
than advertised shortcuts, and are added to
`%ProgramData%\Microsoft\Windows\Start Menu\Programs\Keyman for Windows`
(so, available for all users on that machine, but will not follow a user
across machines).

* DISABLEADVTSHORTCUTS: https://learn.microsoft.com/en-us/windows/win32/msi/disableadvtshortcuts
* Shortcut advertisement: https://learn.microsoft.com/en-us/windows/win32/msi/advertisement

Relates-to: #14809
Fixes: #14791
Build-bot: skip release:windows
2025-09-25 09:04:37 +02:00
rc-swag
c5b82bd01a
fix(windows): minor review comments 2025-09-25 14:29:23 +10:00
Marc Durdin
ad9ab53c72 feat(windows): improve startup time by caching locale names
This was flagged years ago as a potential performance hotspot: each
locale is loaded at process start for any kmcomapi-involved process,
which takes quite a long time. This refactor moves the locale
enumeration out of kmcomapi and into the build process, so we have a
static list of locales put into locale/index.xml.

This includes a minor breaking change to Keyman Engine API on Windows:
`MessageFromID(id, locale)` now only allows the three ids
SKUILanguageName, SKUILanguageNameWithEnglish, and SKLanguageCode, for
performance reasons. At this point, only SKUILanguageNameWithEnglish is
actually used anywhere in Keyman, and it is unlikely that any other
consumers are requesting alternate IDs.

Fixes: #14787
Build-bot: skip release:windows
2025-09-19 14:11:37 +02:00
sze2st
a8c8f6c776
Merge branch 'master' into fix/windows/13376-language-Selector-setup-is-not-sorted 2025-09-17 09:40:41 +02:00
EberhardSchweizer07@gmail.com
0ce8e1b876 fix(windows): remove FSortedDisplayValues and related function
SortedDisplayValues and its related references
2025-09-15 11:14:54 +02:00
sze2st
33fe208338
Update windows/src/desktop/setup/Keyman.Setup.System.SetupUILanguageManager.pas
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-09-15 10:17:15 +02:00
sze2st
b4fbe54d73
Update windows/src/desktop/setup/Keyman.Setup.System.SetupUILanguageManager.pas
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-09-15 10:13:26 +02:00
sze2st
5389795ff3
Update windows/src/desktop/setup/Keyman.Setup.System.SetupUILanguageManager.pas
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-09-15 10:12:06 +02:00
sze2st
c5099bfceb
Update windows/src/desktop/setup/Keyman.Setup.System.SetupUILanguageManager.pas
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-09-15 10:09:42 +02:00
sze2st
45f0686adb
Update windows/src/desktop/setup/Keyman.Setup.System.SetupUILanguageManager.pas
Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-09-15 10:05:52 +02:00
Darcy Wong
390a5bc6db docs(windows): Update supported Unicode version 2025-09-11 11:35:40 +07:00
Marc Durdin
377b1056ec maint(resources): rename KEYMAN_VERSION_FOR_PR_FILENAME
Address review comment from #14703.

Test-bot: skip
Build-bot: skip
Relates-to: #14703
Relates-to: #10521
2025-09-10 11:17:41 +02:00
Marc Durdin
50f86cfbf7
Merge pull request #14703 from keymanapp/maint/android/10521-use-versioned-filenames-for-pr-artifacts
maint(android): use versioned filenames for PR artifacts
2025-09-10 11:15:02 +02:00
Marc Durdin
e425de71af
Merge pull request #14702 from keymanapp/maint/windows/10521-use-versioned-filenames-for-pr-artifacts
maint(windows): use versioned filenames for PR artifacts
2025-09-10 11:14:51 +02:00
rc-swag
2c34a7f1d4
Merge pull request #14644 from keymanapp/fix/windows/14578/waitingrestart-idle-kmshellcontinue
fix(windows): kmshell continues when sm is in waitingrestart  and returns to idle
2025-09-10 11:09:42 +10:00
rc-swag
96507a433b
update(windows): review comment
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-09-09 21:00:49 +10:00
rc-swag
4d38b254e5 fix(windows): fix confusing code comments 2025-09-09 12:04:16 +10:00
Marc Durdin
634fef64d4 maint(android): use versioned filenames for PR artifacts
Relates-to: #10521
Test-bot: skip
Build-bot: skip release:android,developer,windows
2025-09-08 12:31:11 +02:00
Marc Durdin
e6d9d8c32a maint(windows): use versioned filenames for PR artifacts
Relates-to: #10521
Test-bot: skip
Build-bot: skip release:windows
2025-09-08 10:20:42 +02:00
EberhardSchweizer07@gmail.com
1b18514f3e fix(windows): add ssLanguageNameInEnglish and use it for sorting/displaying in setup's ComboBox 2025-09-06 21:19:36 +02:00
rc-swag
9229d1c76a fix(windows): remove cached files in idle state
First run event is actually called from the setup installation package
this means the setup file will be locked and will not be removed
by the first run event. Therefore we need to remove the cache files
in idle state when we get kmshell events. This seems excesive but we
need to do it for the reason explained.

Fixes: #14577
2025-09-04 15:09:31 +10:00
rc-swag
3ea8756192 fix(windows): refactor ReadyToInstall
It became apparent that we need to abort the "waitingtorestart" state
before promting the user if they want to install. Otherwise it is
confusing as to why nothing happens and Keyman just starts.
In doing that it was easier to refactor ReadyToInstall to validate the
cache, and check that automatic updates was still set.
It can now also trigger an abort clearing the cache and returning to
idle. This has slight flow on effect in that the HandleKMShell event
can still be called following in the exectution flow.
2025-09-04 14:30:12 +10:00
Eberhard Beilharz
e615139348
Merge pull request #14669 from keymanapp/chore/windows/desktop 2025-09-03 11:53:46 +02:00
Marc Durdin
f420f15567 docs(common): update license date and owner
Fixes: #14665
Test-bot: skip
Build-bot: skip
2025-09-02 16:13:36 +02:00
Eberhard Beilharz
f166f11d14
docs(common): update docs Keyman Desktop → Keyman for Windows
Also change path to engine help pages. This requires a corresponding
change in help.keyman.com.

Test-bot: skip
2025-09-02 14:29:53 +02:00
rc-swag
c6a207ac76
Merge branch 'master' into fix/windows/14578/waitingrestart-idle-kmshellcontinue 2025-09-02 14:23:54 +10:00
Marc Durdin
7084eb25b5 maint(windows): for build buildlevel, do not publish artifacts
Build-bot: skip build:windows
Test-bot: skip
2025-09-01 06:06:47 +02:00
rc-swag
017a26435e fix(windows): continue when waitingrestart return to idle
When waiting restart on a handlekmshell event and returning to idle
kmshell execution should continue
2025-08-29 15:45:50 +10:00
Marc Durdin
52310ce6d0
Merge branch 'master' into fix/windows/dont-prompt-updates-off 2025-08-25 05:06:43 +02:00
Marc Durdin
00b98f2286 fix(windows): emit nunit report path correctly and update TeamCity links
* Windows and Developer sources
* Fixes the report path to be fully qualified
* Adds the TeamCity report logger to remaining DUnitX automated tests

Fixes: #14197
Build-bot: skip build:windows,developer
Test-bot: skip
2025-08-20 07:21:03 +02:00
Marc Durdin
81c807c257 chore(common): Merge branch 'master' into maint/common/14453-move-ci-scripts 2025-08-19 10:46:11 +02:00
rc-swag
aadfe4c7cc
fix(windows): commit review suggestions
Co-authored-by: Marc Durdin <marc@durdin.net>
2025-08-19 14:01:18 +10:00
Marc Durdin
a81138c62b
Merge pull request #14449 from keymanapp/maint/common/14065-consolidate-builder-scripts
maint(common): consolidate builder scripts 🐸
2025-08-12 10:41:09 +07:00
Marc Durdin
f95b26ac1f
Merge pull request #14446 from keymanapp/maint/common/14275-rename-and-cleanup-shellHelperFunctions.sh
maint(common): rename shellHelperFunctions.sh to utils.inc.sh 🐸
2025-08-12 10:40:59 +07:00