diff --git a/src/main.cpp b/src/main.cpp index fdfd195f3..2034816d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -29,7 +29,6 @@ int main(int argc, char *argv[]) QGuiApplication::setQuitOnLastWindowClosed(false); QGuiApplication app(argc, argv); - qRegisterMetaType("qw_buffer*"); app.setOrganizationName("deepin"); app.setApplicationName("treeland"); diff --git a/waylib/src/server/qtquick/wbufferitem.cpp b/waylib/src/server/qtquick/wbufferitem.cpp index c55b31113..2d900a51c 100644 --- a/waylib/src/server/qtquick/wbufferitem.cpp +++ b/waylib/src/server/qtquick/wbufferitem.cpp @@ -89,22 +89,28 @@ WOutputRenderWindow *WBufferItem::outputRenderWindow() const return qobject_cast(window()); } -QW_NAMESPACE::qw_buffer *WBufferItem::buffer() const +QObject *WBufferItem::buffer() const { W_DC(WBufferItem); return d->buffer.get(); } -void WBufferItem::setBuffer(QW_NAMESPACE::qw_buffer *buffer) +void WBufferItem::setBuffer(QObject *buffer) { W_D(WBufferItem); - if (d->buffer.get() == buffer) + QW_NAMESPACE::qw_buffer *ibuffer = qobject_cast(buffer); + if (buffer != nullptr && ibuffer == nullptr) { + qCWarning(waylibBufferItem) << "Reject expects a qw_buffer; ignoring incompatible object" << buffer; + return; + } + + if (d->buffer.get() == ibuffer) return; // Validate buffer basic attributes before locking to avoid holding unusable buffers. - if (buffer) { - auto *h = buffer->handle(); + if (ibuffer) { + auto *h = ibuffer->handle(); if (!h || h->width <= 0 || h->height <= 0) { qCWarning(waylibBufferItem) << "Reject buffer with invalid size or handle" << buffer << "w" << (h ? h->width : -1) @@ -113,10 +119,10 @@ void WBufferItem::setBuffer(QW_NAMESPACE::qw_buffer *buffer) } } - if (buffer) - buffer->lock(); + if (ibuffer) + ibuffer->lock(); - d->buffer.reset(buffer); + d->buffer.reset(ibuffer); if (d->textureProvider) d->textureProvider->setBuffer(d->buffer.get()); diff --git a/waylib/src/server/qtquick/wbufferitem.h b/waylib/src/server/qtquick/wbufferitem.h index d3f7caac8..6c8a94b59 100644 --- a/waylib/src/server/qtquick/wbufferitem.h +++ b/waylib/src/server/qtquick/wbufferitem.h @@ -30,15 +30,15 @@ class WAYLIB_SERVER_EXPORT WBufferItem : public QQuickItem, public virtual WText { Q_OBJECT Q_DECLARE_PRIVATE(WBufferItem) - Q_PROPERTY(QW_NAMESPACE::qw_buffer* buffer READ buffer WRITE setBuffer NOTIFY bufferChanged FINAL) + Q_PROPERTY(QObject* buffer READ buffer WRITE setBuffer NOTIFY bufferChanged FINAL) QML_NAMED_ELEMENT(BufferItem) public: explicit WBufferItem(QQuickItem *parent = nullptr); ~WBufferItem() override; - QW_NAMESPACE::qw_buffer *buffer() const; - void setBuffer(QW_NAMESPACE::qw_buffer *buffer); + QObject *buffer() const; + void setBuffer(QObject *buffer); bool isTextureProvider() const override; QSGTextureProvider *textureProvider() const override;