Commit graph

32731 commits

Author SHA1 Message Date
Marc Durdin
00d0ef5e28
Merge pull request #15246 from keymanapp/chore/windows/add-wow64kbd-explorer
chore(windows): add wow64kbd support app for researching WOW64 reqs
2025-11-28 10:48:59 +01:00
Marc Durdin
1a0156bff8
Merge pull request #15245 from keymanapp/refactor/windows/syskbd
refactor(windows): merge syskbdnt.cpp and syskbdnt64.cpp into RightAltEmulationCheck.cpp
2025-11-28 10:48:49 +01:00
Marc Durdin
0949484a18
Merge pull request #15244 from keymanapp/change/windows/add-unit-tests-to-keyman32-build
change(windows): add unit testing to keyman32 build
2025-11-28 10:48:38 +01:00
Marc Durdin
ff984c8144
chore: Update windows/src/engine/keyman32/RightAltEmulationCheck.cpp
Build-bot: skip

Co-authored-by: rc-swag <58423624+rc-swag@users.noreply.github.com>
2025-11-28 10:26:07 +01:00
Marc Durdin
ec8908ecc7 chore(windows): add wow64kbd support app for researching WOW64 reqs
This app reports on WOW64 identification function results, and reports
on kbdxx.dll file alignment by printing a hex dump of the first 44 bytes
(which is the 32 bit size of the structure). Manual review of the hex
dump should be possible to determine if we have the expected alignment,
which should be 32 bit on a 32 bit Windows installation, but 64 bit on
any 64 bit other Windows installations, even with a 32 bit process.

wow64kbd is not included in the normal build. Build when needed; you can
copy entire folder to a target computer and run `run.bat` to get a full
report.

`./build.sh test` will also run the same test on the local machine.

Test-bot: skip
Build-bot: skip
2025-11-27 11:06:01 +01:00
Marc Durdin
404a9ea244 refactor(windows): merge syskbdnt.cpp and syskbdnt64.cpp into RightAltEmulationCheck.cpp
Remove a number of unused bits and pieces, and merge the one remaining
function in syskbdnt.cpp, `KeyboardGivesCtrlRAltForRAlt` with the
corresponding function in syskbdnt64.cpp.

Add a unit test for `ReadAltGrFlagFromKbdDll` to ensure that it is
working correctly across various architectures.

Test-bot: skip
2025-11-27 09:37:59 +01:00
Marc Durdin
ca77e41d74 change(windows): add unit testing to keyman32 build
Rename keyman-engine-tests.vcxproj to keyman32.tests.vcxproj, move up a
folder, rename other files to match test filename conventions, update
vcxproj for vs2022, and build and run this from build.sh:test.

Also remove keyman-engine.vcxproj, instead integrating the static lib
version of keyman32 into keyman32.vcxproj. One day in the future, we
could split back the other way, and have the DLL be essentially a link
action from the .lib, but that's higher complexity to setup.

Add a configuration step to install NuGet packages for Google Test
specifically for keyman32.tests.vcxproj. If we add Google Test to other
msbuild projects, we could move the packages/ up to top level of the
repo in the future (similar to node_modules) to reduce number of
configuration downloads.

Build-bot: skip build:windows,developer
Test-bot: skip
2025-11-27 09:11:39 +01:00
Keyman Server
a45d6db423
Merge pull request #15241 from keymanapp/auto/version-master-19.0.167
auto: increment master version to 19.0.167
2025-11-26 19:02:39 +01:00
Keyman Build Agent
95c17494ec auto: increment master version to 19.0.167
Test-bot: skip
Build-bot: skip
2025-11-26 12:01:34 -06:00
Marc Durdin
4dd066443a
Merge pull request #15236 from keymanapp/fix/windows/15233-debugging-message-separators
fix(windows): escape backslashes in path in debugging message
2025-11-26 06:43:29 +01:00
Marc Durdin
565af2d30e fix(windows): escape backslashes in path in debugging message
Fixes: #15233
Test-bot: skip
Build-bot: skip
2025-11-26 05:53:02 +01:00
Darcy Wong
9c9696c5fd
Merge pull request #15224 from keymanapp/chore/android/clarify-pr-title
chore(android): Clarify PR title for #15136
2025-11-24 11:33:50 +07:00
Darcy Wong
dfa9695e07 chore(android): Clarify PR title for #15136 2025-11-24 11:06:04 +07:00
Keyman Server
aafe5a1311
Merge pull request #15221 from keymanapp/auto/version-master-19.0.166
auto: increment master version to 19.0.166
2025-11-21 19:03:50 +01:00
Keyman Build Agent
2066c6a76b auto: increment master version to 19.0.166
Test-bot: skip
Build-bot: skip
2025-11-21 12:02:06 -06:00
Marc Durdin
32db754209
Merge pull request #15179 from keymanapp/fix/windows/8064-low-level-hook-watch-dog
fix(windows): reinstall low level keyboard hook if it gets removed
2025-11-21 10:40:40 +01:00
Marc Durdin
eb4b10996d
Merge pull request #15087 from keymanapp/fix/developer/11363-prevent-race-on-server-load-kmw
fix(developer): avoid race in page.onload vs kmw.init in Server
2025-11-21 10:39:43 +01:00
Shawn Schantz
323a2f99fc
Merge pull request #14972 from keymanapp/chore/mac/key-trace-log
chore(mac): add keyTrace log
2025-11-20 13:26:25 -05:00
Keyman Server
b6d6514840
Merge pull request #15213 from keymanapp/auto/version-master-19.0.165
auto: increment master version to 19.0.165
2025-11-20 19:03:47 +01:00
Keyman Build Agent
47ec9106b9 auto: increment master version to 19.0.165
Test-bot: skip
Build-bot: skip
2025-11-20 12:01:36 -06:00
Marc Durdin
513c625e33
Merge pull request #15194 from keymanapp/feat/windows/15192/upgrade-wix-3-14-1
feat(windows): update wix to 3.14.1
2025-11-20 11:08:18 +01:00
rc-swag
85dcdcf066 feat(windows): update wix to 3.14.1
Update the WiX toolset build version to 3.14.1 for Arm64.

