diff options
7 files changed, 43 insertions, 32 deletions
diff --git a/examples/wayland/qwindow-compositor/qwindowcompositor.cpp b/examples/wayland/qwindow-compositor/qwindowcompositor.cpp index fe2738f05..9f9a8e060 100644 --- a/examples/wayland/qwindow-compositor/qwindowcompositor.cpp +++ b/examples/wayland/qwindow-compositor/qwindowcompositor.cpp @@ -67,8 +67,8 @@ QT_BEGIN_NAMESPACE class Surface : public QWaylandSurface { public: - Surface() - : QWaylandSurface() + Surface(QWaylandCompositor *compositor, QWaylandClient *client, uint id, int version) + : QWaylandSurface(compositor, client, id, version) , shellSurface(Q_NULLPTR) , extSurface(Q_NULLPTR) , hasSentOnScreen(false) @@ -151,6 +151,7 @@ void QWindowCompositor::create() m_renderScheduler.setSingleShot(true); connect(&m_renderScheduler, &QTimer::timeout, this, &QWindowCompositor::render); + connect(this, &QWaylandCompositor::createSurface, this, &QWindowCompositor::onCreateSurface); connect(this, &QWaylandCompositor::surfaceCreated, this, &QWindowCompositor::onSurfaceCreated); connect(defaultInputDevice(), &QWaylandInputDevice::cursorSurfaceRequest, this, &QWindowCompositor::adjustCursorSurface); @@ -255,6 +256,11 @@ void QWindowCompositor::surfaceCommitted(QWaylandSurface *surface) m_renderScheduler.start(0); } +void QWindowCompositor::onCreateSurface(QWaylandClient *client, uint id, int version) +{ + new Surface(this, client, id, version); +} + void QWindowCompositor::onSurfaceCreated(QWaylandSurface *surface) { connect(surface, &QWaylandSurface::surfaceDestroyed, this, &QWindowCompositor::surfaceDestroyed); @@ -319,11 +325,6 @@ void QWindowCompositor::adjustCursorSurface(QWaylandSurface *surface, int hotspo m_cursorHotspotY = hotspotY; } -QWaylandSurface *QWindowCompositor::createDefaultSurfaceType() -{ - return new Surface(); -} - QWaylandView *QWindowCompositor::viewAt(const QPointF &point, QPointF *local) { for (int i = m_visibleSurfaces.size() - 1; i >= 0; --i) { diff --git a/examples/wayland/qwindow-compositor/qwindowcompositor.h b/examples/wayland/qwindow-compositor/qwindowcompositor.h index 15ff30476..9e1eb0801 100644 --- a/examples/wayland/qwindow-compositor/qwindowcompositor.h +++ b/examples/wayland/qwindow-compositor/qwindowcompositor.h @@ -76,6 +76,7 @@ private slots: void surfacePosChanged(); void render(); + void onCreateSurface(QWaylandClient *client, uint id, int version); void onSurfaceCreated(QWaylandSurface *surface); void onCreateShellSurface(QWaylandSurface *s, QWaylandClient *client, uint id); diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index 0a2b28714..6ccc8ee09 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -260,7 +260,7 @@ void QWaylandCompositorPrivate::compositor_create_surface(Resource *resource, ui if (surfResource) { surface = QWaylandSurface::fromResource(surfResource); } else { - surface = q->createDefaultSurfaceType(); + surface = createDefaultSurface(); surface->initialize(q, client, id, resource->version()); } Q_ASSERT(surface); @@ -273,6 +273,16 @@ void QWaylandCompositorPrivate::compositor_create_region(Resource *resource, uin new QtWayland::Region(resource->client(), id); } +/*! + \internal + Used to create a fallback QWaylandSurface when no surface was + created by emitting the QWaylandCompositor::createSurface signal. +*/ +QWaylandSurface *QWaylandCompositorPrivate::createDefaultSurface() +{ + return new QWaylandSurface(); +} + void QWaylandCompositorPrivate::initializeHardwareIntegration() { @@ -348,6 +358,11 @@ QWaylandCompositor::QWaylandCompositor(QObject *parent) { } +QWaylandCompositor::QWaylandCompositor(QWaylandCompositorPrivate &dptr, QObject *parent) + : QObject(dptr, parent) +{ +} + QWaylandCompositor::~QWaylandCompositor() { } @@ -507,16 +522,6 @@ void QWaylandCompositor::processWaylandEvents() } -/*! - \internal - Used to create a fallback QWaylandSurface when no surface was - created by emitting the QWaylandCompositor::createSurface signal. -*/ -QWaylandSurface *QWaylandCompositor::createDefaultSurfaceType() -{ - return new QWaylandSurface(); -} - QWaylandInputDevice *QWaylandCompositor::createInputDevice() { return new QWaylandInputDevice(this); diff --git a/src/compositor/compositor_api/qwaylandcompositor.h b/src/compositor/compositor_api/qwaylandcompositor.h index d859ab341..f986c6444 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.h +++ b/src/compositor/compositor_api/qwaylandcompositor.h @@ -148,10 +148,7 @@ protected: virtual QWaylandKeyboard *createKeyboardDevice(QWaylandInputDevice *inputDevice); virtual QWaylandTouch *createTouchDevice(QWaylandInputDevice *inputDevice); - QWaylandCompositor(QWaylandCompositorPrivate *dptr); - -private: - virtual QWaylandSurface *createDefaultSurfaceType(); + QWaylandCompositor(QWaylandCompositorPrivate &dptr, QObject *parent = 0); }; QT_END_NAMESPACE diff --git a/src/compositor/compositor_api/qwaylandcompositor_p.h b/src/compositor/compositor_api/qwaylandcompositor_p.h index e6e3f584a..1975bd879 100644 --- a/src/compositor/compositor_api/qwaylandcompositor_p.h +++ b/src/compositor/compositor_api/qwaylandcompositor_p.h @@ -96,6 +96,7 @@ protected: void compositor_create_surface(Resource *resource, uint32_t id) Q_DECL_OVERRIDE; void compositor_create_region(Resource *resource, uint32_t id) Q_DECL_OVERRIDE; + virtual QWaylandSurface *createDefaultSurface(); protected: void initializeHardwareIntegration(); void initializeExtensions(); diff --git a/src/compositor/compositor_api/qwaylandquickcompositor.cpp b/src/compositor/compositor_api/qwaylandquickcompositor.cpp index 8ebd1b6f6..70afccb93 100644 --- a/src/compositor/compositor_api/qwaylandquickcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandquickcompositor.cpp @@ -43,11 +43,26 @@ #include "qwaylandquickoutput.h" #include "qwaylandquickitem.h" #include "qwaylandoutput.h" +#include <QtCompositor/private/qwaylandcompositor_p.h> QT_BEGIN_NAMESPACE +class QWaylandQuickCompositorPrivate : public QWaylandCompositorPrivate +{ +public: + QWaylandQuickCompositorPrivate(QWaylandCompositor *compositor) + : QWaylandCompositorPrivate(compositor) + { + } +protected: + QWaylandSurface *createDefaultSurface() Q_DECL_OVERRIDE + { + return new QWaylandQuickSurface(); + } +}; + QWaylandQuickCompositor::QWaylandQuickCompositor(QObject *parent) - : QWaylandCompositor(parent) + : QWaylandCompositor(*new QWaylandQuickCompositorPrivate(this), parent) { } @@ -57,11 +72,6 @@ void QWaylandQuickCompositor::create() } -QWaylandSurface *QWaylandQuickCompositor::createDefaultSurfaceType() -{ - return new QWaylandQuickSurface(); -} - void QWaylandQuickCompositor::classBegin() { } diff --git a/src/compositor/compositor_api/qwaylandquickcompositor.h b/src/compositor/compositor_api/qwaylandquickcompositor.h index 21778d2ce..eff0b2f3d 100644 --- a/src/compositor/compositor_api/qwaylandquickcompositor.h +++ b/src/compositor/compositor_api/qwaylandquickcompositor.h @@ -57,10 +57,6 @@ public: protected: void classBegin() Q_DECL_OVERRIDE; void componentComplete() Q_DECL_OVERRIDE; - -private: - - QWaylandSurface *createDefaultSurfaceType() Q_DECL_OVERRIDE; }; QT_END_NAMESPACE |