Commit graph

99 commits

Author SHA1 Message Date
Marc Durdin
aebfdecf7a chore(windows): breadcrumbs
Some of our Sentry reports are difficult to track down. Adding user
interaction breadcrumbs to Keyman Configuration (to start with) may
simplify this. I may add more breadcrumbs to other projects now that
this is available.
2021-03-16 06:57:57 +11:00
Marc Durdin
d603c77cd7
Merge pull request #4386 from keymanapp/fix/windows/4192-show-balloon-when-keyman-is-already-running
fix(windows): Show balloon when Keyman is already running
2021-02-03 07:08:00 +11:00
Marc Durdin
f83c8ebbe5 fix(windows): Show balloon when Keyman is already running
Fixes #4192.

If Keyman is already running, and the user attempts to start Keyman
again, a balloon will be shown to direct the user to the right place on
the screen.

Note: this worked in earlier versions of Keyman but stopped working due
to name changes for windows in the app.

I have also added a new string for balloon that will need translation.
2021-02-01 16:06:08 +11:00
Marc Durdin
335f06661d fix(windows): remove Show Keyboard Usage hotkey
Fixes #4336.

Removes the "Show Keyboard Usage Page" hotkey entry as it has no effect,
and cleans up Keyboard Usage and OSK Hint strings from all the current
locales.
2021-02-01 07:58:05 +11:00
Marc Durdin
c1aae3a313
Merge pull request #4175 from keymanapp/fix/windows/4013-menu-popup-positions
fix(windows): fix menu popup position
2021-01-14 09:15:38 +11:00
Marc Durdin
3992a34ff4 chore(windows): don't change debug-manifest 2020-12-19 07:50:50 +11:00
Marc Durdin
2dd28f5cc3 fix(windows): ensure win7 compat, extra 2020-12-19 07:49:05 +11:00
Marc Durdin
9e06fc89a5 fix(windows): ensure win7 compat 2020-12-19 07:47:29 +11:00
Marc Durdin
1a80290fee fix(windows): fix menu popup position
Fixes #4013.

This turned out to be a lot more complicated than I expected, mostly due
to limitations in the Windows Shell API with regard to multiple monitors
and per-monitor DPI awareness (which we don't yet do in Keyman -- a
task for another day). Some of the Shell API functions are also
re-entrant, which is dangerous, so I avoided using those.

We now popup the menu relative to the Keyman icon far more precisely
which gives a much nicer feel to the menu interaction.
2020-12-19 07:31:17 +11:00
Marc Durdin
b561dc4721 fix(windows): Use timer-approach to refresh
Another thought: we could also try refreshing every 125msec for 5
seconds after the first change is detected. It's a bit yuck perf-wise
but would probably be pretty transparent to the user.

In testing, this looks good. It means the changes appear as soon as
ready, without substantial delays or performance issues. Polling this
makes me feel a bit dirty, but I'll just take a shower and be okay.
2020-12-17 13:43:31 +11:00
Marc Durdin
f6872e7919 fix(windows): OSK toolbar sync
As Keyman now monitors the Windows keyboard list from Control Panel, it
is no longer sufficient to refresh the toolbar only when a Keyman
keyboard is updated, as at that point Windows has not refreshed its own
language list in the registry. Instead, we need to monitor changes to
the relevant registry key and then refresh when those changes are
'complete'.

There is a problem: there does not appear to be a good way to monitor
for changes to Windows language settings. WM_SETTINGCHANGE is sent when
a language is added by the user in Settings, but the actual change
happens asynchronously, and we are not notified when the changes are
complete.

We also do not get notifications when languages are added via APIs.

Given the async nature of the language profile changes, this leads to
race conditions when we try to refresh the OSK toolbar. My preferred
solution currently is to monitor the relevant key in a separate thread,
and wait 1 second post-changes to actually do the refresh.
2020-12-17 13:23:05 +11:00
Marc Durdin
17b444bff2 fix(windows): Settings refresh management
Fixes #4011.
Fixes #4039.
Fixes #4121.

This change completes the immediate-change model for Keyman
Configuration, by refactoring the refresh of settings out of the render
phase and more appropriately splitting applying and refreshing. It adds
a new message flag for wm_keyman_refresh, KR_SETTINGS_CHANGED, which
uses a random token approach broadcast to all applications on the
desktop to ensure that the refresh is received and multiple
notifications for the same event can be appropriately coalesced.

Most of the files touched are stripping out the refresh flags from the
render phase.

