summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylandwindowmanagerintegration.cpp
diff options
context:
space:
mode:
authorDavid Redondo <qt@david-redondo.de>2024-03-07 15:18:40 +0100
committerDavid Redondo <qt@david-redondo.de>2024-05-10 08:57:33 +0200
commitde2c3b3f85698d210ccfdb4b1e65e1c397a1cd3a (patch)
tree08b60b33367f0a4df03bc53e1ff9aab6d32c6a0c /src/client/qwaylandwindowmanagerintegration.cpp
parenta5bea434aa9137f9b0ba6170fbb5a237e890b021 (diff)
client: Disentangle platform services and windowmanagerintegration
The current state was a bit messy with the platform services being the potentially no initialised qt window manager extension wayland object. Change-Id: Id1f911b75d34fcf70594ca7257b79bf431f0643f Reviewed-by: David Edmundson <davidedmundson@kde.org>
Diffstat (limited to 'src/client/qwaylandwindowmanagerintegration.cpp')
-rw-r--r--src/client/qwaylandwindowmanagerintegration.cpp71
1 files changed, 8 insertions, 63 deletions
diff --git a/src/client/qwaylandwindowmanagerintegration.cpp b/src/client/qwaylandwindowmanagerintegration.cpp
index 149190420..c7a5c0d14 100644
--- a/src/client/qwaylandwindowmanagerintegration.cpp
+++ b/src/client/qwaylandwindowmanagerintegration.cpp
@@ -22,49 +22,26 @@ QT_BEGIN_NAMESPACE
namespace QtWaylandClient {
-class QWaylandWindowManagerIntegrationPrivate {
-public:
- QWaylandWindowManagerIntegrationPrivate(QWaylandDisplay *waylandDisplay);
- bool m_blockPropertyUpdates = false;
- QWaylandDisplay *m_waylandDisplay = nullptr;
- QHash<QWindow*, QVariantMap> m_queuedProperties;
- bool m_showIsFullScreen = false;
-};
-
-QWaylandWindowManagerIntegrationPrivate::QWaylandWindowManagerIntegrationPrivate(QWaylandDisplay *waylandDisplay)
- : m_waylandDisplay(waylandDisplay)
-{
-}
-
-QWaylandWindowManagerIntegration::QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay)
- : d_ptr(new QWaylandWindowManagerIntegrationPrivate(waylandDisplay))
+QWaylandWindowManagerIntegration::QWaylandWindowManagerIntegration(QWaylandDisplay *waylandDisplay,
+ uint id, uint version)
+ : QtWayland::qt_windowmanager(waylandDisplay->object(), id, version),
+ m_waylandDisplay(waylandDisplay)
{
- waylandDisplay->addRegistryListener(&wlHandleListenerGlobal, this);
}
QWaylandWindowManagerIntegration::~QWaylandWindowManagerIntegration()
{
- if (object())
- qt_windowmanager_destroy(object());
+ qt_windowmanager_destroy(object());
}
bool QWaylandWindowManagerIntegration::showIsFullScreen() const
{
- Q_D(const QWaylandWindowManagerIntegration);
- return d->m_showIsFullScreen;
-}
-
-void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version)
-{
- Q_UNUSED(version);
- if (interface == QStringLiteral("qt_windowmanager"))
- static_cast<QWaylandWindowManagerIntegration *>(data)->init(registry, id, 1);
+ return m_showIsFullScreen;
}
void QWaylandWindowManagerIntegration::windowmanager_hints(int32_t showIsFullScreen)
{
- Q_D(QWaylandWindowManagerIntegration);
- d->m_showIsFullScreen = showIsFullScreen;
+ m_showIsFullScreen = showIsFullScreen;
}
void QWaylandWindowManagerIntegration::windowmanager_quit()
@@ -72,11 +49,9 @@ void QWaylandWindowManagerIntegration::windowmanager_quit()
QGuiApplication::quit();
}
-void QWaylandWindowManagerIntegration::openUrl_helper(const QUrl &url)
+void QWaylandWindowManagerIntegration::openUrl(const QUrl &url)
{
- Q_ASSERT(isInitialized());
QString data = url.toString();
-
static const int chunkSize = 128;
while (!data.isEmpty()) {
QString chunk = data.left(chunkSize);
@@ -88,36 +63,6 @@ void QWaylandWindowManagerIntegration::openUrl_helper(const QUrl &url)
open_url(!data.isEmpty(), chunk);
}
}
-
-bool QWaylandWindowManagerIntegration::openUrl(const QUrl &url)
-{
- if (isInitialized()) {
- openUrl_helper(url);
- return true;
- }
- return QGenericUnixServices::openUrl(url);
-}
-
-bool QWaylandWindowManagerIntegration::openDocument(const QUrl &url)
-{
- if (isInitialized()) {
- openUrl_helper(url);
- return true;
- }
- return QGenericUnixServices::openDocument(url);
-}
-
-QString QWaylandWindowManagerIntegration::portalWindowIdentifier(QWindow *window)
-{
- if (window && window->handle()) {
- auto shellSurface = static_cast<QWaylandWindow *>(window->handle())->shellSurface();
- if (shellSurface) {
- const QString handle = shellSurface->externWindowHandle();
- return QLatin1String("wayland:") + handle;
- }
- }
- return QString();
-}
}
QT_END_NAMESPACE