wlr_seat_keyboard_notify_key() forwards events to the focused surface but does not maintain the seat keyboard's keycode state, so a key released on a different compositor than it was pressed on (GTK focus moved mid-gesture, e.g. the Enter that creates a new tab) was never delivered and left the client with a stuck key. Track pressed keycodes ourselves on press and release, and on release fan the event out to every compositor that still tracks the key so no seat is left with a stale pressed key. |
||
|---|---|---|
| docs | ||
| examples | ||
| src | ||
| tests | ||
| .gitlab-ci.yml | ||
| CHANGELOG.md | ||
| COPYING | ||
| meson.build | ||
| meson.options | ||
| README.md | ||
Casilda
A simple Wayland compositor widget for Gtk 4 which can be used to embed other processes windows in your Gtk 4 application.
It was originally created for Cambalache's workspace using wlroots, a modular library to create Wayland compositors.
Following Wayland tradition, this library is named after my hometown in Santa Fe, Argentina.
License
Casilda is distributed under the GNU Lesser General Public License, version 2.1 only (LGPL) as described in the COPYING file.
Source code
Source code lives on GNOME gitlab here
git clone https://gitlab.gnome.org/jpu/casilda.git
Dependencies
Manual installation
This is a regular meson package and can be installed the usual way.
# Configure project in _build directory
meson setup --wipe --prefix=~/.local _build .
# Build and install in ~/.local
ninja -C _build install
How to use it
To add a Wayland compositor to your application all you have to do is create a CasildaCompositor widget and pack it as any other widget.
compositor = casilda_compositor_new (NULL);
gtk_window_set_child (GTK_WINDOW (window), GTK_WIDGET (compositor));
gtk_window_present (GTK_WINDOW (window));
The easiest way to show another process window in the compositor is to spawn the process using the helper function provided by Casilda
gchar *argv[] = { "/usr/bin/gtk4-demo", NULL };
casilda_compositor_spawn_async (compositor, NULL, argv, NULL, G_SPAWN_DEFAULT, NULL, NULL, NULL, NULL);
API
Casilda uses gi-docgen to generate it's API reference documentation and is available online.
Contributing
If you are interested in contributing you can open an issue here and/or a merge request here
Contact
You can hang with us and ask us questions on Cambalache Matrix at #cambalache:gnome.org