Draft: Port to Wayland (Superseded by !103)
See below for some additional hints, in particular the targeted Wayland compositors.
See the messages of commits titled "wayland: *" for details about porting this or that feature. The commit that precedes them allows to start the panel on Wayland without crashing. The preceding commits are prerequisites or preliminary refactoring, which may be cherry-picked to master along the way.
See also:
- https://wiki.xfce.org/releng/wayland_roadmap
- Wayland related threads initiated in July and continued in August on the mailing list: https://mail.xfce.org/pipermail/xfce4-dev/2022-July/date.html
- Wayland thread about Libxfwl: https://mail.xfce.org/pipermail/xfce4-dev/2022-September/033008.html
Approximate to-do list:
-
layer-shell protocol: -
Ability to move the panel -
Set exclusive zones (X11 struts) -
Autohide adaptations (layer-shell part)
-
-
foreign-toplevel-management protocol (partial replacement for Libwnck) -
Autohide adaptations (foreign-toplevel-management part in plain Wayland code) -
Introduce Libxfwl (for now as part of Libxfce4panel) containing Wayland utilities and GObject wrappers for foreign-toplevel-management, see https://mail.xfce.org/pipermail/xfce4-dev/2022-September/033008.html -
Rewrite autohide adaptations using Libxfwl -
Embedded plugins -
showdesktop -
systray -
tasklist -
windowmenu
-
-
-
Ability to run plugins as external (separate processes)
Testing
The two main compositors used for this work are Labwc and Wayfire. My preference is Labwc for its simplicity and development goals, but Wayfire seems to be a better reference implementation for the moment, at least on some points.
The real reference implementation of the Wlroots protocols is probably Sway, but it is a tiling compositor, on which moving the panel works very badly. I don't think we should target this compositor, and I don't think the panel works well on i3 either (see for example #308 (closed)).
Weston is also sometimes useful as a reference implementation of general Wayland protocols, although the panel's functionality there is very limited since it does not implement the Wlroots protocols at all. One can also assume that the panel should do the best it can on a compositor of this type, and at least not crash.
It seems very preferable or even necessary to start the compositor from a tty to make proper tests.
Minimum configurations used for the moment:
Labwc (git-master is required for this issue to be fixed, which affects panel movement; autohide does not work for now, see this issue):
- run by:
XKB_DEFAULT_LAYOUT=fr labwc
-
~/.config/labwc/rc.xml
:<?xml version="1.0"?> <labwc_config> <keyboard> <default /> <keybind key="W-return"><action name="Execute" command="gnome-terminal" /></keybind> </keyboard> </labwc_config>
Wayfire (version used >= 0.7.4):
- run by:
wayfire
-
~/.config/wayfire.ini
:[input] xkb_layout = fr kb_numlock_default_state = true [autostart] 0_environment = dbus-update-activation-environment --systemd WAYLAND_DISPLAY DISPLAY XAUTHORITY [command] binding_terminal = <super> KEY_ENTER command_terminal = gnome-terminal