summaryrefslogtreecommitdiffstats
path: root/src/compositor/windowmanagerprotocol
diff options
context:
space:
mode:
Diffstat (limited to 'src/compositor/windowmanagerprotocol')
-rw-r--r--src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.cpp76
-rw-r--r--src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.h37
2 files changed, 33 insertions, 80 deletions
diff --git a/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.cpp b/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.cpp
index e607d636a..f2fa21407 100644
--- a/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.cpp
+++ b/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.cpp
@@ -40,13 +40,12 @@
#include "waylandwindowmanagerintegration.h"
-#include "wayland_wrapper/qwldisplay_p.h"
-#include "wayland_wrapper/qwlcompositor_p.h"
+#include <wayland_wrapper/qwldisplay_p.h>
+#include <wayland_wrapper/qwlcompositor_p.h>
-#include "compositor_api/qwaylandcompositor.h"
+#include <compositor_api/qwaylandcompositor.h>
-#include "wayland-server.h"
-#include "wayland-windowmanager-server-protocol.h"
+#include <wayland-server.h>
#include <QUrl>
@@ -54,6 +53,7 @@ QT_BEGIN_NAMESPACE
WindowManagerServerIntegration::WindowManagerServerIntegration(QWaylandCompositor *compositor, QObject *parent)
: QObject(parent)
+ , QtWaylandServer::qt_windowmanager()
, m_showIsFullScreen(false)
, m_compositor(compositor)
{
@@ -65,75 +65,47 @@ WindowManagerServerIntegration::~WindowManagerServerIntegration()
void WindowManagerServerIntegration::initialize(QtWayland::Display *waylandDisplay)
{
- wl_display_add_global(waylandDisplay->handle(),&qt_windowmanager_interface,this,WindowManagerServerIntegration::bind_func);
+ init(waylandDisplay->handle());
}
void WindowManagerServerIntegration::setShowIsFullScreen(bool value)
{
m_showIsFullScreen = value;
- struct wl_resource *resource;
- wl_list_for_each(resource,&client_resources, link) {
- qt_windowmanager_send_hints(resource, int32_t(m_showIsFullScreen));
+ Q_FOREACH (Resource *resource, resourceMap().values()) {
+ send_hints(resource->handle, static_cast<int32_t>(m_showIsFullScreen));
}
}
void WindowManagerServerIntegration::sendQuitMessage(wl_client *client)
{
- struct wl_resource *resource;
- wl_list_for_each(resource, &client_resources, link) {
- if (resource->client == client) {
- qt_windowmanager_send_quit(resource);
- return;
- }
- }
-}
+ Resource *resource = resourceMap().value(client);
-struct WindowManagerServerIntegrationClientData
-{
- QByteArray url;
- WindowManagerServerIntegration *integration;
-};
+ if (resource)
+ send_quit(resource->handle);
+}
-void WindowManagerServerIntegration::bind_func(struct wl_client *client, void *data,
- uint32_t version, uint32_t id)
+void WindowManagerServerIntegration::windowmanager_bind_resource(Resource *resource)
{
- Q_UNUSED(version);
-
- WindowManagerServerIntegrationClientData *clientData = new WindowManagerServerIntegrationClientData;
- clientData->integration = static_cast<WindowManagerServerIntegration *>(data);
-
- wl_resource *resource = wl_client_add_object(client,&qt_windowmanager_interface,&windowmanager_interface,id,clientData);
- resource->destroy = WindowManagerServerIntegration::destroy_resource;
- clientData->integration->registerResource(resource);
- qt_windowmanager_send_hints(resource, int32_t(clientData->integration->m_showIsFullScreen));
+ send_hints(resource->handle, static_cast<int32_t>(m_showIsFullScreen));
}
-void WindowManagerServerIntegration::destroy_resource(wl_resource *resource)
+void WindowManagerServerIntegration::windowmanager_destroy_resource(Resource *resource)
{
- WindowManagerServerIntegrationClientData *data = static_cast<WindowManagerServerIntegrationClientData *>(resource->data);
-
- delete data;
- free(resource);
+ m_urls.remove(resource);
}
-void WindowManagerServerIntegration::open_url(struct wl_client *client,
- struct wl_resource *window_mgr_resource,
- uint32_t remaining,
- const char *url)
+void WindowManagerServerIntegration::windowmanager_open_url(Resource *resource, uint32_t remaining, const QString &newUrl)
{
- WindowManagerServerIntegrationClientData *data = static_cast<WindowManagerServerIntegrationClientData *>(window_mgr_resource->data);
- WindowManagerServerIntegration *window_mgr = data->integration;
+ QString url = m_urls.value(resource, QString());
- data->url.append(url);
+ url.append(newUrl);
- if (!remaining) {
- window_mgr->m_compositor->openUrl(client, QUrl(QString::fromUtf8(data->url)));
- data->url = QByteArray();
+ if (remaining)
+ m_urls.insert(resource, url);
+ else {
+ m_urls.remove(resource);
+ m_compositor->openUrl(resource->client(), QUrl(url));
}
}
-const struct qt_windowmanager_interface WindowManagerServerIntegration::windowmanager_interface = {
- WindowManagerServerIntegration::open_url
-};
-
QT_END_NAMESPACE
diff --git a/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.h b/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.h
index 10a29a47e..ccf5d4e8d 100644
--- a/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.h
+++ b/src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration.h
@@ -42,17 +42,10 @@
#define WAYLANDWINDOWMANAGERINTEGRATION_H
#include <QtCompositor/qwaylandexport.h>
-#include <QtCompositor/qwaylandresourcecollection.h>
-
-#include <qwindowdefs.h>
-#include <stdint.h>
+#include "qwayland-server-windowmanager.h"
#include <QObject>
#include <QMap>
-#include <QVariant>
-
-struct wl_client;
-struct wl_object;
QT_BEGIN_NAMESPACE
@@ -60,15 +53,13 @@ namespace QtWayland {
class Display;
}
-class WindowManagerObject;
-class WaylandManagedClient;
class QWaylandCompositor;
-class Q_COMPOSITOR_EXPORT WindowManagerServerIntegration : public QObject, private QtWayland::ResourceCollection
+class Q_COMPOSITOR_EXPORT WindowManagerServerIntegration : public QObject, public QtWaylandServer::qt_windowmanager
{
Q_OBJECT
public:
- WindowManagerServerIntegration(QWaylandCompositor *compositor, QObject *parent = 0);
+ explicit WindowManagerServerIntegration(QWaylandCompositor *compositor, QObject *parent = 0);
~WindowManagerServerIntegration();
void initialize(QtWayland::Display *waylandDisplay);
@@ -76,25 +67,15 @@ public:
void setShowIsFullScreen(bool value);
void sendQuitMessage(wl_client *client);
+protected:
+ void windowmanager_bind_resource(Resource *resource) Q_DECL_OVERRIDE;
+ void windowmanager_destroy_resource(Resource *resource) Q_DECL_OVERRIDE;
+ void windowmanager_open_url(Resource *resource, uint32_t remaining, const QString &url) Q_DECL_OVERRIDE;
+
private:
bool m_showIsFullScreen;
QWaylandCompositor *m_compositor;
-
- static void bind_func(struct wl_client *client, void *data,
- uint32_t version, uint32_t id);
-
- static void destroy_resource(wl_resource *resource);
- static void map_client_to_process(struct wl_client *client,
- struct wl_resource *windowMgrResource,
- uint32_t processId);
- static void authenticate_with_token(struct wl_client *client,
- struct wl_resource *windowMgrResource,
- const char *wl_authentication_token);
- static void open_url(struct wl_client *client,
- struct wl_resource *window_mgr_resource,
- uint32_t remaining,
- const char *url);
- static const struct qt_windowmanager_interface windowmanager_interface;
+ QMap<Resource*, QString> m_urls;
};
QT_END_NAMESPACE