summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2016-08-25 11:06:08 +0200
committerPaul Olav Tvete <paul.tvete@qt.io>2016-08-25 11:06:32 +0200
commit07e37a79485405ce47a30e01d9168e7efa3dda7b (patch)
treeda891fa3ca9cc9861aa79e6eee92aaa9501c0f72
parent768a28b284fa806cba38f864c56ba2e2c37296f2 (diff)
parenta40d9903ae99ce12f66a79347811a54378b1c083 (diff)
Merge remote-tracking branch 'qt/dev' into 5.8
-rw-r--r--examples/wayland/minimal-cpp/window.cpp2
-rw-r--r--examples/wayland/minimal-qml/main.qml18
-rw-r--r--examples/wayland/multi-output/qml/GridScreen.qml2
-rw-r--r--examples/wayland/multi-output/qml/ShellChrome.qml2
-rw-r--r--examples/wayland/pure-qml/qml/Chrome.qml2
-rw-r--r--examples/wayland/qwindow-compositor/compositor.cpp8
-rw-r--r--examples/wayland/qwindow-compositor/compositor.h2
-rw-r--r--examples/wayland/qwindow-compositor/window.cpp2
-rw-r--r--examples/wayland/server-buffer/compositor/main.cpp2
-rw-r--r--src/compositor/compositor_api/qwaylandoutput.cpp2
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem.cpp65
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem.h16
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem_p.h4
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.cpp24
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.h6
-rw-r--r--src/compositor/compositor_api/qwaylandsurface_p.h2
-rw-r--r--src/compositor/compositor_api/qwaylandview.cpp18
-rw-r--r--src/compositor/compositor_api/qwaylandview.h8
-rw-r--r--src/compositor/compositor_api/qwaylandview_p.h4
-rw-r--r--src/compositor/extensions/qwaylandwlshellintegration.cpp10
-rw-r--r--src/compositor/extensions/qwaylandwlshellintegration_p.h2
-rw-r--r--src/imports/compositor/plugins.qmltypes41
-rw-r--r--src/imports/compositor/qwaylandquickcompositorplugin.cpp1
-rw-r--r--tests/auto/compositor/tst_compositor.cpp10
24 files changed, 162 insertions, 91 deletions
diff --git a/examples/wayland/minimal-cpp/window.cpp b/examples/wayland/minimal-cpp/window.cpp
index 25ea6b64f..2d529cce5 100644
--- a/examples/wayland/minimal-cpp/window.cpp
+++ b/examples/wayland/minimal-cpp/window.cpp
@@ -85,7 +85,7 @@ void Window::paintGL()
continue;
GLuint textureId = view->getTexture();
QWaylandSurface *surface = view->surface();
- if (surface && surface->isMapped()) {
+ if (surface && surface->hasContent()) {
QSize s = surface->size();
QPointF pos(sillyrandom(width() - s.width()), sillyrandom(height() - s.height()));
QRectF surfaceGeometry(pos, s);
diff --git a/examples/wayland/minimal-qml/main.qml b/examples/wayland/minimal-qml/main.qml
index 7894a0321..ce64084ce 100644
--- a/examples/wayland/minimal-qml/main.qml
+++ b/examples/wayland/minimal-qml/main.qml
@@ -71,14 +71,12 @@ WaylandCompositor {
// shells (window management protocols). When the
// client creates a new window, we instantiate a
// chromeComponent on the output.
- extensions: [
- WlShell {
- onWlShellSurfaceCreated:
- chromeComponent.createObject(surfaceArea, { "shellSurface": shellSurface } );
- },
- XdgShell {
- onXdgSurfaceCreated:
- chromeComponent.createObject(surfaceArea, { "shellSurface": xdgSurface } );
- }
- ]
+ WlShell {
+ onWlShellSurfaceCreated:
+ chromeComponent.createObject(surfaceArea, { "shellSurface": shellSurface } );
+ }
+ XdgShell {
+ onXdgSurfaceCreated:
+ chromeComponent.createObject(surfaceArea, { "shellSurface": xdgSurface } );
+ }
}
diff --git a/examples/wayland/multi-output/qml/GridScreen.qml b/examples/wayland/multi-output/qml/GridScreen.qml
index 6b1d574cd..3dab99d0a 100644
--- a/examples/wayland/multi-output/qml/GridScreen.qml
+++ b/examples/wayland/multi-output/qml/GridScreen.qml
@@ -73,7 +73,7 @@ WaylandOutput {
height: gridView.cellHeight
sizeFollowsSurface: false
inputEventsEnabled: false
- view.discardFrontBuffers: true
+ allowDiscardFrontBuffer: true
MouseArea {
anchors.fill: parent
onClicked: item.surface.activated()
diff --git a/examples/wayland/multi-output/qml/ShellChrome.qml b/examples/wayland/multi-output/qml/ShellChrome.qml
index b88414b25..709e83679 100644
--- a/examples/wayland/multi-output/qml/ShellChrome.qml
+++ b/examples/wayland/multi-output/qml/ShellChrome.qml
@@ -45,7 +45,7 @@ ShellSurfaceItem {
id: rootChrome
onSurfaceDestroyed: {
- view.bufferLocked = true;
+ bufferLocked = true;
destroyAnimation.start();
}
diff --git a/examples/wayland/pure-qml/qml/Chrome.qml b/examples/wayland/pure-qml/qml/Chrome.qml
index 63b6038ab..d2ff5cc2a 100644
--- a/examples/wayland/pure-qml/qml/Chrome.qml
+++ b/examples/wayland/pure-qml/qml/Chrome.qml
@@ -45,7 +45,7 @@ ShellSurfaceItem {
id: rootChrome
onSurfaceDestroyed: {
- view.bufferLocked = true;
+ bufferLocked = true;
destroyAnimation.start();
}
diff --git a/examples/wayland/qwindow-compositor/compositor.cpp b/examples/wayland/qwindow-compositor/compositor.cpp
index b7cdbbd9f..13e5718d2 100644
--- a/examples/wayland/qwindow-compositor/compositor.cpp
+++ b/examples/wayland/qwindow-compositor/compositor.cpp
@@ -171,7 +171,7 @@ void Compositor::create()
void Compositor::onSurfaceCreated(QWaylandSurface *surface)
{
connect(surface, &QWaylandSurface::surfaceDestroyed, this, &Compositor::surfaceDestroyed);
- connect(surface, &QWaylandSurface::mappedChanged, this, &Compositor::surfaceMappedChanged);
+ connect(surface, &QWaylandSurface::hasContentChanged, this, &Compositor::surfaceHasContentChanged);
connect(surface, &QWaylandSurface::redraw, this, &Compositor::triggerRender);
connect(surface, &QWaylandSurface::subsurfacePositionChanged, this, &Compositor::onSubsurfacePositionChanged);
@@ -184,10 +184,10 @@ void Compositor::onSurfaceCreated(QWaylandSurface *surface)
connect(surface, &QWaylandSurface::offsetForNextFrame, view, &View::onOffsetForNextFrame);
}
-void Compositor::surfaceMappedChanged()
+void Compositor::surfaceHasContentChanged()
{
QWaylandSurface *surface = qobject_cast<QWaylandSurface *>(sender());
- if (surface->isMapped()) {
+ if (surface->hasContent()) {
if (surface->role() == QWaylandWlShellSurface::role()
|| surface->role() == QWaylandXdgSurface::role()
|| surface->role() == QWaylandXdgPopup::role()) {
@@ -374,7 +374,7 @@ void Compositor::adjustCursorSurface(QWaylandSurface *surface, int hotspotX, int
m_cursorHotspotX = hotspotX;
m_cursorHotspotY = hotspotY;
- if (surface && surface->isMapped())
+ if (surface && surface->hasContent())
updateCursor();
}
diff --git a/examples/wayland/qwindow-compositor/compositor.h b/examples/wayland/qwindow-compositor/compositor.h
index 243e5dbef..3de25a9bb 100644
--- a/examples/wayland/qwindow-compositor/compositor.h
+++ b/examples/wayland/qwindow-compositor/compositor.h
@@ -119,7 +119,7 @@ signals:
void frameOffset(const QPoint &offset);
private slots:
- void surfaceMappedChanged();
+ void surfaceHasContentChanged();
void surfaceDestroyed();
void viewSurfaceDestroyed();
void onStartMove();
diff --git a/examples/wayland/qwindow-compositor/window.cpp b/examples/wayland/qwindow-compositor/window.cpp
index 86a1f8651..b73c7be39 100644
--- a/examples/wayland/qwindow-compositor/window.cpp
+++ b/examples/wayland/qwindow-compositor/window.cpp
@@ -129,7 +129,7 @@ void Window::paintGL()
m_textureBlitter.bind(currentTarget);
}
QWaylandSurface *surface = view->surface();
- if (surface && surface->isMapped()) {
+ if (surface && surface->hasContent()) {
QSize s = surface->size();
if (!s.isEmpty()) {
if (m_mouseView == view && m_grabState == ResizeGrab && m_resizeAnchored)
diff --git a/examples/wayland/server-buffer/compositor/main.cpp b/examples/wayland/server-buffer/compositor/main.cpp
index 57ca647b6..9c5ee42a1 100644
--- a/examples/wayland/server-buffer/compositor/main.cpp
+++ b/examples/wayland/server-buffer/compositor/main.cpp
@@ -219,7 +219,7 @@ protected:
void onSurfaceCreated(QWaylandSurface *surface) {
QWaylandQuickItem *item = new QWaylandQuickItem();
item->setSurface(surface);
- connect(surface, &QWaylandSurface::mappedChanged, this, &QmlCompositor::surfaceMapped);
+ connect(surface, &QWaylandSurface::hasContentChanged, this, &QmlCompositor::surfaceMapped);
}
void share_buffer_bind_resource(Resource *resource) Q_DECL_OVERRIDE
diff --git a/src/compositor/compositor_api/qwaylandoutput.cpp b/src/compositor/compositor_api/qwaylandoutput.cpp
index 65bac3352..9e66b9a44 100644
--- a/src/compositor/compositor_api/qwaylandoutput.cpp
+++ b/src/compositor/compositor_api/qwaylandoutput.cpp
@@ -842,7 +842,7 @@ void QWaylandOutput::sendFrameCallbacks()
Q_D(QWaylandOutput);
for (int i = 0; i < d->surfaceViews.size(); i++) {
const QWaylandSurfaceViewMapper &surfacemapper = d->surfaceViews.at(i);
- if (surfacemapper.surface && surfacemapper.surface->isMapped()) {
+ if (surfacemapper.surface && surfacemapper.surface->hasContent()) {
if (!surfacemapper.has_entered) {
surfaceEnter(surfacemapper.surface);
d->surfaceViews[i].has_entered = true;
diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp
index 2b24938fa..6ea44feac 100644
--- a/src/compositor/compositor_api/qwaylandquickitem.cpp
+++ b/src/compositor/compositor_api/qwaylandquickitem.cpp
@@ -777,13 +777,70 @@ void QWaylandQuickItem::setSubsurfaceHandler(QObject *handler)
}
/*!
+ * \property QWaylandQuickItem::output
+ *
+ * This property holds the output on which this item is displayed.
+ */
+QWaylandOutput *QWaylandQuickItem::output() const
+{
+ Q_D(const QWaylandQuickItem);
+ return d->view->output();
+}
+
+void QWaylandQuickItem::setOutput(QWaylandOutput *output)
+{
+ Q_D(QWaylandQuickItem);
+ d->view->setOutput(output);
+}
+
+/*!
+ * \property QWaylandQuickItem::bufferLocked
+ *
+ * This property holds whether the item's buffer is currently locked. As long as
+ * the buffer is locked, it will not be released and returned to the client.
+ *
+ * The default is false.
+ */
+bool QWaylandQuickItem::isBufferLocked() const
+{
+ Q_D(const QWaylandQuickItem);
+ return d->view->isBufferLocked();
+}
+
+void QWaylandQuickItem::setBufferLocked(bool locked)
+{
+ Q_D(QWaylandQuickItem);
+ d->view->setBufferLocked(locked);
+}
+
+/*!
+ * \property bool QWaylandQuickItem::allowDiscardFrontBuffer
+ *
+ * By default, the item locks the current buffer until a new buffer is available
+ * and updatePaintNode() is called. Set this property to true to allow Qt to release the buffer
+ * immediately when the throttling view is no longer using it. This is useful for items that have
+ * slow update intervals.
+ */
+bool QWaylandQuickItem::allowDiscardFrontBuffer() const
+{
+ Q_D(const QWaylandQuickItem);
+ return d->view->allowDiscardFrontBuffer();
+}
+
+void QWaylandQuickItem::setAllowDiscardFrontBuffer(bool discard)
+{
+ Q_D(QWaylandQuickItem);
+ d->view->setAllowDiscardFrontBuffer(discard);
+}
+
+/*!
* \internal
*/
void QWaylandQuickItem::handleSurfaceChanged()
{
Q_D(QWaylandQuickItem);
if (d->oldSurface) {
- disconnect(d->oldSurface, &QWaylandSurface::mappedChanged, this, &QWaylandQuickItem::surfaceMappedChanged);
+ disconnect(d->oldSurface, &QWaylandSurface::hasContentChanged, this, &QWaylandQuickItem::surfaceMappedChanged);
disconnect(d->oldSurface, &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged);
disconnect(d->oldSurface, &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize);
disconnect(d->oldSurface, &QWaylandSurface::bufferScaleChanged, this, &QWaylandQuickItem::updateSize);
@@ -796,7 +853,7 @@ void QWaylandQuickItem::handleSurfaceChanged()
#endif
}
if (QWaylandSurface *newSurface = d->view->surface()) {
- connect(newSurface, &QWaylandSurface::mappedChanged, this, &QWaylandQuickItem::surfaceMappedChanged);
+ connect(newSurface, &QWaylandSurface::hasContentChanged, this, &QWaylandQuickItem::surfaceMappedChanged);
connect(newSurface, &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged);
connect(newSurface, &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize);
connect(newSurface, &QWaylandSurface::bufferScaleChanged, this, &QWaylandQuickItem::updateSize);
@@ -1068,9 +1125,9 @@ void QWaylandQuickItem::updateInputMethod(Qt::InputMethodQueries queries)
QSGNode *QWaylandQuickItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
Q_D(QWaylandQuickItem);
- const bool mapped = surface() && surface()->isMapped() && d->view->currentBuffer().hasBuffer();
+ const bool hasContent = surface() && surface()->hasContent() && d->view->currentBuffer().hasBuffer();
- if (!mapped || !d->paintEnabled) {
+ if (!hasContent || !d->paintEnabled) {
delete oldNode;
return 0;
}
diff --git a/src/compositor/compositor_api/qwaylandquickitem.h b/src/compositor/compositor_api/qwaylandquickitem.h
index 0a6c78919..5c89d58b4 100644
--- a/src/compositor/compositor_api/qwaylandquickitem.h
+++ b/src/compositor/compositor_api/qwaylandquickitem.h
@@ -58,7 +58,6 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandQuickItem : public QQuickItem
{
Q_OBJECT
Q_DECLARE_PRIVATE(QWaylandQuickItem)
- Q_PROPERTY(QWaylandView *view READ view CONSTANT)
Q_PROPERTY(QWaylandCompositor *compositor READ compositor)
Q_PROPERTY(QWaylandSurface *surface READ surface WRITE setSurface NOTIFY surfaceChanged)
Q_PROPERTY(bool paintEnabled READ paintEnabled WRITE setPaintEnabled)
@@ -68,6 +67,9 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandQuickItem : public QQuickItem
Q_PROPERTY(bool focusOnClick READ focusOnClick WRITE setFocusOnClick NOTIFY focusOnClickChanged)
Q_PROPERTY(bool sizeFollowsSurface READ sizeFollowsSurface WRITE setSizeFollowsSurface NOTIFY sizeFollowsSurfaceChanged)
Q_PROPERTY(QObject *subsurfaceHandler READ subsurfaceHandler WRITE setSubsurfaceHandler NOTIFY subsurfaceHandlerChanged)
+ Q_PROPERTY(QWaylandOutput *output READ output WRITE setOutput NOTIFY outputChanged)
+ Q_PROPERTY(bool bufferLocked READ isBufferLocked WRITE setBufferLocked NOTIFY bufferLockedChanged)
+ Q_PROPERTY(bool allowDiscardFrontBuffer READ allowDiscardFrontBuffer WRITE setAllowDiscardFrontBuffer NOTIFY allowDiscardFrontBufferChanged)
public:
QWaylandQuickItem(QQuickItem *parent = nullptr);
~QWaylandQuickItem();
@@ -108,6 +110,15 @@ public:
QObject *subsurfaceHandler() const;
void setSubsurfaceHandler(QObject*);
+ QWaylandOutput *output() const;
+ void setOutput(QWaylandOutput *output);
+
+ bool isBufferLocked() const;
+ void setBufferLocked(bool locked);
+
+ bool allowDiscardFrontBuffer() const;
+ void setAllowDiscardFrontBuffer(bool discard);
+
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
@@ -160,6 +171,9 @@ Q_SIGNALS:
void mouseRelease();
void sizeFollowsSurfaceChanged();
void subsurfaceHandlerChanged();
+ void outputChanged();
+ void bufferLockedChanged();
+ void allowDiscardFrontBufferChanged();
protected:
QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) Q_DECL_OVERRIDE;
diff --git a/src/compositor/compositor_api/qwaylandquickitem_p.h b/src/compositor/compositor_api/qwaylandquickitem_p.h
index fca0d9d29..8c242ac88 100644
--- a/src/compositor/compositor_api/qwaylandquickitem_p.h
+++ b/src/compositor/compositor_api/qwaylandquickitem_p.h
@@ -139,9 +139,11 @@ public:
QObject::connect(view.data(), &QWaylandView::surfaceChanged, q, &QWaylandQuickItem::surfaceChanged);
QObject::connect(view.data(), &QWaylandView::surfaceChanged, q, &QWaylandQuickItem::handleSurfaceChanged);
QObject::connect(view.data(), &QWaylandView::surfaceDestroyed, q, &QWaylandQuickItem::surfaceDestroyed);
+ QObject::connect(view.data(), &QWaylandView::outputChanged, q, &QWaylandQuickItem::outputChanged);
+ QObject::connect(view.data(), &QWaylandView::bufferLockedChanged, q, &QWaylandQuickItem::bufferLockedChanged);
+ QObject::connect(view.data(), &QWaylandView::allowDiscardFrontBufferChanged, q, &QWaylandQuickItem::allowDiscardFrontBuffer);
}
-
void setInputEventsEnabled(bool enable)
{
Q_Q(QWaylandQuickItem);
diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp
index 98f6a1d28..09eba77e0 100644
--- a/src/compositor/compositor_api/qwaylandsurface.cpp
+++ b/src/compositor/compositor_api/qwaylandsurface.cpp
@@ -129,7 +129,7 @@ QWaylandSurfacePrivate::QWaylandSurfacePrivate()
, bufferScale(1)
, isCursorSurface(false)
, destroyed(false)
- , mapped(false)
+ , hasContent(false)
, isInitialized(false)
, contentOrientation(Qt::PrimaryOrientation)
, inputMethodControl(Q_NULLPTR)
@@ -193,9 +193,9 @@ void QWaylandSurfacePrivate::notifyViewsAboutDestruction()
foreach (QWaylandView *view, views) {
QWaylandViewPrivate::get(view)->markSurfaceAsDestroyed(q);
}
- if (mapped) {
- mapped = false;
- emit q->mappedChanged();
+ if (hasContent) {
+ hasContent = false;
+ emit q->hasContentChanged();
}
}
@@ -342,10 +342,10 @@ void QWaylandSurfacePrivate::setBackBuffer(QtWayland::SurfaceBuffer *b, const QR
emit q->damaged(damage);
- bool oldMapped = mapped;
- mapped = QtWayland::SurfaceBuffer::hasContent(buffer);
- if (oldMapped != mapped)
- emit q->mappedChanged();
+ bool oldHasContent = hasContent;
+ hasContent = QtWayland::SurfaceBuffer::hasContent(buffer);
+ if (oldHasContent != hasContent)
+ emit q->hasContentChanged();
if (!pending.offset.isNull())
emit q->offsetForNextFrame(pending.offset);
@@ -484,20 +484,20 @@ QWaylandClient *QWaylandSurface::client() const
}
/*!
- * \qmlproperty bool QtWaylandCompositor::WaylandSurface::isMapped
+ * \qmlproperty bool QtWaylandCompositor::WaylandSurface::hasContent
*
* This property holds whether the WaylandSurface has content.
*/
/*!
- * \property QWaylandSurface::isMapped
+ * \property QWaylandSurface::hasContent
*
* This property holds whether the QWaylandSurface has content.
*/
-bool QWaylandSurface::isMapped() const
+bool QWaylandSurface::hasContent() const
{
Q_D(const QWaylandSurface);
- return d->mapped;
+ return d->hasContent;
}
/*!
diff --git a/src/compositor/compositor_api/qwaylandsurface.h b/src/compositor/compositor_api/qwaylandsurface.h
index 13cf0e437..ed358fefa 100644
--- a/src/compositor/compositor_api/qwaylandsurface.h
+++ b/src/compositor/compositor_api/qwaylandsurface.h
@@ -82,7 +82,7 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandSurface : public QWaylandObject
Q_PROPERTY(int bufferScale READ bufferScale NOTIFY bufferScaleChanged)
Q_PROPERTY(Qt::ScreenOrientation contentOrientation READ contentOrientation NOTIFY contentOrientationChanged)
Q_PROPERTY(QWaylandSurface::Origin origin READ origin NOTIFY originChanged)
- Q_PROPERTY(bool isMapped READ isMapped NOTIFY mappedChanged)
+ Q_PROPERTY(bool hasContent READ hasContent NOTIFY hasContentChanged)
Q_PROPERTY(bool cursorSurface READ isCursorSurface WRITE markAsCursorSurface)
public:
@@ -105,7 +105,7 @@ public:
bool setRole(QWaylandSurfaceRole *role, wl_resource *errorResource, uint32_t errorCode);
QWaylandSurfaceRole *role() const;
- bool isMapped() const;
+ bool hasContent() const;
QSize size() const;
int bufferScale() const;
@@ -144,7 +144,7 @@ protected:
QWaylandSurface(QWaylandSurfacePrivate &dptr);
Q_SIGNALS:
- void mappedChanged();
+ void hasContentChanged();
void damaged(const QRegion &rect);
void parentChanged(QWaylandSurface *newParent, QWaylandSurface *oldParent);
void childAdded(QWaylandSurface *child);
diff --git a/src/compositor/compositor_api/qwaylandsurface_p.h b/src/compositor/compositor_api/qwaylandsurface_p.h
index e37179cc6..0596b61ba 100644
--- a/src/compositor/compositor_api/qwaylandsurface_p.h
+++ b/src/compositor/compositor_api/qwaylandsurface_p.h
@@ -171,7 +171,7 @@ public: //member variables
int bufferScale;
bool isCursorSurface;
bool destroyed;
- bool mapped;
+ bool hasContent;
bool isInitialized;
Qt::ScreenOrientation contentOrientation;
QWindow::Visibility visibility;
diff --git a/src/compositor/compositor_api/qwaylandview.cpp b/src/compositor/compositor_api/qwaylandview.cpp
index f6e086523..f605de55c 100644
--- a/src/compositor/compositor_api/qwaylandview.cpp
+++ b/src/compositor/compositor_api/qwaylandview.cpp
@@ -215,7 +215,7 @@ void QWaylandView::attach(const QWaylandBufferRef &ref, const QRegion &damage)
*
* If this view is set as its surface's throttling view, discardCurrentBuffer()
* will be called on all views of the same surface for which the
- * \l{QWaylandView::discardFrontBuffers}{discardFrontBuffers}
+ * \l{QWaylandView::allowDiscardFrontBuffer}{allowDiscardFrontBuffer}
* property is set to true and the current buffer is the same as the
* throttling view's current buffer.
*
@@ -236,7 +236,7 @@ bool QWaylandView::advance()
if (d->surface && d->surface->throttlingView() == this) {
Q_FOREACH (QWaylandView *view, d->surface->views()) {
- if (view != this && view->discardFrontBuffers() && view->d_func()->currentBuffer == d->currentBuffer)
+ if (view != this && view->allowDiscardFrontBuffer() && view->d_func()->currentBuffer == d->currentBuffer)
view->discardCurrentBuffer();
}
}
@@ -314,24 +314,24 @@ void QWaylandView::setBufferLocked(bool locked)
}
/*!
- * \property bool QWaylandView::discardFrontBuffers
+ * \property bool QWaylandView::allowDiscardFrontBuffer
*
* By default, the view locks the current buffer until advance() is called. Set this property
* to true to allow Qt to release the buffer when the throttling view is no longer using it.
*/
-bool QWaylandView::discardFrontBuffers() const
+bool QWaylandView::allowDiscardFrontBuffer() const
{
Q_D(const QWaylandView);
- return d->discardFrontBuffers;
+ return d->allowDiscardFrontBuffer;
}
-void QWaylandView::setDiscardFrontBuffers(bool discard)
+void QWaylandView::setAllowDiscardFrontBuffer(bool discard)
{
Q_D(QWaylandView);
- if (d->discardFrontBuffers == discard)
+ if (d->allowDiscardFrontBuffer == discard)
return;
- d->discardFrontBuffers = discard;
- emit discardFrontBuffersChanged();
+ d->allowDiscardFrontBuffer = discard;
+ emit allowDiscardFrontBufferChanged();
}
/*!
diff --git a/src/compositor/compositor_api/qwaylandview.h b/src/compositor/compositor_api/qwaylandview.h
index a6c5dce90..6247e06e2 100644
--- a/src/compositor/compositor_api/qwaylandview.h
+++ b/src/compositor/compositor_api/qwaylandview.h
@@ -57,7 +57,7 @@ class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandView : public QObject
Q_PROPERTY(QWaylandSurface *surface READ surface WRITE setSurface NOTIFY surfaceChanged)
Q_PROPERTY(QWaylandOutput *output READ output WRITE setOutput NOTIFY outputChanged)
Q_PROPERTY(bool bufferLocked READ isBufferLocked WRITE setBufferLocked NOTIFY bufferLockedChanged)
- Q_PROPERTY(bool discardFrontBuffers READ discardFrontBuffers WRITE setDiscardFrontBuffers NOTIFY discardFrontBuffersChanged)
+ Q_PROPERTY(bool allowDiscardFrontBuffer READ allowDiscardFrontBuffer WRITE setAllowDiscardFrontBuffer NOTIFY allowDiscardFrontBufferChanged)
public:
QWaylandView(QObject *renderObject = nullptr, QObject *parent = nullptr);
virtual ~QWaylandView();
@@ -79,8 +79,8 @@ public:
bool isBufferLocked() const;
void setBufferLocked(bool locked);
- bool discardFrontBuffers() const;
- void setDiscardFrontBuffers(bool discard);
+ bool allowDiscardFrontBuffer() const;
+ void setAllowDiscardFrontBuffer(bool discard);
struct wl_resource *surfaceResource() const;
@@ -89,7 +89,7 @@ Q_SIGNALS:
void surfaceDestroyed();
void outputChanged();
void bufferLockedChanged();
- void discardFrontBuffersChanged();
+ void allowDiscardFrontBufferChanged();
};
QT_END_NAMESPACE
diff --git a/src/compositor/compositor_api/qwaylandview_p.h b/src/compositor/compositor_api/qwaylandview_p.h
index 768ebd4bc..d9fd352ed 100644
--- a/src/compositor/compositor_api/qwaylandview_p.h
+++ b/src/compositor/compositor_api/qwaylandview_p.h
@@ -72,7 +72,7 @@ public:
, bufferLocked(false)
, broadcastRequestedPositionChanged(false)
, forceAdvanceSucceed(false)
- , discardFrontBuffers(false)
+ , allowDiscardFrontBuffer(false)
{ }
void markSurfaceAsDestroyed(QWaylandSurface *surface);
@@ -89,7 +89,7 @@ public:
bool bufferLocked;
bool broadcastRequestedPositionChanged;
bool forceAdvanceSucceed;
- bool discardFrontBuffers;
+ bool allowDiscardFrontBuffer;
};
QT_END_NAMESPACE
diff --git a/src/compositor/extensions/qwaylandwlshellintegration.cpp b/src/compositor/extensions/qwaylandwlshellintegration.cpp
index ee4783ba9..1acc01dd7 100644
--- a/src/compositor/extensions/qwaylandwlshellintegration.cpp
+++ b/src/compositor/extensions/qwaylandwlshellintegration.cpp
@@ -111,8 +111,8 @@ void WlShellIntegration::handleSetPopup(QWaylandSeat *seat, QWaylandSurface *par
if (!popupShellSurfaces.contains(m_shellSurface)) {
popupShellSurfaces.append(m_shellSurface);
- QObject::connect(m_shellSurface->surface(), &QWaylandSurface::mappedChanged,
- this, &WlShellIntegration::handleSurfaceUnmapped);
+ QObject::connect(m_shellSurface->surface(), &QWaylandSurface::hasContentChanged,
+ this, &WlShellIntegration::handleSurfaceHasContentChanged);
}
}
@@ -120,8 +120,8 @@ void WlShellIntegration::handlePopupClosed()
{
handlePopupRemoved();
if (m_shellSurface)
- QObject::disconnect(m_shellSurface->surface(), &QWaylandSurface::mappedChanged,
- this, &WlShellIntegration::handleSurfaceUnmapped);
+ QObject::disconnect(m_shellSurface->surface(), &QWaylandSurface::hasContentChanged,
+ this, &WlShellIntegration::handleSurfaceHasContentChanged);
}
void WlShellIntegration::handlePopupRemoved()
@@ -141,7 +141,7 @@ void WlShellIntegration::handleShellSurfaceDestroyed()
m_shellSurface = nullptr;
}
-void WlShellIntegration::handleSurfaceUnmapped()
+void WlShellIntegration::handleSurfaceHasContentChanged()
{
if (!m_shellSurface || !m_shellSurface->surface()->size().isEmpty())
return;
diff --git a/src/compositor/extensions/qwaylandwlshellintegration_p.h b/src/compositor/extensions/qwaylandwlshellintegration_p.h
index 69bbbcd9c..f68040cdf 100644
--- a/src/compositor/extensions/qwaylandwlshellintegration_p.h
+++ b/src/compositor/extensions/qwaylandwlshellintegration_p.h
@@ -69,7 +69,7 @@ private Q_SLOTS:
void handleStartResize(QWaylandSeat *seat, QWaylandWlShellSurface::ResizeEdge edges);
void handleSetPopup(QWaylandSeat *seat, QWaylandSurface *parent, const QPoint &relativeToParent);
void handleShellSurfaceDestroyed();
- void handleSurfaceUnmapped();
+ void handleSurfaceHasContentChanged();
void adjustOffsetForNextFrame(const QPointF &offset);
private:
diff --git a/src/imports/compositor/plugins.qmltypes b/src/imports/compositor/plugins.qmltypes
index 2cd5a0e33..4c7cd7aa5 100644
--- a/src/imports/compositor/plugins.qmltypes
+++ b/src/imports/compositor/plugins.qmltypes
@@ -14,6 +14,7 @@ Module {
exports: ["QtWayland.Compositor/WaylandClient 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
+ Property { name: "compositor"; type: "QWaylandCompositor"; isReadonly: true; isPointer: true }
Property { name: "userId"; type: "qlonglong"; isReadonly: true }
Property { name: "groupId"; type: "qlonglong"; isReadonly: true }
Property { name: "processId"; type: "qlonglong"; isReadonly: true }
@@ -26,7 +27,7 @@ Module {
}
Component {
name: "QWaylandCompositor"
- prototype: "QObject"
+ prototype: "QWaylandObject"
exports: ["QtWayland.Compositor/WaylandCompositorBase 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
@@ -64,6 +65,14 @@ Module {
Parameter { name: "newDevice"; type: "QWaylandSeat"; isPointer: true }
Parameter { name: "oldDevice"; type: "QWaylandSeat"; isPointer: true }
}
+ Signal {
+ name: "outputAdded"
+ Parameter { name: "output"; type: "QWaylandOutput"; isPointer: true }
+ }
+ Signal {
+ name: "outputRemoved"
+ Parameter { name: "output"; type: "QWaylandOutput"; isPointer: true }
+ }
Method { name: "processWaylandEvents" }
Method {
name: "destroyClientForSurface"
@@ -81,7 +90,7 @@ Module {
}
Component {
name: "QWaylandCompositorExtension"
- prototype: "QObject"
+ prototype: "QWaylandObject"
exports: ["QtWayland.Compositor/WaylandExtension 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
@@ -105,7 +114,7 @@ Module {
}
Component {
name: "QWaylandSeat"
- prototype: "QObject"
+ prototype: "QWaylandObject"
exports: ["QtWayland.Compositor/WaylandSeat 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
@@ -148,9 +157,10 @@ Module {
Property { name: "windowSystemCursorEnabled"; type: "bool" }
Signal { name: "hoveredChanged" }
}
+ Component { name: "QWaylandObject"; prototype: "QObject" }
Component {
name: "QWaylandOutput"
- prototype: "QObject"
+ prototype: "QWaylandObject"
exports: ["QtWayland.Compositor/WaylandOutputBase 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
@@ -233,7 +243,6 @@ Module {
prototype: "QQuickItem"
exports: ["QtWayland.Compositor/WaylandQuickItem 1.0"]
exportMetaObjectRevisions: [0]
- Property { name: "view"; type: "QWaylandView"; isReadonly: true; isPointer: true }
Property { name: "compositor"; type: "QWaylandCompositor"; isReadonly: true; isPointer: true }
Property { name: "surface"; type: "QWaylandSurface"; isPointer: true }
Property { name: "paintEnabled"; type: "bool" }
@@ -243,6 +252,8 @@ Module {
Property { name: "focusOnClick"; type: "bool" }
Property { name: "sizeFollowsSurface"; type: "bool" }
Property { name: "subsurfaceHandler"; type: "QObject"; isPointer: true }
+ Property { name: "bufferLocked"; type: "bool" }
+ Property { name: "allowDiscardFrontBuffer"; type: "bool" }
Signal { name: "surfaceDestroyed" }
Signal {
name: "mouseMove"
@@ -312,7 +323,7 @@ Module {
}
Component {
name: "QWaylandSurface"
- prototype: "QObject"
+ prototype: "QWaylandObject"
exports: ["QtWayland.Compositor/WaylandSurfaceBase 1.0"]
isCreatable: false
exportMetaObjectRevisions: [0]
@@ -393,19 +404,6 @@ Module {
Property { name: "data"; type: "QObject"; isList: true; isReadonly: true }
}
Component {
- name: "QWaylandView"
- prototype: "QObject"
- exports: ["QtWayland.Compositor/WaylandView 1.0"]
- isCreatable: false
- exportMetaObjectRevisions: [0]
- Property { name: "renderObject"; type: "QObject"; isReadonly: true; isPointer: true }
- Property { name: "surface"; type: "QWaylandSurface"; isPointer: true }
- Property { name: "output"; type: "QWaylandOutput"; isPointer: true }
- Property { name: "bufferLocked"; type: "bool" }
- Property { name: "discardFrontBuffers"; type: "bool" }
- Signal { name: "surfaceDestroyed" }
- }
- Component {
name: "QWaylandWlShell"
prototype: "QWaylandCompositorExtension"
Signal {
@@ -615,6 +613,8 @@ Module {
Parameter { name: "seat"; type: "QWaylandSeat"; isPointer: true }
Parameter { name: "edges"; type: "ResizeEdge" }
}
+ Signal { name: "setTopLevel" }
+ Signal { name: "setTransient" }
Signal { name: "setMaximized" }
Signal { name: "unsetMaximized" }
Signal {
@@ -692,7 +692,6 @@ Module {
Parameter { name: "hotspotX"; type: "QVariant" }
Parameter { name: "hotspotY"; type: "QVariant" }
}
- Property { name: "view"; type: "QWaylandView"; isReadonly: true; isPointer: true }
Property { name: "compositor"; type: "QWaylandCompositor"; isReadonly: true; isPointer: true }
Property { name: "surface"; type: "QWaylandSurface"; isPointer: true }
Property { name: "paintEnabled"; type: "bool" }
@@ -702,6 +701,8 @@ Module {
Property { name: "focusOnClick"; type: "bool" }
Property { name: "sizeFollowsSurface"; type: "bool" }
Property { name: "subsurfaceHandler"; type: "QObject"; isPointer: true }
+ Property { name: "bufferLocked"; type: "bool" }
+ Property { name: "allowDiscardFrontBuffer"; type: "bool" }
Signal { name: "surfaceDestroyed" }
Signal {
name: "mouseMove"
diff --git a/src/imports/compositor/qwaylandquickcompositorplugin.cpp b/src/imports/compositor/qwaylandquickcompositorplugin.cpp
index a5f520433..3bcb61813 100644
--- a/src/imports/compositor/qwaylandquickcompositorplugin.cpp
+++ b/src/imports/compositor/qwaylandquickcompositorplugin.cpp
@@ -121,7 +121,6 @@ public:
qmlRegisterUncreatableType<QWaylandCompositorExtension>(uri, 1, 0, "WaylandExtension", QObject::tr("Cannot create instance of WaylandExtension"));
qmlRegisterUncreatableType<QWaylandClient>(uri, 1, 0, "WaylandClient", QObject::tr("Cannot create instance of WaylandClient"));
qmlRegisterUncreatableType<QWaylandOutput>(uri, 1, 0, "WaylandOutputBase", QObject::tr("Cannot create instance of WaylandOutputBase, use WaylandOutput instead"));
- qmlRegisterUncreatableType<QWaylandView>(uri, 1, 0, "WaylandView", QObject::tr("Cannot create instance of WaylandView, it can be retrieved by accessor on WaylandQuickItem"));
qmlRegisterUncreatableType<QWaylandSeat>(uri, 1, 0, "WaylandSeat", QObject::tr("Cannot create instance of WaylandSeat"));
qmlRegisterUncreatableType<QWaylandDrag>(uri, 1, 0, "WaylandDrag", QObject::tr("Cannot create instance of WaylandDrag"));
qmlRegisterUncreatableType<QWaylandCompositor>(uri, 1, 0, "WaylandCompositorBase", QObject::tr("Cannot create instance of WaylandCompositorBase, use WaylandCompositor instead"));
diff --git a/tests/auto/compositor/tst_compositor.cpp b/tests/auto/compositor/tst_compositor.cpp
index 606a7e7a8..05e876dd0 100644
--- a/tests/auto/compositor/tst_compositor.cpp
+++ b/tests/auto/compositor/tst_compositor.cpp
@@ -212,10 +212,10 @@ void tst_WaylandCompositor::mapSurface()
QWaylandSurface *waylandSurface = compositor.surfaces.at(0);
- QSignalSpy mappedSpy(waylandSurface, SIGNAL(mappedChanged()));
+ QSignalSpy hasContentSpy(waylandSurface, SIGNAL(hasContentChanged()));
QCOMPARE(waylandSurface->size(), QSize());
- QCOMPARE(waylandSurface->isMapped(), false);
+ QCOMPARE(waylandSurface->hasContent(), false);
QSize size(256, 256);
ShmBuffer buffer(size, client.shm);
@@ -227,8 +227,8 @@ void tst_WaylandCompositor::mapSurface()
wl_surface_commit(surface);
QTRY_COMPARE(waylandSurface->size(), size);
- QTRY_COMPARE(waylandSurface->isMapped(), true);
- QTRY_COMPARE(mappedSpy.count(), 1);
+ QTRY_COMPARE(waylandSurface->hasContent(), true);
+ QTRY_COMPARE(hasContentSpy.count(), 1);
wl_surface_destroy(surface);
}
@@ -296,7 +296,7 @@ void tst_WaylandCompositor::frameCallback()
wl_surface_damage(surface, 0, 0, size.width(), size.height());
wl_surface_commit(surface);
- QTRY_COMPARE(waylandSurface->isMapped(), true);
+ QTRY_COMPARE(waylandSurface->hasContent(), true);
QTRY_COMPARE(damagedSpy.count(), i + 1);
QCOMPARE(static_cast<BufferView*>(waylandSurface->views().first())->image(), buffer.image);