| Summary: | Missing Wayland API to access Kwin's "keep above others" and "show on all desktops" | ||
|---|---|---|---|
| Product: | [Frameworks and Libraries] plasma-wayland-protocols | Reporter: | Oded Arbel <oded> |
| Component: | general | Assignee: | KWin default assignee <kwin-bugs-null> |
| Status: | CONFIRMED --- | ||
| Severity: | wishlist | CC: | aleixpol, dashonwwIII, fedin-ilja2010, jlp, kde, kovid, nate, openusr, plasma-bugs-null, r3m1.benoit, vlad.zahorodnii, xaver.hugl |
| Priority: | NOR | ||
| Version First Reported In: | unspecified | ||
| Target Milestone: | --- | ||
| Platform: | Other | ||
| OS: | Linux | ||
| See Also: | https://bugs.kde.org/show_bug.cgi?id=413636 | ||
| Latest Commit: | Version Fixed/Implemented In: | ||
| Sentry Crash Report: | |||
| Attachments: | The full WAYLAND_DEBUG=1 log | ||
|
Description
Oded Arbel
2022-10-22 23:26:49 UTC
Encountering this on Fedora 39. Would greatly appreciate a fix. Small description of the Window Rules workaround (might be useful for those searching): - KDE Settings -> Window Management -> Window rules - use button Detect Window Properties -> choose Yakuake window - name etc. is seen - search for "Keep above other windows" - click to add - define the rule - Description: e.g. yakuake top - Window class (application): org.kde.yakuake - Match whole window class: No - Match window types: All selected - Arrangement and access - Keep above other windows: "Force" + Yes -> Apply Created attachment 180485 [details]
The full WAYLAND_DEBUG=1 log
SUMMARY The wlr-layer-shell implementation in kwin has a bug where if the surface is unmapped by doing: wl_surface_attach(surface, NULL, 0, 0); wl_surface_commit(surface); and then later remapped by doing: wl_surface_commit(surface); no layer shell configure event is sent by kwin. Quoting the spec from https://wayland.app/protocols/wlr-layer-shell-unstable-v1 Attaching a null buffer to a layer surface unmaps it. Unmapping a layer_surface means that the surface cannot be shown by the compositor until it is explicitly mapped again. The layer_surface returns to the state it had right after layer_shell.get_layer_surface. The client can re-map the surface by performing a commit without any buffer attached, waiting for a configure event and handling it as usual. kwin is not sending the configure event at all. This works as expected on sway and hyprland. SOFTWARE/OS VERSIONS Linux/KDE Plasma: KDE Plasma Version: 6.3.4 KDE Frameworks Version: 6.13.0 Qt Version: 6.9.0 ADDITIONAL INFORMATION Extract from the WAYLAND_DEBUG=1 log: [2733789.462] {Default Queue} -> wl_surface#29.attach(nil, 0, 0) [2733789.474] {Default Queue} -> wl_surface#29.commit() [2733792.214] {Default Queue} wl_keyboard#28.leave(1140, wl_surface#29) [2741813.411] {Default Queue} -> wl_surface#29.commit() [2755957.349] {Default Queue} -> wp_fractional_scale_v1#30.destroy() The first line shows the surface being unmapped with a nil buffer and committed. Then one second later, the surface is committed again, nothing is received from kwin for an additional 14 seconds at which point the application quits starting the destroy sequence. Apologies posted to wrong bug report, please ignore. |