Commit graph

402 commits

Author SHA1 Message Date
Marc Durdin
845d65e5e4 chore(windows): remove backup build step
We no longer need to backup debug files as they are saved to the symbol
store during a release build. This reduces the amount of storage
required for a release build and should speed up the build also.

Also fixes the broken build where backup had not been updated for the
new consistent build paths.
2021-07-07 08:09:26 +10:00
Marc Durdin
5246408ac0 chore(windows): make build paths consistent
More iterations on this yak shave.
2021-07-01 10:52:59 +10:00
Marc Durdin
deb01d1a63 chore(windows): make build paths consistent
Move to all projects using bin/ and obj/ for outputs, and
cleanup all Makefiles and project files accordingly. Remove
some obsolete projects along the way. Cleanup .gitignore
also.
2021-07-01 07:38:00 +10:00
Ross
87d35c6d1c fix(common): get handle caller buffer size small than internal Fixes #5336 2021-06-29 16:42:53 +10:00
Ross
30ac134b8a fix(windows): remove dead code in appcontext 2021-06-29 10:50:55 +10:00
rc-swag
3e627a2f1e
fix(windows): apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2021-06-29 10:38:19 +10:00
Ross
9c8c7c9445 fix(windows): update comments for appint.h 2021-06-28 21:50:28 +10:00
Ross
6fc7bade47 fix(windows): AppContext:Get uses BufMax to get maximium buffer size 2021-06-25 15:57:11 +10:00
Marc Durdin
bed0ab2296 chore: remove debug-tests configurations 2021-06-23 11:51:15 +10:00
Marc Durdin
4601dc2fe1 chore(windows): add engine test framework
This is a rudimentary start to having unit tests for keyman32.

At present, it will build only in win32/debug and requires you
to manually run make -DDEBUG beforehand. The tests currently
run in Visual Studio and are not integrated.
2021-06-23 11:48:42 +10:00
Marc Durdin
23122b9fad
Merge pull request #5254 from keymanapp/fix/windows/keymanx64-controller-interface-stability
fix(windows): restore endpoints for interface stability
2021-06-22 14:11:55 +10:00
Marc Durdin
3bf61645f1 chore: cleanup now that build passes 2021-06-16 06:21:12 +10:00
Marc Durdin
4ba6f7cb2b chore(common): cross-platform tweaks 2021-06-16 05:43:09 +10:00
Marc Durdin
3f618d4309 chore: more path cleanups 2021-06-15 04:45:29 +10:00
Marc Durdin
a6dd84052d chore(common): update dependency refs 2021-06-14 06:16:24 +10:00
Marc Durdin
7d77f98279 chore(windows): unreferenced parameters 2021-06-11 06:19:55 +10:00
Marc Durdin
06a92a986f chore(windows): Keyman_PostControllers returns void 2021-06-10 12:28:20 +10:00
Marc Durdin
16ac56f786 chore(windows): def declaration order 2021-06-10 11:21:22 +10:00
Marc Durdin
cda2272ccb fix(windows): restore endpoints for interface stability
Fixes #5245.

Interfaces should remain stable between versions of Keyman, so that an
upgraded kmcomapi.dll or keyman32.dll will not crash older clients, even
if they may not behave entirely as expected.
2021-06-10 11:19:29 +10:00
Marc Durdin
8ca0fc7928 fix(windows): fix common include paths 2021-06-02 13:52:14 +10:00
Marc Durdin
1dbad94d78 fix(windows): makefile paths 2021-06-02 13:52:12 +10:00
Marc Durdin
4a09dd3b48 feat(windows): add common core libraries and includes 2021-06-02 13:52:11 +10:00
Marc Durdin
1b340077b5
Merge pull request #5202 from keymanapp/fix/windows/5196-keymanx64-start-with-shellexecute
fix(windows): start keymanx64 with ShellExecute
2021-06-01 12:13:47 +10:00
Marc Durdin
f29c71d988
Merge pull request #5187 from keymanapp/fix/windows/5166-sentry-dll-handling
fix(windows): sentry.dll version handling
2021-06-01 05:59:26 +10:00
Eberhard Beilharz
b0358509c0
Merge pull request #5169 from keymanapp/fix/linux/issue-5072
fix(common/core/desktop): Fix failing tests on armhf
2021-05-31 14:58:29 +02:00
Marc Durdin
c4d7a6d58c fix(windows): start keymanx64 with ShellExecute
Fixes #5196.

It is complicated to start a `UIAccess=true` process with
`CreateProcess`, so instead we'll use `ShellExecute`. This means passing
a PID instead of a process handle to keymanx64.

I took the opportunity to refactor slightly the main function in
keymanx64, as the failure modes were pretty WET.
2021-05-31 19:26:36 +10:00
Marc Durdin
c9897bb38f fix(windows): cleanup edge cases in k32_load
Matches work completed in #5169 for Keyman Core, kmx_file.cpp.

While this code will hopefully disappear in 15.0, it's good to make sure
we aren't diverging beforehand.

Also tidies up a couple of other cases in `CopyKeyboard` in Keyman Core.
2021-05-31 10:58:23 +10:00
Marc Durdin
733d112d05 fix(windows): swap default for flag 2021-05-29 16:16:14 +10:00
Marc Durdin
9fbcc3fd7b fix(windows): avoid cached hotkey state 2021-05-29 15:41:35 +10:00
Marc Durdin
7235bf2057 fix(windows): sentry.dll version handling
Fixes #5166.

