I'm currently developing a plugin using CLAP. So far, the API seems clean and nice to work with. However. there is a lack of clarification in certain areas. Specifically, the GUI extension suggests support for Wayland plugin windows. Currently, it seems floating windows can be supported, as Wayland doesn't support embedding surfaces between clients. For floating windows, when I receive a clap_window_t in set_transient, what is the expected method of passing the window reference?
Looking around at existing projects, they all only seem to support X11 and not Wayland, so it seems no one has figured that out yet. Maybe Bitwig, but I haven't given it a closer look.
There's currently an experimental Wayland protocol xdg-foreign, which allows clients to export and import toplevels between different clients, for which the compositor generates a sharable string. It additionally provides a method to set the (transient) parent of a surface to the imported toplevel, which is exactly what we need.
The alternative would be to pass the toplevel surface directly, but that requires sharing a connection to the compositor wl_display as well, so it's a bit of a clunky solution. That would additionally allow for window embedding using sub-surfaces.
I'm currently developing a plugin using CLAP. So far, the API seems clean and nice to work with. However. there is a lack of clarification in certain areas. Specifically, the GUI extension suggests support for Wayland plugin windows. Currently, it seems floating windows can be supported, as Wayland doesn't support embedding surfaces between clients. For floating windows, when I receive a
clap_window_tinset_transient, what is the expected method of passing the window reference?Looking around at existing projects, they all only seem to support X11 and not Wayland, so it seems no one has figured that out yet. Maybe Bitwig, but I haven't given it a closer look.
There's currently an experimental Wayland protocol
xdg-foreign, which allows clients to export and import toplevels between different clients, for which the compositor generates a sharable string. It additionally provides a method to set the (transient) parent of a surface to the imported toplevel, which is exactly what we need.The alternative would be to pass the toplevel surface directly, but that requires sharing a connection to the compositor
wl_displayas well, so it's a bit of a clunky solution. That would additionally allow for window embedding using sub-surfaces.