Fixes: #15192
2025-11-20 15:35:46 +10:00
Marc Durdin
c3915928a6 chore(windows): use MultiThreaded library for fakefreeze 2025-11-19 06:28:04 +01:00
Keyman Server
5f3c4158ca
Merge pull request #15180 from keymanapp/auto/version-master-19.0.164
auto: increment master version to 19.0.164
2025-11-17 19:05:49 +01:00
Keyman Build Agent
6a2a59510e auto: increment master version to 19.0.164
Test-bot: skip
Build-bot: skip
2025-11-17 12:02:17 -06:00
Marc Durdin
ef64af0155
Merge branch 'master' into fix/windows/8064-low-level-hook-watch-dog 2025-11-17 17:07:23 +01:00
Marc Durdin
62570d9284
Merge pull request #15176 from keymanapp/fix/mac/10201-detach-force
maint(mac): handle hdiutil detach failure correctly in make-km-dmg.sh
2025-11-17 17:02:53 +01:00
Marc Durdin
89597cf8a2
Merge pull request #15156 from keymanapp/fix/windows/handle-keyman-root-forward-slash
fix(windows): handle forward slash for KEYMAN_ROOT env var
2025-11-17 17:02:41 +01:00
Marc Durdin
149aef4cb5
Merge pull request #15163 from keymanapp/change/windows/use-circular-buffer-for-logging
change(windows): use circular buffer for logging
2025-11-17 17:02:34 +01:00
Marc Durdin
6e470efa3e
Merge pull request #14799 from keymanapp/change/windows/include-map2pdb-for-relevant-projects
change(windows): include map2pdb generation for relevant Delphi projects
2025-11-17 17:02:25 +01:00
Marc Durdin
2631353564
Merge pull request #15151 from keymanapp/fix/windows/stop-outputting-debug-strings-from-dllmain
fix(windows): disable OutputDebugString from DllMain
2025-11-17 17:02:15 +01:00
Marc Durdin
fd0cdf153d
Merge pull request #15150 from keymanapp/fix/windows/handle-exception-in-exception-handler
fix(windows): handle exceptions when walking stack in exception handler
2025-11-17 17:02:06 +01:00
Marc Durdin
711541be60 fix(windows): reinstall low level keyboard hook if it gets removed
This change improves the stability of Keyman for Windows by monitoring
the health of the low level keyboard hook. If keyman.exe is unresponsive
at any time, Windows can silently uninstall its low level keyboard hook,
which results in (at least) two problems:

* Keyman's hotkeys stop working
* A modifier key can become stuck, if it was pressed around the time
  Keyman became unresponsive.

The most common scenario in which Keyman can become unresponsive is high
system load, e.g. rendering graphics, videoconference calls, compiling
software.

Restarting Keyman always resolved both of these two issues in the past,
but with this patch, I hope that this will no longer be necessary.

A related 'fakefreeze' project is included for simulating a keyman.exe
hang by posting a `wm_keyman_control:KMC_WATCHDOG_FAKEFREEZE` message to
it, which keyman.exe responds to by `Sleep()`ing for 5 seconds. While
keyman.exe is freezing, any keystroke will cause the low level hook to
be uninstalled by Windows.

Logging has been updated; look for "LowLevelHookWatchDog" in the log for
related events.

