Changes:
- A system for latching and locking views
- Some crash fixes
- Locale-flavored terminals
- A way to add locale-flavored emoji and numbers layouts
- Making the code less annoying to work with in some places
- Fixed layout changes on newer GSettings
- Mod4 modifier
- Better session registration
- New layouts: Dvorak, Colemak wide, hebrew, wide Thai
Layout type switching outside of overlay was always done with gsettings in the middle, assuming that all clicks on languages in the popover result in a gsettings event. That's a bad assumption if there's only one xkb lang present.
This is a simple work around. A better solution would be to turn the entire system of layout switching into a central object that receives messages about changes that need to be applied, and then applies them.
From now on, all the parameters for loading layout are handled inside a single pure function, which makes them possible to test.
As a side benefit, the old preference order function composed of a mess of nested procedures is gone.
There are some hacks here in the form of an extra field "appears_locked_from", which can be used to hint that the user should see the button as locked. Without it, there's some confusion on user side regarding buttons that change states unprompted.
Geometry is now permanently married to the widget rather the renderer. While geometry is not always defined, C doesn't support sum types, so checks won't be enforced by the compiler. It's OK to pretend there's always some geometry to avoid crashes.
User-visible changes:
- Fixed a crash related to making keyboard visible.
- Better fallback: when selecting a missing layout named "fr+foo", "fr" will be used instead.
- When enabling the keyboard manually, it will never be stuck in the numbers view.
- Thai layout
- US-Colemak layout
- Czech layouts
- Esperanto layout
- Bulgarian layout
- Improved Norwegian layout
That's a lot of new layouts!
Plus a bunch of stricter warnings, MIPS64el support, and reproducible building.
The viibility manager state is changed from various handlers, which are not guaranteed to be reentrant, most notably the Wayland handler for preedit done.
As the state is changed, relevant requests to synchronize user-visible UI are fired from the same handler.
In case of imservice_handle_done, GTK widget show function was being called, which triggered another round of handling Wayland, leading to the done handler being called again, and flaking out.
To solve this, the phase of issuing commands needs to be separate from adjusting desired state. It seems that the easiest solution is to delay the show() and hide() calls into the next GTK main loop spin.
A better solution would probably inject itself directly after the change of desired state, so that *all* the side effects are delayed.
It didn't make anything more testable due to being tightly coupled to Layout.
With the last place needing the curent form abolished, it's no longer needed.
No attempt to make it more stateless and unit-testable was made though.
The goal is to be free of unused X class of problems. For this, CI and any "serious" builds will fail on warnings. Debug builds, used in development, will warn by default but not fail.
In addition, the 'strict' build option is added for when the debug build should fail on unused warnings as well.
The builtin file path is embedded in the binary and subject to substitution, which makes it invalid when trying to build a .deb reproducibly.
Out of the two solutions, it's easier to make the change here rather than customize .debu building not to run tests reproducibly.
With the policy being disentangled from application, it becomes testable.
This prepares for moving the entire visibility mechanism to the new class and taking away more pieces of ServerContextService.
In addition, this is a good warmup before trying to implement sizing policy.
- Xwayland support
- Keys' press zone extends to the side edges of the widget
- Layout popover separates languages from special layouts
- Popover can open settings
- Keyboard is invisible when GNOME accessibility setting is off
- Layout tester checks for presence of Backspace and Return
- Adjusts the keyboard size better to tablet-sized displays
- Friulian keyboard layout
- Ukrainian layout
- Belgian layout
- Wide French layout
- Wide Belgian layout
- Wide terminal layout
- Improved tutorial
- Improved README
- Stricter compilation checks
- Minor fixes
The `eek/layersurface.c` file should be excluded because it's an imported, "foreign" source, but clang-tidy doesn't seem to have an annotation for that.
An alternative would have been to exclude it in Meson and do the check there, but that requires clang-tidy, raising the barrier to contribute of Squeekboard even more (it already requires libfeedback, which isn't packaged widely).