mirror of
https://invent.kde.org/plasma/layer-shell-qt.git
synced 2025-05-25 09:30:22 -04:00
Qt's resizing is inherently synchronous. When an application calls QWindow::setGeometry with a new size, we expect it to make that resize. An expose event of the requested size will be generated. Wayland is by default async, a client requests a size, and then will be configured to that size, or potentially another size. The simplest way to map the two APIs is to roundtrip when the client wants to resize. This way we can guarantee that a call to `setGeometry(); update()` will have the server configured size before the paint. In practice it's still not perfect due to other issues, but at least will sort itself out within a frame. |
||
---|---|---|
.reuse | ||
LICENSES | ||
src | ||
tests | ||
.gitignore | ||
.gitlab-ci.yml | ||
.kde-ci.yml | ||
CMakeLists.txt | ||
LayerShellQtConfig.cmake.in | ||
metainfo.yaml | ||
README.md | ||
README.md.license |
LayerShellQt
This component is meant for applications to be able to easily use clients based on wlr-layer-shell.
Here you can read about what the protocol does and how shells work: https://drewdevault.com/2018/07/29/Wayland-shells.html
Report issues in this component here: https://bugs.kde.org/enter_bug.cgi?product=layer-shell-qt
Usage
CMake
To use it from a CMake project you'll need to:
find_package(LayerShellQt REQUIRED)
Then it will offer us the target LayerShellQt::Interface
that we can link to to get access to this framework.
C++
You can use LayerShellQt::Shell::useLayerShell();
to enable it before any clients are created.
The class LayerShellQt::Window
will give us access to surface-specific settings. We can get it by using LayerShellQt::Window::get(window)
on whatever QWindow
we need to tweak.