One final small change in keyman32.cpp, as I refactored the
WH_KEYBOARD_LL hook installation/uninstallation, was to always clear out
hook variables when uninstalling a hook, because if the hook fails to
uninstall, there's really nothing we can do about it anyway, and we
probably shouldn't be trying again.

Fixes: #8064
2025-11-17 16:30:43 +01:00
Eberhard Beilharz
9e991a14e0
Merge pull request #15133 from keymanapp/chore/linux/cherry-pick/changelog 2025-11-17 08:32:41 +01:00
Marc Durdin
9940de591c maint(mac): handle hdiutil detach failure correctly in make-km-dmg.sh
Fixes: #10201
Test-bot: skip
Build-bot: skip release:mac
2025-11-15 06:57:22 +01:00
Keyman Server
e69b168c35
Merge pull request #15174 from keymanapp/auto/version-master-19.0.163
auto: increment master version to 19.0.163
2025-11-14 19:07:37 +01:00
Keyman Build Agent
9eb41504c9 auto: increment master version to 19.0.163
Test-bot: skip
Build-bot: skip
2025-11-14 12:03:41 -06:00
Eberhard Beilharz
a579d7185b
Merge pull request #15172 from keymanapp/maint/linux/15171_debpkg
maint(linux): free disk space before running autopkgtests

Running the autopkgtests during a Ubuntu packaging build GHA recently started to fail with an out-of-disk-space error. This change removes some large directories with tools that we don't need for the autopkgtests.

We could delete some more that are not quite as big, but this gives us more than enough space and saves a bit of build-time.

Fixes: #15171
2025-11-14 18:45:26 +01:00
Eberhard Beilharz
6fe3e3e8ba
maint(linux): free disk space before running autopkgtests
Running the autopkgtests during a Ubuntu packaging build GHA recently
started to fail with an out-of-disk-space error. This change removes
some large directories with tools that we don't need for the autopkgtests.

Fixes: #15171
Build-bot: skip
Test-bot: skip
2025-11-14 18:23:49 +01:00
Eberhard Beilharz
ef64529300
Merge pull request #15159 from keymanapp/fix/web/defaultpath
fix(web): improve determination of default path

Browser extensions can dynamically insert scripts into a web page, so it's possible that the last script is not what we expected, which can cause the path to the script to be wrong. This change fixes the determination of the default path by using the `document.currentScript` property. It also replaces the use of the deprecated `substr` function in those places.

Fixes: #15158
2025-11-14 14:50:44 +01:00
Marc Durdin
57c0fa3d03
Merge pull request #15129 from keymanapp/maint/resources/builder_launch
maint(resources): add `builder_launch` function
2025-11-14 14:24:19 +01:00
Marc Durdin
8f95d84014
Merge pull request #15114 from keymanapp/maint/resources/builder-timing
maint(resources): add build timing report to builder
2025-11-14 14:24:11 +01:00
Marc Durdin
7d6e04f9ac
Apply suggestions from code review
Build-bot: skip
2025-11-14 13:58:16 +01:00
Eberhard Beilharz
fc04e2445b
fix(web): address code review comments
Deal with `currentScript` being null/undefined.
2025-11-14 12:35:59 +01:00
Marc Durdin
0988a86fa4 maint(resources): improve builder_launch to allow for arbitrary parameters
Also cleans up reporting of child scripts and links the list of reserved
parameters across a few locations. Address review comments.
2025-11-14 10:44:35 +01:00
Eberhard Beilharz
5783ec0900
Merge pull request #15157 from keymanapp/chore/linux/14954_resolute
chore(linux): use `devel` for next Ubuntu release

This change moves to use [`devel`](https://hub.docker.com/_/ubuntu#whats-in-this-image) instead of a specific release name for the next Ubuntu release. That way it will always be able to find an image and will automatically start using the next one as soon as it becomes available.

Follow-up-of: #15137
2025-11-14 08:39:53 +01:00
Marc Durdin
bf4d707662 change(windows): use circular buffer for logging
Test-bot: skip
2025-11-14 05:23:32 +01:00
Keyman Server
4922b089e5
Merge pull request #15160 from keymanapp/auto/version-master-19.0.162
auto: increment master version to 19.0.162
2025-11-13 19:03:38 +01:00
Keyman Build Agent
cd4e7c02b9 auto: increment master version to 19.0.162
Test-bot: skip
Build-bot: skip
2025-11-13 12:01:24 -06:00
Eberhard Beilharz
cb1a308418
fix(web): improve determination of default path
Browser extensions can dynamically insert scripts into a web page, so
it's possible that the last script is not what we expected, which
can cause the path to the script to be wrong. This change fixes the
determination of the default path by using the `document.currentScript`
property. It also replaces the use of the deprecated `substr` function
in those places.

Fixes: #15158
Test-bot: skip
2025-11-13 18:41:27 +01:00