There is one small bug resolved at the same time with the options
properties, which were not reset to default if they had been deleted
from the registry prior to a refresh (see utilkeymanoption.pas).
2020-12-17 10:50:21 +11:00
Marc Durdin
ad932cdb74 fix(windows): menu scroll positions need reset at popup
Fixes #4012.

If the menu previously was scrollable, then it would potentially show
items at the wrong offset because the offsets were not reset when the
menu popup was called if no scroll was needed.
2020-12-15 11:46:30 +11:00
Marc Durdin
80d8169a4e fix(windows): glitch in keyboard menu
Fixes #4112.

Glitch in keyboard menu from scrollable buttons being drawn at top-left.
2020-12-15 11:44:59 +11:00
Marc Durdin
9e46b555d9 fix(windows): Rename to Keyman
Fixes #4003.

This addresses the majority of locations where we use the name "Keyman
Desktop" in code. There will be some filenames and paths that do not
change at this point -- particularly at a source level. For now, the
focus is on the user interface changes.

While making these changes, I also made the VERSION and MANIFEST
resources more consistent.
2020-12-02 09:56:14 +11:00
Marc Durdin
00a9744253 chore(windows): symbol server support, initial steps 2020-11-11 10:33:16 +11:00
Marc Durdin
3d1601ffe5 fix(windows): SizeOfImage header was wrong for dbg
Fixes #3831.

