layer shell meeting notes

Vlad Zahorodnii vladzzag at gmail.com
Wed Mar 15 15:22:19 GMT 2023


## Intro

- layer-shell: https://wayland.app/protocols/wlr-layer-shell-unstable-v1
- plasma-shell: https://wayland.app/protocols/kde-plasma-shell
- Was challenging to switch to layer-shell in Qt 5 times, but should be 
doable in Plasma 6 and Qt 6.5+


## DesktopView:

- the simplest case, only need to set the appropriate layer and scope + 
handle popups
- complication: can't move DesktopViews between outputs
   - should be fixable by hiding and showing the view like what 
gtk-layer-shell does


## QtWayland shell integration

- annoying requirement on wayland: plasmashell must be able to use 
**both** xdg-shell and layer-shell
- in Qt 6.5, we introduced QWaylandWindow::setShellIntegration() to 
address that
- popups are still an issue even with the new API, we may need more 
changes in QtWayland
- fork xdg-shell shell integration plugin and add necessary layer-shell 
glue code in meanwhile
- https://invent.kde.org/vladz/plasma-shell-integration


## PanelView:

- similar to DesktopView, except
- need to set exclusive zone, currently it's implicitly computed by kwin 
based on org_kde_plasma_surface::set_panel_behavior
- need to auto hide itself (extract panel-auto hiding from the 
plasma-shell protocol in a new protocol or play with margins?)
- complication: can't move PanelViews between outputs
   - should be fixable, e.g. hide() and show() the view

- panels can be dragged
   - as an option: change the ui to match the technical limits
   - another option: create a fake panel window and drag it around instead

- panel can be configured, currently it creates a second window
   - can be a popup
   - or part of the panel window, just set the exclusive zone accordingly
   - or create a new layer surface that's stacked on top of the panel


## yakuake/krunner

- should be an easy one
- the only blocker is that it depends on PanelView being ported to 
layer-shell; otherwise it will ignore struts

- struts handling:
     - wayland: delegate to layer surface
     - x11: read _NET_WM_STRUT_PARTIAL


## PlasmaCore.Dialog

- used by
- task switcher (as a side panel)
- widget explorer (as a side panel)
- osd (floating)
- notifications (the system tray can "push" them to avoid covering them)
- applets (mostly for overlay content)
- task manager's group dialog
- kickoff, system tray, and other panel popups

- sometimes it's used as a toplevel, sometimes it's used as a popup
- when it's used as a popup, it can be interactively resized, i.e. 
applet popups

- already supports some sort of relative positioning, i.e. 
PlasmaCore.Dialog.location, but we need more to match the layer-shell protoc
ol


## Potential ideas

- Introduce window types representing toplevel or popup roles

- New dialog should use semantic/relative positioning exclusively, i.e. 
no absolute x/y coordinates


## plasma-shell protocol

- open under cursor (klipper thing): what should we do?
    - add a new protocol?
    - implement it as a kwin script?
    - implement it as a virtual keyboard thingy?

- open under cursor is similar to application menu
   - application menu is implemented as an external popup because of 
blocking calls in libdbusmenu

- set role: can be reimplemented using layer surface scopes?


## Potential roadmap

- start with rolling out our own xdg-shell integration plugin
- look into porting desktopview and krunner when Qt 6.5 is released 
(https://wiki.qt.io/Qt_6.5_Release in  April)
- port PanelView to the layer-shell protocol, and the kde-screen-edge-v1 
protocol
- roll out new "shiny" Dialog that can co-exist with the old one
   - we can't port plasmashell to new dialog all at once, it's a too 
monumental task
   - create an issue on invent to discuss the potential new api and 
perhaps have a followup call?
- port plasma one by one to the new Dialog
- once plasmashell has been fully ported to the new dialog, drop the old 
one, and drop plasma-shell protocol support in kwin \o/
- panel shadows should be okay as the org_kde_kwin_shadow protocol is 
agnostic about the surface role, we may consider using client-side drop 
shadows in the future though


More information about the Plasma-devel mailing list