Commit graph

90 commits

Author SHA1 Message Date
Marc Durdin
deeb246783
Merge pull request #7084 from keymanapp/fix/linux/improvecontext
fix(linux): Improve setting context
2022-10-26 12:34:24 +11:00
Marc Durdin
5321538d1d
Merge pull request #7503 from keymanapp/chore/linux/clearify
chore(linux): call `reset_context` instead of `...focus_in`
2022-10-25 06:23:42 +11:00
Eberhard Beilharz
7b3f891eb9
chore(linux): Rename internal method to commit_string
The previous method name `ibus_keyman_engine_commit_string`
suggests that this method is overridden from ibus-engine class.
However, while it is true that ibus-engine has a
`ibus_engine_commit_string` method it can't be overridden. This
change renames the method to make it clearer that this is an internal
method that won't be called by ibus.
2022-10-20 09:34:28 +02:00
Eberhard Beilharz
e529052dc5
chore(linux): call reset_context instead of ...focus_in
Both `ibus_keyman_engine_reset` and `ibus_keyman_engine_focus_in`
are methods that get called by ibus. Having `ibus_keyman_engine_reset`
call `ibus_keyman_engine_focus_in` makes it much harder to see in
log files which methods get really called by ibus.

This change replaces the call of `...focus_in` with `reset_context`,
which is what `...focus_in` does as well. The only other thing that
`ibus_keyman_engine_focus_in` does in addition to that is calling
`ibus_engine_register_properties` - which shouldn't be necessary on
a reset (besides that we don't seem to do anything with the one
status property we register).
2022-10-20 09:22:11 +02:00
Eberhard Beilharz
cfe0998b2e
refactor(linux): Comment unused methods
Closes #7297.
2022-10-20 09:06:27 +02:00
Eberhard Beilharz
448baad79d
refactor(linux): Replace tabs with spaces 2022-10-20 09:02:48 +02:00
Eberhard Beilharz
d4283754df
refactor(linux): Refactor alignment of params 2022-10-20 09:02:48 +02:00
Eberhard Beilharz
2dab491a10
chore(linux): Always output function name in debug messages 2022-10-20 08:56:58 +02:00
Eberhard Beilharz
2663aa738c
chore(linux): Improve debug output 2022-10-20 08:56:36 +02:00
Eberhard Beilharz
f4410616e8
fix(linux): Fix tests
The previous changes didn't work when we output a character +
deadkey. In response to outputting the character we get a
`ibus_keyman_engine_set_surrounding_text` call in which we
called `reset_context` which removed the deadkey marker. This change
fixes this problem by comparing the surrounding text with the
context we already have. Only if it's different we reset the
context.
2022-10-17 20:27:04 +02:00
Eberhard Beilharz
696f683d0e
chore(linux): address code review comments 2022-10-13 11:13:28 +02:00
Eberhard Beilharz
d2262f2223
refactor(linux): Some refactorings
- adjust indentation of `reset_context`
- move variable definition to block where they're used
- make use of method to detect surrounding text support
2022-10-12 21:19:10 +02:00
Eberhard Beilharz
bad0feea9b
fix(linux): Improve setting context
This change always gets the context from the surrounding text
if `reset_context` gets called. This helps when the user puts the
IP after a certain character. Previously we basically lost the
context, with this change we restore the context so that it's like
the user just typed the previous characters.
2022-10-12 21:14:26 +02:00
Eberhard Beilharz
bcd29634bf
feat(linux): Address code review comments
Co-authored-by: Marc Durdin <marc@durdin.net>
2022-10-11 18:44:30 +02:00
Eberhard Beilharz
908dfbeefb
feat(linux): Optimize if surrounding text is supported
Only send fake event if client does not support surrounding text.
2022-10-11 18:44:30 +02:00
Eberhard Beilharz
e6601f205c
feat(linux): match state of original event when creating fake event
We forward a fake event for both keydown and keyup. This change
will set the flag on the fake event so that we get keydown and keyup.
This is probably not technically necessary, but it helps in
debugging because you can then see that both fake events still
belong to the same keypress.
2022-10-11 18:44:30 +02:00
Eberhard Beilharz
dba2002287
feat(linux): Still support older ibus versions
If we're dealing with an older ibus version that doesn't have the
necessary patches we fall back to the old behaviour. Otherwise
we use the new output reordering.
2022-10-11 18:44:29 +02:00
Eberhard Beilharz
e1d4169eeb
feat(linux): Optimizations 2022-10-11 18:44:29 +02:00
Eberhard Beilharz
18d0711ff3
fix(linux): Fix reordering of output
This change implements a commit queue which allows to control the
order of the output. This ensures that any backspace we generate
will be processed before the character we're adding.

