backends/wayland: Port to xdg-decoration-v1
The server-decoration protocol is deprecated, and the clients should use the xdg-decoration-v1 protocol instead. kwin will indicate that it wants server side decoration. If the host compositor insists on client-side decorations, the wayland backend will render no csd. However, this is de-facto state at the moment too, perhaps it can be improved by using libdecor? Regardless, no csd is the current state too, except that both host and nested compositors can enter a loop where one side says to use CSD and the other side says that they want SSD.
This commit is contained in:
parent
be3146873f
commit
bcb38f366d
4 changed files with 20 additions and 23 deletions
|
@ -13,9 +13,9 @@
|
|||
#include <KWayland/Client/registry.h>
|
||||
#include <KWayland/Client/relativepointer.h>
|
||||
#include <KWayland/Client/seat.h>
|
||||
#include <KWayland/Client/server_decoration.h>
|
||||
#include <KWayland/Client/shm_pool.h>
|
||||
#include <KWayland/Client/subcompositor.h>
|
||||
#include <KWayland/Client/xdgdecoration.h>
|
||||
#include <KWayland/Client/xdgshell.h>
|
||||
|
||||
#include <QMutex>
|
||||
|
@ -30,7 +30,7 @@
|
|||
#include "wayland-pointer-constraints-unstable-v1-client-protocol.h"
|
||||
#include "wayland-pointer-gestures-unstable-v1-server-protocol.h"
|
||||
#include "wayland-relative-pointer-unstable-v1-client-protocol.h"
|
||||
#include "wayland-server-decoration-client-protocol.h"
|
||||
#include "wayland-xdg-decoration-unstable-v1-client-protocol.h"
|
||||
#include "wayland-xdg-shell-client-protocol.h"
|
||||
|
||||
namespace KWin
|
||||
|
@ -160,7 +160,7 @@ WaylandDisplay::~WaylandDisplay()
|
|||
m_pointerGestures.reset();
|
||||
m_relativePointerManager.reset();
|
||||
m_seat.reset();
|
||||
m_serverSideDecorationManager.reset();
|
||||
m_xdgDecorationManager.reset();
|
||||
m_shmPool.reset();
|
||||
m_subCompositor.reset();
|
||||
m_xdgShell.reset();
|
||||
|
@ -245,9 +245,9 @@ KWayland::Client::XdgShell *WaylandDisplay::xdgShell() const
|
|||
return m_xdgShell.get();
|
||||
}
|
||||
|
||||
KWayland::Client::ServerSideDecorationManager *WaylandDisplay::serverSideDecorationManager() const
|
||||
KWayland::Client::XdgDecorationManager *WaylandDisplay::xdgDecorationManager() const
|
||||
{
|
||||
return m_serverSideDecorationManager.get();
|
||||
return m_xdgDecorationManager.get();
|
||||
}
|
||||
|
||||
void WaylandDisplay::registry_global(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
|
||||
|
@ -281,9 +281,9 @@ void WaylandDisplay::registry_global(void *data, wl_registry *registry, uint32_t
|
|||
} else if (strcmp(interface, zwp_relative_pointer_manager_v1_interface.name) == 0) {
|
||||
display->m_relativePointerManager = std::make_unique<KWayland::Client::RelativePointerManager>();
|
||||
display->m_relativePointerManager->setup(static_cast<zwp_relative_pointer_manager_v1 *>(wl_registry_bind(registry, name, &zwp_relative_pointer_manager_v1_interface, std::min(version, 1u))));
|
||||
} else if (strcmp(interface, org_kde_kwin_server_decoration_manager_interface.name) == 0) {
|
||||
display->m_serverSideDecorationManager = std::make_unique<KWayland::Client::ServerSideDecorationManager>();
|
||||
display->m_serverSideDecorationManager->setup(static_cast<org_kde_kwin_server_decoration_manager *>(wl_registry_bind(registry, name, &org_kde_kwin_server_decoration_manager_interface, std::min(version, 1u))));
|
||||
} else if (strcmp(interface, zxdg_decoration_manager_v1_interface.name) == 0) {
|
||||
display->m_xdgDecorationManager = std::make_unique<KWayland::Client::XdgDecorationManager>();
|
||||
display->m_xdgDecorationManager->setup(static_cast<zxdg_decoration_manager_v1 *>(wl_registry_bind(registry, name, &zxdg_decoration_manager_v1_interface, std::min(version, 1u))));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,9 +22,9 @@ class PointerConstraints;
|
|||
class PointerGestures;
|
||||
class RelativePointerManager;
|
||||
class Seat;
|
||||
class ServerSideDecorationManager;
|
||||
class ShmPool;
|
||||
class SubCompositor;
|
||||
class XdgDecorationManager;
|
||||
class XdgShell;
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ public:
|
|||
KWayland::Client::PointerGestures *pointerGestures() const;
|
||||
KWayland::Client::RelativePointerManager *relativePointerManager() const;
|
||||
KWayland::Client::Seat *seat() const;
|
||||
KWayland::Client::ServerSideDecorationManager *serverSideDecorationManager() const;
|
||||
KWayland::Client::XdgDecorationManager *xdgDecorationManager() const;
|
||||
KWayland::Client::ShmPool *shmPool() const;
|
||||
KWayland::Client::SubCompositor *subCompositor() const;
|
||||
KWayland::Client::XdgShell *xdgShell() const;
|
||||
|
@ -72,7 +72,7 @@ private:
|
|||
std::unique_ptr<KWayland::Client::PointerGestures> m_pointerGestures;
|
||||
std::unique_ptr<KWayland::Client::RelativePointerManager> m_relativePointerManager;
|
||||
std::unique_ptr<KWayland::Client::Seat> m_seat;
|
||||
std::unique_ptr<KWayland::Client::ServerSideDecorationManager> m_serverSideDecorationManager;
|
||||
std::unique_ptr<KWayland::Client::XdgDecorationManager> m_xdgDecorationManager;
|
||||
std::unique_ptr<KWayland::Client::ShmPool> m_shmPool;
|
||||
std::unique_ptr<KWayland::Client::SubCompositor> m_subCompositor;
|
||||
std::unique_ptr<KWayland::Client::XdgShell> m_xdgShell;
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
|
||||
#include <KWayland/Client/compositor.h>
|
||||
#include <KWayland/Client/pointerconstraints.h>
|
||||
#include <KWayland/Client/server_decoration.h>
|
||||
#include <KWayland/Client/surface.h>
|
||||
#include <KWayland/Client/xdgdecoration.h>
|
||||
|
||||
#include <KLocalizedString>
|
||||
|
||||
|
@ -34,13 +34,9 @@ WaylandOutput::WaylandOutput(const QString &name, WaylandBackend *backend)
|
|||
, m_xdgShellSurface(backend->display()->xdgShell()->createSurface(m_surface.get()))
|
||||
, m_backend(backend)
|
||||
{
|
||||
if (KWayland::Client::ServerSideDecorationManager *ssdManager = backend->display()->serverSideDecorationManager()) {
|
||||
m_serverDecoration.reset(ssdManager->create(m_surface.get()));
|
||||
connect(m_serverDecoration.get(), &KWayland::Client::ServerSideDecoration::modeChanged, this, [this] {
|
||||
if (m_serverDecoration->mode() != KWayland::Client::ServerSideDecoration::Mode::Server) {
|
||||
m_serverDecoration->requestMode(KWayland::Client::ServerSideDecoration::Mode::Server);
|
||||
}
|
||||
});
|
||||
if (KWayland::Client::XdgDecorationManager *manager = m_backend->display()->xdgDecorationManager()) {
|
||||
m_xdgDecoration.reset(manager->getToplevelDecoration(m_xdgShellSurface.get()));
|
||||
m_xdgDecoration->setMode(KWayland::Client::XdgDecoration::Mode::ServerSide);
|
||||
}
|
||||
|
||||
setInformation(Information{
|
||||
|
@ -87,8 +83,9 @@ WaylandOutput::WaylandOutput(const QString &name, WaylandBackend *backend)
|
|||
|
||||
WaylandOutput::~WaylandOutput()
|
||||
{
|
||||
m_xdgShellSurface->destroy();
|
||||
m_surface->destroy();
|
||||
m_xdgDecoration.reset();
|
||||
m_xdgShellSurface.reset();
|
||||
m_surface.reset();
|
||||
}
|
||||
|
||||
bool WaylandOutput::isReady() const
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace Client
|
|||
class Surface;
|
||||
class Pointer;
|
||||
class LockedPointer;
|
||||
class ServerSideDecoration;
|
||||
class XdgDecoration;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ private:
|
|||
std::unique_ptr<KWayland::Client::Surface> m_surface;
|
||||
std::unique_ptr<KWayland::Client::XdgShellSurface> m_xdgShellSurface;
|
||||
std::unique_ptr<KWayland::Client::LockedPointer> m_pointerLock;
|
||||
std::unique_ptr<KWayland::Client::ServerSideDecoration> m_serverDecoration;
|
||||
std::unique_ptr<KWayland::Client::XdgDecoration> m_xdgDecoration;
|
||||
WaylandBackend *const m_backend;
|
||||
QTimer m_turnOffTimer;
|
||||
bool m_hasPointerLock = false;
|
||||
|
|
Loading…
Reference in a new issue