This fixes both issues reported in the bug (dproj changes ensure
separate .tds, and Makefile changes fix order of execution so that
dbg is generated after sentryprep's cleanup).
2020-11-06 17:36:56 +11:00
Marc Durdin
99e44d030a fix(windows): keyboard menu could get out of sync
Fixes #3725.
Fixed #3783.

In some situations, the keyboard menu would either display empty or
would not refresh to get all installed keyboards.
2020-10-30 14:22:20 +11:00
Marc Durdin
929e32601c chore(windows): remove debug code 2020-10-19 16:33:59 +11:00
Marc Durdin
3935699262 fix(windows): tweak scrolling in keyboard menu
Fixes #3694.

The keyboard menu would sometimes scroll too far, which could be
confusing for the end user. This fix stops the scroll once the last
item is in view; it also tweaks the down arrow key handler to ensure
that the current item is correctly scrolled into view.
2020-10-19 16:31:08 +11:00
Marc Durdin
facf94df26 chore: address review comments 2020-10-08 13:59:16 +11:00
Marc Durdin
c655c4eaf5 fix(windows): improve version numbers
Release build executables should have 3 component version numbers with
the version tag appended, e.g. keymandesktop-14.0.155-alpha-local.exe.

Coming later, rename keymandesktop-version.exe to keyman-version.exe.
2020-10-08 09:13:48 +11:00
Marc Durdin
258e4b4eff fix(windows): Some registry keys could have incorrect permissions
Fixes #3665.

On some systems, subkeys of HKCU\Software\Keyman could have incorrect
permissions and these would not be corrected with earlier fixes such as
in #2316. This fix resolves the problem by recursively correcting
permissions on all subkeys, rather than just the top two levels.

This issue caused Metro-style applications (Windows Store apps) to fail
to accept Keyman keyboard input.
2020-10-07 11:50:37 +11:00
Marc Durdin
5f59ee08ec chore(windows): make disabled arrows lighter 2020-09-28 15:05:58 +10:00
Marc Durdin
e34478c173 feat(windows): scrollable keyboard menu
Fixes #1843.

If there are so many keyboards installed that the menu would grow larger
than 3/4 of the screen height, then the menu will become scrollable.
2020-09-28 12:17:00 +10:00
Marc Durdin
d56567735e feat(windows): overflow menu for osk toolbar
Fixes #1659.

If there are too many keyboards to fit in the OSK toolbar, the toolbar
will now show a dropdown menu button and excess keyboards will be
visible there.
2020-09-27 13:07:45 +10:00
Marc Durdin
f08fd6090d fix(windows): hint dialog was blank when elevated
Fixes #3110. The hint dialog must be launched unelevated. Refactors
the UCreateProcessAsShellUser unit into the TUtilExecute class.
2020-09-22 20:04:44 +10:00
Marc Durdin
84f0219541 fix(windows): canonicalization
Reworks the BCP 47 tag canonicalization algorithm.
2020-09-01 08:42:56 +10:00
Marc Durdin
2563624810 fix(windows): more i18n cleanup:
* Remove localedef.dtd file and infrastructure
* Remove ftMessages enum value
2020-07-29 08:03:30 +10:00
Marc Durdin
47254cbd0a fix(windows): i18n of strings in Font Helper 2020-07-29 08:02:48 +10:00
Marc Durdin
39edce5986 feat(windows): generate message consts at build time 2020-07-28 13:05:12 +10:00
Marc Durdin
6b748239ed chore(windows): cleanup of i18n
- remove expandidentifiers
- remove messages.txt
- remove desktop.pot
- remove stock message ditor
- stop using captions altogether for translation
2020-07-27 16:54:23 +10:00
Marc Durdin
6eb516f9d9 chore(windows): more cleanup 2020-05-15 12:46:54 +10:00
Marc Durdin
8ee92d1927 fix(windows): add dependency for keyman.dpr 2020-05-15 08:30:58 +10:00
Marc Durdin
5e7df2e051 fix(windows): sentry cef shutdown interactions
When Sentry is trying to shutdown an app which has CEF windows active,
the main process can hang waiting for the CEF renderer etc processes to
shutdown. Instead, we now rely on the child (CEF renderer etc) processes
to shutdown when their parent process aborts, with a watchdog thread, and
then abandon everything in the parent process with ExitProcess. This is
more reliable, especially with nastier crashes like memory corruption or
stack corruption.
2020-05-08 14:42:39 +10:00
Marc Durdin
fed63d4690 feat(windows): sentry integration test points 2020-03-31 16:16:56 +11:00
Marc Durdin
90f4a5109f feat(windows): report process start to sentry
Also handles -sentry-client-test-exception command line parameter
for console apps and tidies up Sentry instantiation.
2020-03-30 12:21:47 +11:00
Marc Durdin
c33199f6db chore(windows): dprojs 2020-03-30 12:07:41 +11:00
Marc Durdin
9779792059 fix(windows): remove errlogpath and cleanup 2020-03-27 11:23:51 +11:00
Marc Durdin
2121f5ea94 feat(windows): consume new sentry api in delphi projects
Updates Delphi projects to use Sentry API instead of legacy
reporting mechanisms, and strips out existing text-based
reports. Not yet complete: reporting from kmcomapi and
hosted web controls, release number. These are flagged
as build hints.
2020-03-18 17:25:38 +11:00
Marc Durdin
c75aab5886 feat(windows): add paths to syms 2020-03-13 12:38:23 +11:00
Marc Durdin
edfbb4c339 feat(windows): add sentry file prep to build 2020-03-10 21:37:30 +11:00
Marc Durdin
7638b32bc8 feat(windows): asynchronous hint window 2020-02-29 20:08:51 +07:00
Marc Durdin
b71858520a feat(windows): reimplement font helper
Reimplements the font helper in pure Delphi controls.
This avoids the issue we had in the past with embedding
a web browser into the OSK component. As a bonus, the
OSK now opens *substantially* faster, making Keyman feel
a whole lot nicer.
2020-02-24 11:39:20 +07:00
Marc Durdin
7c9b154119 feat(windows): remove all web from keyman
We no longer have any web components in keyman.exe.
Note that font helper is incomplete at this point.
2020-02-23 18:57:00 +07:00
Marc Durdin
55daa5b422 refactor(windows): start move of help and hint
Moves help window and hint window out of keyman
and into kmshell, part 1 of making sure we have
no chromium dependencies in keyman.
2020-02-23 17:49:33 +07:00
Marc Durdin
f15634a9ed chore: Merge branch 'master' into windows-use-chromium 2020-02-22 11:52:23 +11:00
Marc Durdin
666fbc9072 fix(developer): touch layout editor character map integration
Fixes #2577.

The touch layout editor was not accepting characters inserted from
character map by double-clicking or using the menu, only by drag+drop.
2020-02-11 09:04:22 +11:00
Marc Durdin
1ebe2f5fa1 fix(windows): Windows touch keyboard would cancel on each keystroke
Fixes #2450. When Keyman serialized input, it would cause the touch keyboard to cancel
because the touch keyboard thought the received event meant the user was touching the
physical keyboard. This resolves that problem, using a watch timer to check the visibility
of the touch input panel.
2020-02-04 16:18:18 +11:00
Marc Durdin
9209adb45d refactor(windows): cleaned up hotkey change code
Just refactoring minor bits and pieces on this PR. Esp: removed the
unnecessary interrogation of TSF (yay!) and cached the debug flag so it
isn't checked on every single keystroke.
2019-11-20 06:47:44 +11:00