This introduces versioned management of sentry.dll for Keyman for
Windows, Keyman Engine and Keyman Developer. As sentry.dll's ABI is not
backwardly compatible, we have to maintain independent copies of each
DLL for each app.

sentry.dll (or sentry.x64.dll for x64 apps) will be found in the
sentry-0.4.9 folder relative to the running process, except when running
from within the keyman repo tree (based on presence of KEYMAN_ROOT env
var). In those cases, the windows/src/ext/sentry sentry.dll will be
used, allowing us to test new debug time sentry DLLs easily.

A little bit of cleanup and consolidation was also done in the
KeymanPaths.pas unit.
2021-05-28 15:55:06 +10:00
Marc Durdin
e46a3ee46c
Merge pull request #5143 from keymanapp/chore/windows/vs2019
chore(windows): move to vc++ 2019
2021-05-25 19:38:32 +10:00
Marc Durdin
17518ca2ee chore(windows): update headers for mcompile 2021-05-25 18:33:46 +10:00
rc-swag
0fd5f01187
Merge pull request #5119 from keymanapp/docs/windows/5118-windows-keyman-engine-readme
docs(windows): Initial commit - README.md
2021-05-25 16:45:50 +10:00
Marc Durdin
f3ba9445dd chore(windows): update vcxproj for vc++2019 2021-05-25 15:58:48 +10:00
rc-swag
98d802f769
docs(windows): Apply suggestions from code review
Co-authored-by: Marc Durdin <marc@durdin.net>
2021-05-25 08:08:13 +10:00
Ross Cruickshank
4bbd242161 docs(windows): adding README.md to windows/src
Fixes #5118
2021-05-24 10:32:06 +10:00
Marc Durdin
8e435f67d1 chore(windows): cleanup old .dof, .bdsproj and .cfg files
Fixes #519.

I have removed these .cfg, .dof, and .bdsproj files from the primary
projects in the Windows source. There is some ambiguity as to whether
.cfg files are used by the command line compiler (I checked with procmon
and they *are* read by dcc32.exe), so we will need to make sure that
no adverse changes have been made by this. In theory at least, the
.dproj data trumps .cfg data -- and all the projects in question have
a .dproj file -- so this should be a safe cleanup.

I have opted not to touch the /buildutils, /ext, /support and
/test folders at this point.
2021-05-24 10:22:28 +10:00
Ross Cruickshank
f98cef1573 docs(windows): Update windows/engine/readme 2021-05-20 15:37:20 +10:00
Ross Cruickshank
5be6825721 docs(windows): Initial commit - README.md 2021-05-20 13:43:44 +10:00
Marc Durdin
c078661a0f chore(windows): remove unused keymanx64 parameter
With the recent refactor in #5060, we no longer need the main form
window handle parameter in keymanx64.
2021-05-11 16:03:19 +10:00
Marc Durdin
9c01777ece chore: add missing file 2021-05-11 15:51:20 +10:00
Marc Durdin
d26b01ad99 chore(windows): remove KMC_CHANGEUISTATE
The `KMC_CHANGEUISTATE` flag for `wm_keyman_control` is no longer
processed anywhere. Removes it and the `UpdateKeymanUI` function which
called it.

The `#define` for the flag has been left, commented out, to clarify what
would otherwise be a gap in identifiers (use `git blame` to learn more).
2021-05-11 15:19:01 +10:00
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
Marc Durdin
cfea41382c chore(windows): remove unused utilrun unit 2021-05-11 08:38:07 +10:00
Marc Durdin
a6a658e8bc
Merge pull request #5002 from keymanapp/fix/windows/4976-redesign-keymanx64-lifecycle
fix(windows): make keymanx64 responsible for its own lifecycle
2021-05-10 19:46:12 +10:00
Marc Durdin
23505d8e7b chore: remove extra file 2021-05-07 17:19:43 +10:00
Marc Durdin
a23266a6b9 chore: address review comments 2021-05-07 17:17:48 +10:00
Marc Durdin
492394c4f6 chore: address review comment 2021-05-07 17:08:11 +10:00
Marc Durdin
ee6f8590a6 fix(windows): make keymanx64 responsible for its own lifecycle
Fixes #4976.
Fixes KEYMAN-WINDOWS-2K.
Fixes KEYMAN-WINDOWS-3F.
Fixes KEYMAN-WINDOWS-5A.
Fixes KEYMAN-WINDOWS-3E.

This fix reworks keymanx64's lifecycle, moving responsibility for
process shutdown from keyman.exe to keymanx64.exe.

This eliminates the need for interprocess communication, and simplifies
the startup and shutdown of keymanx64.exe. Removing this means that we
can more safely handle situations where two instances of keymanx64 may
be started, as one of them will rapidly terminate when it discovers that
its parent process has disappeared.
2021-04-30 15:02:18 +10:00
Marc Durdin
097ce9ac9a fix(windows): avoid disabling Keyman when speech recognition starts
Fixes #4965.

When speech recognition is enabled, it sometimes activates after a
Keyman keyboard is selected. This would cause Keyman to think it is
being deactivated. We needed to check in
`CKMTipTextService::OnActivated` that it was a keyboard-type TIP that
was being activated, and only deactivate the Keyman hooks in that
situation.

This commit also adds a little logging helper function, and removes an
unused variable `guidActiveProfile`.
2021-04-30 09:04:12 +10:00