Requires changes in ibus (surrounding text fix (see #7072) and
prefilter change)

Fixes #1489, #4028, #4029, #4030, #4505, #5510, #6639
2022-10-11 18:44:28 +02:00
Eberhard Beilharz
efbfaa1be4
chore(linux): Cleanup unnecessary surrogate check
Previously `process_unicode_char_action` checked for
`action_item->character` being a surrogate. This should never happen
because `action_item->character` is a 32-bit character. This change
removes the unnecessary check and the `keyman->firstsurrogate` field.

Fixes #6385.
2022-10-04 19:24:58 +02:00
Eberhard Beilharz
af6c6db49a
chore(linux): Remove unused IBusLookupTable 2022-09-15 18:53:44 +02:00
Eberhard Beilharz
7169723d54
fix(linux): Remove wrong ok_for_single_backspace method
The implementation of `ok_for_single_backspace` checked the current
action_item multiple times. However, we already know that that
item is `KM_KBP_IT_BACK` because the only place this method gets
called is from the `process_backspace_action` method. So basically
this method always returns `FALSE`. "Fixing" this method to check
the next action_items makes things fail.

Removing this method since it doesn't do anything except burn
processing cycles...

Fixes #5614.
2022-08-25 18:38:06 +02:00
Eberhard Beilharz
aa7537730a
feat(linux): Allow to run ibus tests on Wayland
This change modifies the `run-tests.sh` script so that tests
run on both Wayland (if supported) and X11 unless
`--no-wayland` or `--no-x11` is specified.

This change also adds the new argument `--wayland` to the
`ibus-keyman-tests` executable which runs the tests under
Wayland.

Note that running Wayland tests is only possible in Ubuntu 21.10+
because it requires a version of `mutter` that supports the
headless option which got added in mutter 40.
2022-03-31 17:52:50 +02:00
Eberhard Beilharz
d9e4ad7899
feat(linux): add support for Wayland
This allows to use Keyman with the Wayland display server.
One thing that doesn't yet work completely with this change is
caps-lock.

Partially implements #4273.
2022-01-20 19:21:57 +01:00
Eberhard Beilharz
cdee19e953
chore(linux): Add integration tests for ibus-keyman
This change adds integration/regression tests for ibus-keyman. It
re-uses the unit tests that we have for core.

Also modifies one test so that the context doesn't use characters
used in the keyboard. This makes it easier to setup in ibus-keyman
tests.
2021-11-04 09:22:28 +01:00
Eberhard Beilharz
db5b9db23b
refactor(linux): Remove unused variables 2021-11-03 19:05:43 +01:00
Eberhard Beilharz
29451ac5e8
chore(linux): Extract keycode_to_vk[] to separate header file
This will allow to use the array in unit tests.

# Keyman Conventional Commit suggestions:
# - Consider appending the text ". Fixes #5613" to your commit message.
2021-10-29 18:22:56 +02:00
Eberhard Beilharz
f0c3280517
fix(linux): Fix lost context after pressing K_SHIFT
This fixes typing `n>` with sil_ipa keyboard which no longer output
the expected `ŋ` because pressing the shift key reset the context.

For modifier key presses we now exit `KMX_ProcessEvent::ProcessEvent`
early.

This change also removes a redundant line from engine.c. Clearing
the context happens in `reset_context()` again if necessary.

Fixes #5591.
2021-08-18 19:26:45 +02:00
Eberhard Beilharz
c9497fd494
feat(common/core): Implement shiftFreesCaps and capsOnOnly 2021-08-06 16:13:58 +02:00
Eberhard Beilharz
cfeb9e820e
chore(linux): Implement Linux side of caps-lock action processing 2021-08-06 12:20:23 +02:00
Eberhard Beilharz
77d0d96480
refactor(linux): Reformat keycode_to_vk table
Also update comment where these values come from.
2021-08-04 12:00:36 +02:00
Marc Durdin
5a94012f01
Merge branch 'chore/common/core/debug-additional-tests' into chore/common/core/5488-delete-markers-reliably 2021-07-27 08:23:24 +10:00
Marc Durdin
796a2d4c85 chore(common/core): handle deletion of markers in actions
Fixes #5488.

This updates Keyman Core, corresponding tests, and Keyman Engine for
Linux to support deletion of markers through an action, ensuring that
the action queue does not desynchronize with the context.
2021-07-26 15:23:20 +10:00
Eberhard Beilharz
0eca43d4ea
feat(common/core): Implement capsAlwaysOff system store
This change implements the core part in a way that makes the tests
pass. This still needs corresponding changes in the engine.
2021-07-23 10:25:28 +02:00
Eberhard Beilharz
ec03190f89
refactor(linux): reformat code 2021-07-20 10:07:42 +02:00
Eberhard Beilharz
de1d345408
refactor(linux): Re-add lost keys 2021-07-09 16:18:28 +02:00
Eberhard Beilharz
cda195390b
refactor(linux): Refactor processing actions in separate methods 2021-07-08 18:30:16 +02:00
Eberhard Beilharz
c401640c8a
chore(linux): Fix warnings 2021-06-14 17:39:05 +02:00
Eberhard Beilharz
01a9c36d53
fix(linux): Fix Caps Lock
Closes #4542.
2021-05-11 17:51:01 +02:00
Eberhard Beilharz
044e53198a
fix(linux): Fix switching to keyboard in middle of line (#4678)
Don't re-set context if it changed because the cursor location was
wrong. When the user switches to the EuroLatin keyboard in the
middle of the line, we're getting a wrong cursor location. This will
be fixed with the next keypress, but it leads to the context string
suddenly having more characters added to the front. If we re-set the
context because it's different now we will loose the information we
previously added to the context.

We now compare the end of the string. If the new context string ends
with the old context string we assume that the cursor position got
updated and don't re-set the context.

This fixes #4678.
2021-03-18 17:29:21 +01:00
Darcy Wong
a148463dca feat(linux): Save new options into DConf 2020-02-01 17:04:09 +07:00
Darcy
12a6d5e95c feat(linux): Start refactoring the dconf utilities 2020-01-31 17:35:49 +07:00
Darcy Wong
c83b390601 feat(linux): Add ability to configure keyboard options 2020-01-31 11:43:58 +07:00
glasseyes
bc2ae0201e fix forwarding backspace 2018-12-19 15:05:53 +07:00
glasseyes
4a80289d80 km_kbp_cp_dispose gone so cast and g_free instead 2018-12-19 13:23:17 +07:00
glasseyes
c7dc14bb13 baselayout kbdus.dll and alt en-US for now 2018-12-18 16:56:42 +07:00
glasseyes
1c1ca42301 baselayout only en-US for now 2018-12-18 15:51:37 +07:00
glasseyes
f2b6b9cf5c default platform and baselayout for linux
baselayout is LANG changed to xx-CC format

also move linux code workspace
2018-12-18 15:49:56 +07:00
glasseyes
b8a199607f wait until END to do EMIT_KEYSTROKE
in case there are other actions like INVALIDATE_CONTEXT after it
2018-12-18 09:10:43 +07:00
glasseyes
4547ed2e49 remove hasonlymarker 2018-12-17 21:44:34 +07:00