Port the Wayland QPA plugin to wayland 1.0.0.
authorGiulio Camuffo <giuliocamuffo@gmail.com>
Fri, 2 Nov 2012 14:52:36 +0000 (15:52 +0100)
committerAndy Nichols <andy.nichols@digia.com>
Sun, 4 Nov 2012 19:58:23 +0000 (20:58 +0100)
Change-Id: I5b2092ed9dac8201c7a681acea0a3d703423c743
Reviewed-by: Andy Nichols <andy.nichols@digia.com>
21 files changed:
src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.cpp
src/plugins/platforms/wayland/gl_integration/brcm_egl/qwaylandbrcmeglintegration.h
src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.cpp
src/plugins/platforms/wayland/gl_integration/xcomposite_egl/qwaylandxcompositeeglintegration.h
src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.cpp
src/plugins/platforms/wayland/gl_integration/xcomposite_glx/qwaylandxcompositeglxintegration.h
src/plugins/platforms/wayland/qwaylanddatadevicemanager.cpp
src/plugins/platforms/wayland/qwaylanddisplay.cpp
src/plugins/platforms/wayland/qwaylanddisplay.h
src/plugins/platforms/wayland/qwaylandextendedoutput.cpp
src/plugins/platforms/wayland/qwaylandextendedsurface.cpp
src/plugins/platforms/wayland/qwaylandinputdevice.cpp
src/plugins/platforms/wayland/qwaylandqtkey.cpp
src/plugins/platforms/wayland/qwaylandscreen.cpp
src/plugins/platforms/wayland/qwaylandscreen.h
src/plugins/platforms/wayland/qwaylandshell.cpp
src/plugins/platforms/wayland/qwaylandsubsurface.cpp
src/plugins/platforms/wayland/qwaylandtouch.cpp
src/plugins/platforms/wayland/qwaylandwindow.cpp
src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.cpp
src/plugins/platforms/wayland/windowmanager_integration/qwaylandwindowmanagerintegration.h

index dd0a813..d107d5a 100644 (file)
 
 #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);
 }
 
index c85a8e3..c387425 100644 (file)
@@ -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;
index 08a6c06..c4d98a8 100644 (file)
@@ -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);
     }
 
index 1dfbe93..78c8a2b 100644 (file)
@@ -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,
index 23e7aa0..d82c645 100644 (file)
@@ -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);
     }
 
index 761bf2b..5c16763 100644 (file)
@@ -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,
index 57eae5a..0b22fb2 100644 (file)
@@ -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.
index e50a5f2..4b01f3e 100644 (file)
@@ -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()
index fa4f376..5d2374a 100644 (file)
@@ -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,
index 3171e7e..5f97a92 100644 (file)
@@ -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++) {
index be95ec9..3a6d6ef 100644 (file)
@@ -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)
index fc3cd1d..1dcf656 100644 (file)
@@ -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);
 
index 942ba1a..a6fe2f5 100644 (file)
@@ -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);
 }
 
index a20af35..8689c71 100644 (file)
 
 #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;
index 59a94e4..28be6e8 100644 (file)
@@ -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;
index 48997f3..c82bf9b 100644 (file)
@@ -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)
index 7f0353f..b92bddc 100644 (file)
@@ -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)
index 52cc82c..0c15873 100644 (file)
@@ -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);
 }
 
index 48e3b1b..c07ae03 100644 (file)
@@ -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 = {
index c0b1f4c..ba26b79 100644 (file)
@@ -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);
     }
 }
index ecb2c7d..2e1661c 100644 (file)
@@ -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;