summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorGiulio Camuffo <giuliocamuffo@gmail.com>2012-11-02 15:52:36 +0100
committerAndy Nichols <andy.nichols@digia.com>2012-11-04 20:58:23 +0100
commit0f6ffad18665c7a6d648da0f2d19be7237510eeb (patch)
tree9c972aa5edd51102bae527544dd06cb520416869 /src/plugins
parent7334963a7911f5e8cfc18d6a21876bb9c16f1ab8 (diff)
Port the Wayland QPA plugin to wayland 1.0.0.
Change-Id: I5b2092ed9dac8201c7a681acea0a3d703423c743 Reviewed-by: Andy Nichols <andy.nichols@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp12
-rw-r--r--src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h4
-rw-r--r--src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp11
-rw-r--r--src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h4
-rw-r--r--src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp7
-rw-r--r--src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h4
-rw-r--r--src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylanddisplay.cpp48
-rw-r--r--src/plugins/platforms/wayland/qwaylanddisplay.h28
-rw-r--r--src/plugins/platforms/wayland/qwaylandextendedoutput.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandextendedsurface.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandinputdevice.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandqtkey.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandscreen.cpp8
-rw-r--r--src/plugins/platforms/wayland/qwaylandscreen.h4
-rw-r--r--src/plugins/platforms/wayland/qwaylandshell.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandsubsurface.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandtouch.cpp2
-rw-r--r--src/plugins/platforms/wayland/qwaylandwindow.cpp1
-rw-r--r--src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp9
-rw-r--r--src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h5
21 files changed, 101 insertions, 60 deletions
diff --git a/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp b/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp
index dd0a81386..d107d5a8f 100644
--- a/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp
+++ b/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp
@@ -50,19 +50,19 @@
#include "wayland-brcm-client-protocol.h"
-QWaylandBrcmEglIntegration::QWaylandBrcmEglIntegration(struct wl_display *waylandDisplay)
- : m_waylandDisplay(waylandDisplay)
+QWaylandBrcmEglIntegration::QWaylandBrcmEglIntegration(QWaylandDisplay *waylandDisplay)
+ : m_waylandDisplay(waylandDisplay->wl_display())
{
- wl_display_add_global_listener(waylandDisplay, wlDisplayHandleGlobal, this);
qDebug() << "Using Brcm-EGL";
+ waylandDisplay->addRegistryListener(wlDisplayHandleGlobal, this);
}
-void QWaylandBrcmEglIntegration::wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data)
+void QWaylandBrcmEglIntegration::wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version)
{
Q_UNUSED(version);
if (strcmp(interface, "wl_brcm") == 0) {
QWaylandBrcmEglIntegration *integration = static_cast<QWaylandBrcmEglIntegration *>(data);
- integration->m_waylandBrcm = static_cast<struct wl_brcm *>(wl_display_bind(display, id, &wl_brcm_interface));
+ integration->m_waylandBrcm = static_cast<struct wl_brcm *>(wl_registry_bind(registry, id, &wl_brcm_interface, 1));
}
}
@@ -124,6 +124,6 @@ EGLDisplay QWaylandBrcmEglIntegration::eglDisplay() const
QWaylandGLIntegration *QWaylandGLIntegration::createGLIntegration(QWaylandDisplay *waylandDisplay)
{
- return new QWaylandBrcmEglIntegration(waylandDisplay->wl_display());
+ return new QWaylandBrcmEglIntegration(waylandDisplay);
}
diff --git a/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h b/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h
index c85a8e33e..c3874259d 100644
--- a/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h
+++ b/src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h
@@ -58,7 +58,7 @@ struct wl_brcm;
class QWaylandBrcmEglIntegration : public QWaylandGLIntegration
{
public:
- QWaylandBrcmEglIntegration(struct wl_display *waylandDisplay);
+ QWaylandBrcmEglIntegration(QWaylandDisplay *waylandDisplay);
~QWaylandBrcmEglIntegration();
void initialize();
@@ -77,7 +77,7 @@ public:
PFNEGLDESTROYGLOBALIMAGEBRCMPROC eglDestroyGlobalImageBRCM;
private:
- static void wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data);
+ static void wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version);
struct wl_display *m_waylandDisplay;
struct wl_brcm *m_waylandBrcm;
diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp
index 08a6c0623..c4d98a8ea 100644
--- a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp
+++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp
@@ -52,13 +52,12 @@ QWaylandGLIntegration * QWaylandGLIntegration::createGLIntegration(QWaylandDispl
return new QWaylandXCompositeEGLIntegration(waylandDisplay);
}
-QWaylandXCompositeEGLIntegration::QWaylandXCompositeEGLIntegration(QWaylandDisplay * waylandDispaly)
+QWaylandXCompositeEGLIntegration::QWaylandXCompositeEGLIntegration(QWaylandDisplay * waylandDisplay)
: QWaylandGLIntegration()
- , mWaylandDisplay(waylandDispaly)
+ , mWaylandDisplay(waylandDisplay)
{
qDebug() << "Using XComposite-EGL";
- wl_display_add_global_listener(mWaylandDisplay->wl_display(), QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal,
- this);
+ waylandDisplay->addRegistryListener(&wlDisplayHandleGlobal, this);
}
QWaylandXCompositeEGLIntegration::~QWaylandXCompositeEGLIntegration()
@@ -113,12 +112,12 @@ const struct wl_xcomposite_listener QWaylandXCompositeEGLIntegration::xcomposite
QWaylandXCompositeEGLIntegration::rootInformation
};
-void QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data)
+void QWaylandXCompositeEGLIntegration::wlDisplayHandleGlobal(void *data, wl_registry *registry, uint32_t id, const char *interface, uint32_t version)
{
Q_UNUSED(version);
if (strcmp(interface, "wl_xcomposite") == 0) {
QWaylandXCompositeEGLIntegration *integration = static_cast<QWaylandXCompositeEGLIntegration *>(data);
- integration->mWaylandComposite = static_cast<struct wl_xcomposite *>(wl_display_bind(display,id,&wl_xcomposite_interface));
+ integration->mWaylandComposite = static_cast<struct wl_xcomposite *>(wl_registry_bind(registry,id,&wl_xcomposite_interface,1));
wl_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration);
}
diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h
index 1dfbe932a..78c8a2b2d 100644
--- a/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h
+++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h
@@ -88,8 +88,8 @@ private:
int mScreen;
Window mRootWindow;
- static void wlDisplayHandleGlobal(struct wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data);
+ static void wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id,
+ const char *interface, uint32_t version);
static const struct wl_xcomposite_listener xcomposite_listener;
static void rootInformation(void *data,
diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp
index 23e7aa0dc..d82c6456c 100644
--- a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp
+++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp
@@ -60,8 +60,7 @@ QWaylandXCompositeGLXIntegration::QWaylandXCompositeGLXIntegration(QWaylandDispl
, mRootWindow(0)
{
qDebug() << "Using XComposite-GLX";
- wl_display_add_global_listener(waylandDisplay->wl_display(), QWaylandXCompositeGLXIntegration::wlDisplayHandleGlobal,
- this);
+ waylandDisplay->addRegistryListener(QWaylandXCompositeGLXIntegration::wlDisplayHandleGlobal, this);
}
QWaylandXCompositeGLXIntegration::~QWaylandXCompositeGLXIntegration()
@@ -111,13 +110,13 @@ const struct wl_xcomposite_listener QWaylandXCompositeGLXIntegration::xcomposite
QWaylandXCompositeGLXIntegration::rootInformation
};
-void QWaylandXCompositeGLXIntegration::wlDisplayHandleGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data)
+void QWaylandXCompositeGLXIntegration::wlDisplayHandleGlobal(void *data, wl_registry *registry, uint32_t id, const char *interface, uint32_t version)
{
Q_UNUSED(version);
if (strcmp(interface, "wl_xcomposite") == 0) {
qDebug("XComposite-GLX: got wl_xcomposite global");
QWaylandXCompositeGLXIntegration *integration = static_cast<QWaylandXCompositeGLXIntegration *>(data);
- integration->mWaylandComposite = static_cast<struct wl_xcomposite *>(wl_display_bind(display, id, &wl_xcomposite_interface));
+ integration->mWaylandComposite = static_cast<struct wl_xcomposite *>(wl_registry_bind(registry, id, &wl_xcomposite_interface, 1));
wl_xcomposite_add_listener(integration->mWaylandComposite,&xcomposite_listener,integration);
}
diff --git a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h
index 761bf2bde..5c16763e7 100644
--- a/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h
+++ b/src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h
@@ -81,8 +81,8 @@ private:
int mScreen;
Window mRootWindow;
- static void wlDisplayHandleGlobal(struct wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data);
+ static void wlDisplayHandleGlobal(void *data, struct wl_registry *registry, uint32_t id,
+ const char *interface, uint32_t version);
static const struct wl_xcomposite_listener xcomposite_listener;
static void rootInformation(void *data,
diff --git a/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp b/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp
index 57eae5a77..0b22fb2b1 100644
--- a/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp
+++ b/src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp
@@ -200,7 +200,7 @@ QWaylandDataDeviceManager::QWaylandDataDeviceManager(QWaylandDisplay *display, u
, m_drag_icon_buffer(0)
, m_drag_can_drop(false)
{
- m_data_device_manager = static_cast<struct wl_data_device_manager *>(wl_display_bind(display->wl_display(),id,&wl_data_device_manager_interface));
+ m_data_device_manager = static_cast<struct wl_data_device_manager *>(wl_registry_bind(display->wl_registry(),id,&wl_data_device_manager_interface,1));
// Create transfer devices for all input devices.
// ### This only works if we get the global before all devices and is surely wrong when hotplugging.
diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.cpp b/src/plugins/platforms/wayland/qwaylanddisplay.cpp
index e50a5f210..4b01f3e0b 100644
--- a/src/plugins/platforms/wayland/qwaylanddisplay.cpp
+++ b/src/plugins/platforms/wayland/qwaylanddisplay.cpp
@@ -106,6 +106,10 @@ void QWaylandDisplay::setLastKeyboardFocusInputDevice(QWaylandInputDevice *devic
static QWaylandDisplay *display = 0;
+const struct wl_registry_listener QWaylandDisplay::registryListener = {
+ QWaylandDisplay::displayHandleGlobal
+};
+
QWaylandDisplay::QWaylandDisplay(void)
: mLastKeyboardFocusInputDevice(0)
, mDndSelectionHandler(0)
@@ -124,9 +128,10 @@ QWaylandDisplay::QWaylandDisplay(void)
qFatal("No wayland connection available.");
}
- wl_display_add_global_listener(mDisplay, QWaylandDisplay::displayHandleGlobal, this);
+ mFd = wl_display_get_fd(mDisplay);
- mFd = wl_display_get_fd(mDisplay, 0, 0);
+ mRegistry = wl_display_get_registry(mDisplay);
+ wl_registry_add_listener(mRegistry, &registryListener, this);
#ifdef WAYLAND_CLIENT_THREAD_AFFINITY
mWritableNotificationFd = wl_display_get_write_notification_fd(mDisplay);
@@ -166,14 +171,15 @@ QWaylandDisplay::~QWaylandDisplay(void)
wl_display_disconnect(mDisplay);
}
-void QWaylandDisplay::createNewScreen(struct wl_output *output, QRect geometry)
+void QWaylandDisplay::createNewScreen(struct wl_output *output)
{
- QWaylandScreen *waylandScreen = new QWaylandScreen(this,output,geometry);
+ QWaylandScreen *waylandScreen = new QWaylandScreen(this,output);
mScreens.append(waylandScreen);
}
void QWaylandDisplay::flushRequests()
{
+ wl_display_dispatch_pending(mDisplay);
wl_display_flush(mDisplay);
}
@@ -199,12 +205,12 @@ void QWaylandDisplay::readEvents()
return;
}
- wl_display_iterate(mDisplay, WL_DISPLAY_READABLE);
+ wl_display_dispatch(mDisplay);
}
void QWaylandDisplay::blockingReadEvents()
{
- wl_display_iterate(mDisplay, WL_DISPLAY_READABLE);
+ wl_display_dispatch(mDisplay);
}
QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const
@@ -218,7 +224,7 @@ QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const
}
void QWaylandDisplay::outputHandleGeometry(void *data,
- wl_output *output,
+ struct wl_output *output,
int32_t x, int32_t y,
int32_t physicalWidth,
int32_t physicalHeight,
@@ -232,7 +238,7 @@ void QWaylandDisplay::outputHandleGeometry(void *data,
Q_UNUSED(transform);
QWaylandDisplay *waylandDisplay = static_cast<QWaylandDisplay *>(data);
QRect outputRect = QRect(x, y, physicalWidth, physicalHeight);
- waylandDisplay->createNewScreen(output,outputRect);
+ waylandDisplay->screenForOutput(output)->setGeometry(outputRect);
}
void QWaylandDisplay::mode(void *data,
@@ -251,6 +257,12 @@ void QWaylandDisplay::mode(void *data,
}
}
+void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data)
+{
+ Listener l = { listener, data };
+ mRegistryListeners.append(l);
+}
+
const struct wl_output_listener QWaylandDisplay::outputListener = {
QWaylandDisplay::outputHandleGeometry,
QWaylandDisplay::mode
@@ -263,13 +275,13 @@ void QWaylandDisplay::waitForScreens()
blockingReadEvents();
}
-void QWaylandDisplay::displayHandleGlobal(struct wl_display *display,
+void QWaylandDisplay::displayHandleGlobal(void *data,
+ struct wl_registry *registry,
uint32_t id,
const char *interface,
- uint32_t version,
- void *data)
+ uint32_t version)
{
- Q_UNUSED(display);
+ Q_UNUSED(registry);
QWaylandDisplay *that = static_cast<QWaylandDisplay *>(data);
that->displayHandleGlobal(id, QByteArray(interface), version);
}
@@ -279,13 +291,15 @@ void QWaylandDisplay::displayHandleGlobal(uint32_t id,
uint32_t version)
{
Q_UNUSED(version);
+
if (interface == "wl_output") {
- struct wl_output *output = static_cast<struct wl_output *>(wl_display_bind(mDisplay,id,&wl_output_interface));
+ struct wl_output *output = static_cast<struct wl_output *>(wl_registry_bind(mRegistry,id,&wl_output_interface,1));
+ createNewScreen(output);
wl_output_add_listener(output, &outputListener, this);
} else if (interface == "wl_compositor") {
- mCompositor = static_cast<struct wl_compositor *>(wl_display_bind(mDisplay, id,&wl_compositor_interface));
+ mCompositor = static_cast<struct wl_compositor *>(wl_registry_bind(mRegistry, id,&wl_compositor_interface,1));
} else if (interface == "wl_shm") {
- mShm = static_cast<struct wl_shm *>(wl_display_bind(mDisplay, id, &wl_shm_interface));
+ mShm = static_cast<struct wl_shm *>(wl_registry_bind(mRegistry, id, &wl_shm_interface,1));
} else if (interface == "wl_shell"){
mShell = new QWaylandShell(this,id,version);
} else if (interface == "wl_seat") {
@@ -304,6 +318,10 @@ void QWaylandDisplay::displayHandleGlobal(uint32_t id,
} else if (interface == "wl_qtkey_extension") {
mQtKeyExtension = new QWaylandQtKeyExtension(this, id);
}
+
+ foreach (Listener l, mRegistryListeners) {
+ (*l.listener)(l.data, mRegistry, id, interface, version);
+ }
}
uint32_t QWaylandDisplay::currentTimeMillisec()
diff --git a/src/plugins/platforms/wayland/qwaylanddisplay.h b/src/plugins/platforms/wayland/qwaylanddisplay.h
index fa4f37663..5d2374ac4 100644
--- a/src/plugins/platforms/wayland/qwaylanddisplay.h
+++ b/src/plugins/platforms/wayland/qwaylanddisplay.h
@@ -65,6 +65,12 @@ class QWaylandOutputExtension;
class QWaylandTouchExtension;
class QWaylandQtKeyExtension;
+typedef void (*RegistryListener)(void *data,
+ struct wl_registry *registry,
+ uint32_t id,
+ const char *interface,
+ uint32_t version);
+
class QWaylandDisplay : public QObject {
Q_OBJECT
@@ -89,6 +95,7 @@ public:
void setCursor(wl_surface *surface, int32_t x, int32_t y);
struct wl_display *wl_display() const { return mDisplay; }
+ struct wl_registry *wl_registry() const { return mRegistry; }
struct wl_compositor *wl_compositor() const { return mCompositor; }
QWaylandShell *shell() const { return mShell; }
@@ -105,13 +112,18 @@ public:
QWaylandOutputExtension *outputExtension() const { return mOutputExtension; }
QWaylandTouchExtension *touchExtension() const { return mTouchExtension; }
+ /* wl_registry_add_listener does not add but rather sets a listener, so this function is used
+ * to enable many listeners at once. */
+ void addRegistryListener(RegistryListener listener, void *data);
+
struct wl_shm *shm() const { return mShm; }
static uint32_t currentTimeMillisec();
void forceRoundTrip();
+
public slots:
- void createNewScreen(struct wl_output *output, QRect geometry);
+ void createNewScreen(struct wl_output *output);
void readEvents();
void blockingReadEvents();
void flushRequests();
@@ -122,12 +134,19 @@ private:
const QByteArray &interface,
uint32_t version);
+ struct Listener {
+ RegistryListener listener;
+ void *data;
+ };
+
struct wl_display *mDisplay;
+ struct wl_registry *mRegistry;
struct wl_compositor *mCompositor;
struct wl_shm *mShm;
QWaylandShell *mShell;
QList<QPlatformScreen *> mScreens;
QList<QWaylandInputDevice *> mInputDevices;
+ QList<Listener> mRegistryListeners;
QWaylandInputDevice *mLastKeyboardFocusInputDevice;
QWaylandDataDeviceManager *mDndSelectionHandler;
QWaylandSurfaceExtension *mWindowExtension;
@@ -141,11 +160,14 @@ private:
int mWritableNotificationFd;
bool mScreensInitialized;
+ static const struct wl_registry_listener registryListener;
static const struct wl_output_listener outputListener;
- static void displayHandleGlobal(struct wl_display *display,
+
+ static void displayHandleGlobal(void *data,
+ struct wl_registry *registry,
uint32_t id,
const char *interface,
- uint32_t version, void *data);
+ uint32_t version);
static void outputHandleGeometry(void *data,
struct wl_output *output,
int32_t x, int32_t y,
diff --git a/src/plugins/platforms/wayland/qwaylandextendedoutput.cpp b/src/plugins/platforms/wayland/qwaylandextendedoutput.cpp
index 3171e7ec1..5f97a9274 100644
--- a/src/plugins/platforms/wayland/qwaylandextendedoutput.cpp
+++ b/src/plugins/platforms/wayland/qwaylandextendedoutput.cpp
@@ -52,7 +52,7 @@
QWaylandOutputExtension::QWaylandOutputExtension(QWaylandDisplay *display, uint32_t id)
{
m_output_extension = static_cast<struct wl_output_extension *>(
- wl_display_bind(display->wl_display(),id, &wl_output_extension_interface));
+ wl_registry_bind(display->wl_registry(), id, &wl_output_extension_interface, 1));
QList<QPlatformScreen *> platformScreens = display->screens();
for (int i = 0; i < platformScreens.size(); i++) {
diff --git a/src/plugins/platforms/wayland/qwaylandextendedsurface.cpp b/src/plugins/platforms/wayland/qwaylandextendedsurface.cpp
index be95ec98b..3a6d6efcd 100644
--- a/src/plugins/platforms/wayland/qwaylandextendedsurface.cpp
+++ b/src/plugins/platforms/wayland/qwaylandextendedsurface.cpp
@@ -57,7 +57,7 @@
QWaylandSurfaceExtension::QWaylandSurfaceExtension(QWaylandDisplay *display, uint32_t id)
{
m_surface_extension = static_cast<struct wl_surface_extension *>(
- wl_display_bind(display->wl_display(),id, &wl_surface_extension_interface));
+ wl_registry_bind(display->wl_registry(), id, &wl_surface_extension_interface, 1));
}
QWaylandExtendedSurface *QWaylandSurfaceExtension::getExtendedWindow(QWaylandWindow *window)
diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
index fc3cd1d28..1dcf656a2 100644
--- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
+++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
@@ -77,7 +77,7 @@ QWaylandInputDevice::QWaylandInputDevice(QWaylandDisplay *display, uint32_t id)
, mXkbState(0)
#endif
{
- mSeat = static_cast<struct wl_seat *>(wl_display_bind(mDisplay, id, &wl_seat_interface));
+ mSeat = static_cast<struct wl_seat *>(wl_registry_bind(display->wl_registry(), id, &wl_seat_interface, 1));
wl_seat_add_listener(mSeat, &seatListener, this);
wl_seat_set_user_data(mSeat, this);
diff --git a/src/plugins/platforms/wayland/qwaylandqtkey.cpp b/src/plugins/platforms/wayland/qwaylandqtkey.cpp
index 942ba1abf..a6fe2f520 100644
--- a/src/plugins/platforms/wayland/qwaylandqtkey.cpp
+++ b/src/plugins/platforms/wayland/qwaylandqtkey.cpp
@@ -47,7 +47,7 @@
QWaylandQtKeyExtension::QWaylandQtKeyExtension(QWaylandDisplay *display, uint32_t id)
: m_display(display)
{
- m_qtkey = static_cast<struct wl_qtkey_extension *>(wl_display_bind(display->wl_display(), id, &wl_qtkey_extension_interface));
+ m_qtkey = static_cast<struct wl_qtkey_extension *>(wl_registry_bind(display->wl_registry(), id, &wl_qtkey_extension_interface, 1));
wl_qtkey_extension_add_listener(m_qtkey, &qtkey_listener, this);
}
diff --git a/src/plugins/platforms/wayland/qwaylandscreen.cpp b/src/plugins/platforms/wayland/qwaylandscreen.cpp
index a20af3539..8689c7127 100644
--- a/src/plugins/platforms/wayland/qwaylandscreen.cpp
+++ b/src/plugins/platforms/wayland/qwaylandscreen.cpp
@@ -47,12 +47,11 @@
#include <qpa/qwindowsysteminterface.h>
-QWaylandScreen::QWaylandScreen(QWaylandDisplay *waylandDisplay, struct wl_output *output, QRect geometry)
+QWaylandScreen::QWaylandScreen(QWaylandDisplay *waylandDisplay, struct wl_output *output)
: QPlatformScreen()
, mWaylandDisplay(waylandDisplay)
, mOutput(output)
, mExtendedOutput(0)
- , mGeometry(geometry)
, mDepth(32)
, mRefreshRate(60)
, mFormat(QImage::Format_ARGB32_Premultiplied)
@@ -74,6 +73,11 @@ QWaylandDisplay * QWaylandScreen::display() const
return mWaylandDisplay;
}
+void QWaylandScreen::setGeometry(const QRect &geom)
+{
+ mGeometry = geom;
+}
+
QRect QWaylandScreen::geometry() const
{
return mGeometry;
diff --git a/src/plugins/platforms/wayland/qwaylandscreen.h b/src/plugins/platforms/wayland/qwaylandscreen.h
index 59a94e4b9..28be6e8b9 100644
--- a/src/plugins/platforms/wayland/qwaylandscreen.h
+++ b/src/plugins/platforms/wayland/qwaylandscreen.h
@@ -51,7 +51,7 @@ class QWaylandExtendedOutput;
class QWaylandScreen : public QPlatformScreen
{
public:
- QWaylandScreen(QWaylandDisplay *waylandDisplay, struct wl_output *output, QRect geometry);
+ QWaylandScreen(QWaylandDisplay *waylandDisplay, struct wl_output *output);
~QWaylandScreen();
QWaylandDisplay *display() const;
@@ -76,6 +76,8 @@ public:
void handleMode(const QSize &size, int refreshRate);
+ void setGeometry(const QRect &geom);
+
private:
QWaylandDisplay *mWaylandDisplay;
struct wl_output *mOutput;
diff --git a/src/plugins/platforms/wayland/qwaylandshell.cpp b/src/plugins/platforms/wayland/qwaylandshell.cpp
index 48997f382..c82bf9bac 100644
--- a/src/plugins/platforms/wayland/qwaylandshell.cpp
+++ b/src/plugins/platforms/wayland/qwaylandshell.cpp
@@ -48,7 +48,7 @@ QWaylandShell::QWaylandShell(QWaylandDisplay *display, uint32_t id, uint32_t ver
: m_display(display)
{
Q_UNUSED(version)
- m_shell = static_cast<struct wl_shell *>(wl_display_bind(m_display->wl_display(), id, &wl_shell_interface));
+ m_shell = static_cast<struct wl_shell *>(wl_registry_bind(m_display->wl_registry(), id, &wl_shell_interface, 1));
}
QWaylandShellSurface *QWaylandShell::getShellSurface(QWaylandWindow *window)
diff --git a/src/plugins/platforms/wayland/qwaylandsubsurface.cpp b/src/plugins/platforms/wayland/qwaylandsubsurface.cpp
index 7f0353ffa..b92bddc9d 100644
--- a/src/plugins/platforms/wayland/qwaylandsubsurface.cpp
+++ b/src/plugins/platforms/wayland/qwaylandsubsurface.cpp
@@ -50,7 +50,7 @@
QWaylandSubSurfaceExtension::QWaylandSubSurfaceExtension(QWaylandDisplay *display, uint32_t id)
{
m_sub_surface_extension = static_cast<struct wl_sub_surface_extension *>(
- wl_display_bind(display->wl_display(),id, &wl_sub_surface_extension_interface));
+ wl_registry_bind(display->wl_registry(), id, &wl_sub_surface_extension_interface, 1));
}
QWaylandSubSurface *QWaylandSubSurfaceExtension::getSubSurfaceAwareWindow(QWaylandWindow *window)
diff --git a/src/plugins/platforms/wayland/qwaylandtouch.cpp b/src/plugins/platforms/wayland/qwaylandtouch.cpp
index 52cc82c43..0c1587305 100644
--- a/src/plugins/platforms/wayland/qwaylandtouch.cpp
+++ b/src/plugins/platforms/wayland/qwaylandtouch.cpp
@@ -52,7 +52,7 @@ QWaylandTouchExtension::QWaylandTouchExtension(QWaylandDisplay *display, uint32_
mMouseSourceId(-1),
mInputDevice(0)
{
- mTouch = static_cast<struct wl_touch_extension *>(wl_display_bind(display->wl_display(), id, &wl_touch_extension_interface));
+ mTouch = static_cast<struct wl_touch_extension *>(wl_registry_bind(display->wl_registry(), id, &wl_touch_extension_interface, 1));
wl_touch_extension_add_listener(mTouch, &touch_listener, this);
}
diff --git a/src/plugins/platforms/wayland/qwaylandwindow.cpp b/src/plugins/platforms/wayland/qwaylandwindow.cpp
index 48e3b1b45..c07ae0346 100644
--- a/src/plugins/platforms/wayland/qwaylandwindow.cpp
+++ b/src/plugins/platforms/wayland/qwaylandwindow.cpp
@@ -225,6 +225,7 @@ void QWaylandWindow::damage(const QRect &rect)
wl_surface_damage(mSurface,
rect.x(), rect.y(), rect.width(), rect.height());
+ wl_surface_commit(mSurface);
}
const wl_callback_listener QWaylandWindow::callbackListener = {
diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp
index c0b1f4c16..ba26b79af 100644
--- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp
+++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp
@@ -85,10 +85,7 @@ QWaylandWindowManagerIntegration::QWaylandWindowManagerIntegration(QWaylandDispl
: d_ptr(new QWaylandWindowManagerIntegrationPrivate(waylandDisplay))
{
m_instance = this;
-
- wl_display_add_global_listener(d_ptr->m_waylandDisplay->wl_display(),
- QWaylandWindowManagerIntegration::wlHandleListenerGlobal,
- this);
+ waylandDisplay->addRegistryListener(&wlHandleListenerGlobal, this);
}
QWaylandWindowManagerIntegration::~QWaylandWindowManagerIntegration()
@@ -113,13 +110,13 @@ bool QWaylandWindowManagerIntegration::showIsFullScreen() const
return d->m_showIsFullScreen;
}
-void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(wl_display *display, uint32_t id, const char *interface, uint32_t version, void *data)
+void QWaylandWindowManagerIntegration::wlHandleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const char *interface, uint32_t version)
{
Q_UNUSED(version);
if (strcmp(interface, "wl_windowmanager") == 0) {
QWaylandWindowManagerIntegration *integration = static_cast<QWaylandWindowManagerIntegration *>(data);
integration->d_ptr->m_waylandWindowManager =
- static_cast<struct wl_windowmanager *>(wl_display_bind(display, id, &wl_windowmanager_interface));
+ static_cast<struct wl_windowmanager *>(wl_registry_bind(registry, id, &wl_windowmanager_interface, 1));
wl_windowmanager_add_listener(integration->d_ptr->m_waylandWindowManager, &windowmanager_listener, integration);
}
}
diff --git a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h
index ecb2c7df0..2e1661cc5 100644
--- a/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h
+++ b/src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h
@@ -74,10 +74,9 @@ public:
bool showIsFullScreen() const;
private:
- static void wlHandleListenerGlobal(wl_display *display, uint32_t id,
- const char *interface, uint32_t version, void *data);
+ static void wlHandleListenerGlobal(void *data, wl_registry *registry, uint32_t id,
+ const char *interface, uint32_t version);
-private:
QScopedPointer<QWaylandWindowManagerIntegrationPrivate> d_ptr;
static QWaylandWindowManagerIntegration *m_instance;