diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-06 13:41:27 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:10:32 +0200 |
commit | fd9a8983832bbeb240097327ff9f8565f7356b08 (patch) | |
tree | db359b31c502694b3c33e451825fda7257c31bc1 /src | |
parent | e6a44555c60859fd61a6cc78140a36fa36e7b9f5 (diff) |
Fixups after rebasing
Change-Id: Ie5d8899157d77f83f2cf65f236d534b972aa4770
Diffstat (limited to 'src')
17 files changed, 62 insertions, 193 deletions
diff --git a/src/compositor/compositor_api/qwaylandoutput.cpp b/src/compositor/compositor_api/qwaylandoutput.cpp index 9b8b252ba..08aaf589d 100644 --- a/src/compositor/compositor_api/qwaylandoutput.cpp +++ b/src/compositor/compositor_api/qwaylandoutput.cpp @@ -282,6 +282,8 @@ QWaylandView *QWaylandOutput::pickView(const QPointF &outputPosition) const const QVector<QtWayland::SurfaceViewMapper> surfaceViewMappers = d_ptr->surfaceMappers(); for (int nSurface = 0; surfaceViewMappers.size(); nSurface++) { const QWaylandSurface *surface = surfaceViewMappers.at(nSurface).surface; + if (surface->isCursorSurface()) + continue; const QVector<QWaylandView *> views = surfaceViewMappers.at(nSurface).views; for (int nView = 0; views.size(); nView++) { if (QRectF(views.at(nView)->requestedPosition(), surface->size()).contains(outputPosition)) diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp index ef62257ad..4e357dea2 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.cpp +++ b/src/compositor/compositor_api/qwaylandquickitem.cpp @@ -239,6 +239,7 @@ void QWaylandQuickItem::hoverMoveEvent(QHoverEvent *event) event->ignore(); return; } + } if (shouldSendInputEvents()) { QWaylandInputDevice *inputDevice = compositor()->inputDeviceFor(event); inputDevice->sendMouseMoveEvent(this, event->pos()); @@ -335,16 +336,14 @@ void QWaylandQuickItem::waylandSurfaceChanged(QWaylandSurface *newSurface, QWayl { QWaylandView::waylandSurfaceChanged(newSurface, oldSurface); if (oldSurface) { - disconnect(oldSurface, &QWaylandSurface::mapped, this, &QWaylandQuickItem::surfaceMapped); - disconnect(oldSurface, &QWaylandSurface::unmapped, this, &QWaylandQuickItem::surfaceUnmapped); + disconnect(oldSurface, &QWaylandSurface::mappedChanged, this, &QWaylandQuickItem::surfaceMappedChanged); disconnect(oldSurface, &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged); disconnect(oldSurface, &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize); disconnect(oldSurface, &QWaylandSurface::configure, this, &QWaylandQuickItem::updateBuffer); disconnect(oldSurface, &QWaylandSurface::redraw, this, &QQuickItem::update); } if (newSurface) { - connect(newSurface, &QWaylandSurface::mapped, this, &QWaylandQuickItem::surfaceMapped); - connect(newSurface, &QWaylandSurface::unmapped, this, &QWaylandQuickItem::surfaceUnmapped); + connect(newSurface, &QWaylandSurface::mappedChanged, this, &QWaylandQuickItem::surfaceMappedChanged); connect(newSurface, &QWaylandSurface::parentChanged, this, &QWaylandQuickItem::parentChanged); connect(newSurface, &QWaylandSurface::sizeChanged, this, &QWaylandQuickItem::updateSize); connect(newSurface, &QWaylandSurface::configure, this, &QWaylandQuickItem::updateBuffer); @@ -379,12 +378,7 @@ void QWaylandQuickItem::takeFocus(QWaylandInputDevice *device) target->setKeyboardFocus(surface()); } -void QWaylandQuickItem::surfaceMapped() -{ - update(); -} - -void QWaylandQuickItem::surfaceUnmapped() +void QWaylandQuickItem::surfaceMappedChanged() { update(); } diff --git a/src/compositor/compositor_api/qwaylandquickitem.h b/src/compositor/compositor_api/qwaylandquickitem.h index 20a4256a5..d7b32c1aa 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.h +++ b/src/compositor/compositor_api/qwaylandquickitem.h @@ -112,6 +112,7 @@ protected: void mouseReleaseEvent(QMouseEvent *event); void hoverEnterEvent(QHoverEvent *event); void hoverMoveEvent(QHoverEvent *event); + void hoverLeaveEvent(QHoverEvent *event); void wheelEvent(QWheelEvent *event); void keyPressEvent(QKeyEvent *event); @@ -128,8 +129,7 @@ public Q_SLOTS: void setPaintEnabled(bool paintEnabled); private Q_SLOTS: - void surfaceMapped(); - void surfaceUnmapped(); + void surfaceMappedChanged(); void parentChanged(QWaylandSurface *newParent, QWaylandSurface *oldParent); void updateSize(); void updateBuffer(bool hasBuffer); diff --git a/src/compositor/compositor_api/qwaylandquicksurface.cpp b/src/compositor/compositor_api/qwaylandquicksurface.cpp index 71bb6e3a6..f5399699d 100644 --- a/src/compositor/compositor_api/qwaylandquicksurface.cpp +++ b/src/compositor/compositor_api/qwaylandquicksurface.cpp @@ -114,46 +114,6 @@ QWindow *QWaylandQuickSurface::primaryOutputWindow() const return primaryOutput() ? primaryOutput()->window() : Q_NULLPTR; } -bool QWaylandQuickSurface::event(QEvent *e) -{ - if (e->type() == static_cast<QEvent::Type>(QWaylandSurfaceLeaveEvent::WaylandSurfaceLeave)) { - QWaylandSurfaceLeaveEvent *event = static_cast<QWaylandSurfaceLeaveEvent *>(e); - - if (event->output()) { - QQuickWindow *oldWindow = static_cast<QQuickWindow *>(event->output()->window()); - disconnect(oldWindow, &QQuickWindow::beforeSynchronizing, - this, &QWaylandQuickSurface::updateTexture); - disconnect(oldWindow, &QQuickWindow::sceneGraphInvalidated, - this, &QWaylandQuickSurface::invalidateTexture); - disconnect(oldWindow, &QQuickWindow::sceneGraphAboutToStop, - this, &QWaylandQuickSurface::invalidateTexture); - } - - return true; - } - - if (e->type() == static_cast<QEvent::Type>(QWaylandSurfaceEnterEvent::WaylandSurfaceEnter)) { - QWaylandSurfaceEnterEvent *event = static_cast<QWaylandSurfaceEnterEvent *>(e); - - if (event->output()) { - QQuickWindow *window = static_cast<QQuickWindow *>(event->output()->window()); - connect(window, &QQuickWindow::beforeSynchronizing, - this, &QWaylandQuickSurface::updateTexture, - Qt::DirectConnection); - connect(window, &QQuickWindow::sceneGraphInvalidated, - this, &QWaylandQuickSurface::invalidateTexture, - Qt::DirectConnection); - connect(window, &QQuickWindow::sceneGraphAboutToStop, - this, &QWaylandQuickSurface::invalidateTexture, - Qt::DirectConnection); - } - - return true; - } - - return QObject::event(e); -} - bool QWaylandQuickSurface::clientRenderingEnabled() const { Q_D(const QWaylandQuickSurface); diff --git a/src/compositor/compositor_api/qwaylandquicksurface.h b/src/compositor/compositor_api/qwaylandquicksurface.h index abc363347..622a1e7e0 100644 --- a/src/compositor/compositor_api/qwaylandquicksurface.h +++ b/src/compositor/compositor_api/qwaylandquicksurface.h @@ -65,8 +65,6 @@ public: void setClientRenderingEnabled(bool enabled); QWindow *primaryOutputWindow() const; -protected: - bool event(QEvent *event) Q_DECL_OVERRIDE; Q_SIGNALS: void useTextureAlphaChanged(); diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp index 6fcf6ea56..d6d9b1d53 100644 --- a/src/compositor/compositor_api/qwaylandsurface.cpp +++ b/src/compositor/compositor_api/qwaylandsurface.cpp @@ -58,10 +58,9 @@ #include <QtGui/QGuiApplication> #include <QtGui/QScreen> -QT_BEGIN_NAMESPACE +#include <QtCore/QDebug> -const QEvent::Type QWaylandSurfaceEnterEvent::WaylandSurfaceEnter = (QEvent::Type)QEvent::registerEventType(); -const QEvent::Type QWaylandSurfaceLeaveEvent::WaylandSurfaceLeave = (QEvent::Type)QEvent::registerEventType(); +QT_BEGIN_NAMESPACE QWaylandSurfacePrivate::QWaylandSurfacePrivate(wl_client *wlClient, quint32 id, int version, QWaylandCompositor *compositor, QWaylandSurface *surface) : QtWayland::Surface(wlClient, id, version, compositor, surface) @@ -78,64 +77,6 @@ QWaylandSurfacePrivate::~QWaylandSurfacePrivate() views.clear(); } -class QWaylandSurfaceEnterEventPrivate -{ -public: - QWaylandSurfaceEnterEventPrivate(QWaylandOutput *_output) - : output(_output) - { - } - - QWaylandOutput *output; -}; - - -QWaylandSurfaceEnterEvent::QWaylandSurfaceEnterEvent(QWaylandOutput *output) - : QEvent(WaylandSurfaceEnter) - , d(new QWaylandSurfaceEnterEventPrivate(output)) -{ -} - -QWaylandSurfaceEnterEvent::~QWaylandSurfaceEnterEvent() -{ - delete d; -} - -QWaylandOutput *QWaylandSurfaceEnterEvent::output() const -{ - return d->output; -} - - -class QWaylandSurfaceLeaveEventPrivate -{ -public: - QWaylandSurfaceLeaveEventPrivate(QWaylandOutput *_output) - : output(_output) - { - } - - QWaylandOutput *output; -}; - - -QWaylandSurfaceLeaveEvent::QWaylandSurfaceLeaveEvent(QWaylandOutput *output) - : QEvent(WaylandSurfaceLeave) - , d(new QWaylandSurfaceLeaveEventPrivate(output)) -{ -} - -QWaylandSurfaceLeaveEvent::~QWaylandSurfaceLeaveEvent() -{ - delete d; -} - -QWaylandOutput *QWaylandSurfaceLeaveEvent::output() const -{ - return d->output; -} - - QWaylandSurface::QWaylandSurface(wl_client *client, quint32 id, int version, QWaylandCompositor *compositor) : QObject(*new QWaylandSurfacePrivate(client, id, version, compositor, this)) { @@ -158,6 +99,7 @@ QWaylandClient *QWaylandSurface::client() const Q_D(const QWaylandSurface); if (d->isDestroyed() || !d->compositor()->clients().contains(d->client)) return Q_NULLPTR; + return d->client; } @@ -329,12 +271,6 @@ void QWaylandSurface::deref() compositor()->handle()->destroySurface(d); } -void QWaylandSurface::setMapped(bool mapped) -{ - Q_D(QWaylandSurface); - d->setMapped(mapped); -} - QList<QWaylandView *> QWaylandSurface::views() const { Q_D(const QWaylandSurface); diff --git a/src/compositor/compositor_api/qwaylandsurface.h b/src/compositor/compositor_api/qwaylandsurface.h index 2295a3a34..038c7d611 100644 --- a/src/compositor/compositor_api/qwaylandsurface.h +++ b/src/compositor/compositor_api/qwaylandsurface.h @@ -66,38 +66,6 @@ class SurfacePrivate; class ExtendedSurface; } -class QWaylandSurfaceEnterEventPrivate; - -class Q_COMPOSITOR_EXPORT QWaylandSurfaceEnterEvent : public QEvent -{ -public: - QWaylandSurfaceEnterEvent(QWaylandOutput *output); - ~QWaylandSurfaceEnterEvent(); - - QWaylandOutput *output() const; - - static const QEvent::Type WaylandSurfaceEnter; - -private: - QWaylandSurfaceEnterEventPrivate *d; -}; - -class QWaylandSurfaceLeaveEventPrivate; - -class Q_COMPOSITOR_EXPORT QWaylandSurfaceLeaveEvent : public QEvent -{ -public: - QWaylandSurfaceLeaveEvent(QWaylandOutput *output); - ~QWaylandSurfaceLeaveEvent(); - - QWaylandOutput *output() const; - - static const QEvent::Type WaylandSurfaceLeave; - -private: - QWaylandSurfaceLeaveEventPrivate *d; -}; - class Q_COMPOSITOR_EXPORT QWaylandSurface : public QObject, public QWaylandExtensionContainer { Q_OBJECT @@ -109,6 +77,7 @@ class Q_COMPOSITOR_EXPORT QWaylandSurface : public QObject, public QWaylandExten Q_PROPERTY(QString title READ title NOTIFY titleChanged) Q_PROPERTY(QWaylandOutput *primaryOutput READ primaryOutput WRITE setPrimaryOutput NOTIFY primaryOutputChanged) Q_PROPERTY(QWaylandSurface::Origin origin READ origin NOTIFY originChanged) + Q_PROPERTY(bool isMapped READ isMapped NOTIFY mappedChanged) public: enum Origin { @@ -156,7 +125,6 @@ public: void ref(); void deref(); - void setMapped(bool mapped); QList<QWaylandView *> views() const; @@ -176,8 +144,7 @@ protected: QWaylandSurface(QWaylandSurfacePrivate *dptr); Q_SIGNALS: - void mapped(); - void unmapped(); + void mappedChanged(); void damaged(const QRegion &rect); void parentChanged(QWaylandSurface *newParent, QWaylandSurface *oldParent); void sizeChanged(); diff --git a/src/compositor/compositor_api/qwaylandview.cpp b/src/compositor/compositor_api/qwaylandview.cpp index 81c199964..1a64b73ee 100644 --- a/src/compositor/compositor_api/qwaylandview.cpp +++ b/src/compositor/compositor_api/qwaylandview.cpp @@ -104,10 +104,13 @@ void QWaylandView::setSurface(QWaylandSurface *newSurface) QWaylandSurfacePrivate::get(newSurface)->refView(this); waylandSurfaceChanged(newSurface, oldSurface); - if (!d->lockedBuffer) + if (!d->lockedBuffer) { d->currentBuffer = QWaylandBufferRef(); + d->currentDamage = QRegion(); + } d->nextBuffer = QWaylandBufferRef(); + d->nextDamage = QRegion(); } QWaylandOutput *QWaylandView::output() const @@ -157,11 +160,12 @@ QPointF QWaylandView::pos() const return d->requestedPos; } -void QWaylandView::attach(const QWaylandBufferRef &ref) +void QWaylandView::attach(const QWaylandBufferRef &ref, const QRegion &damage) { Q_D(QWaylandView); QMutexLocker locker(&d->bufferMutex); d->nextBuffer = ref; + d->nextDamage = damage; } bool QWaylandView::advance() @@ -175,6 +179,7 @@ bool QWaylandView::advance() QMutexLocker locker(&d->bufferMutex); d->currentBuffer = d->nextBuffer; + d->currentDamage = d->nextDamage; return true; } @@ -185,6 +190,13 @@ QWaylandBufferRef QWaylandView::currentBuffer() return d->currentBuffer; } +QRegion QWaylandView::currentDamage() +{ + Q_D(QWaylandView); + QMutexLocker locker(&d->bufferMutex); + return d->currentDamage; +} + bool QWaylandView::lockedBuffer() const { Q_D(const QWaylandView); diff --git a/src/compositor/compositor_api/qwaylandview.h b/src/compositor/compositor_api/qwaylandview.h index 3e69e9b8a..a11e20df9 100644 --- a/src/compositor/compositor_api/qwaylandview.h +++ b/src/compositor/compositor_api/qwaylandview.h @@ -67,9 +67,10 @@ public: virtual QPointF requestedPosition() const; virtual QPointF pos() const; - virtual void attach(const QWaylandBufferRef &ref); + virtual void attach(const QWaylandBufferRef &ref, const QRegion &damage); virtual bool advance(); virtual QWaylandBufferRef currentBuffer(); + virtual QRegion currentDamage(); bool lockedBuffer() const; void setLockedBuffer(bool locked); diff --git a/src/compositor/compositor_api/qwaylandview_p.h b/src/compositor/compositor_api/qwaylandview_p.h index c805e78df..777675f96 100644 --- a/src/compositor/compositor_api/qwaylandview_p.h +++ b/src/compositor/compositor_api/qwaylandview_p.h @@ -73,7 +73,9 @@ public: QPointF requestedPos; QMutex bufferMutex; QWaylandBufferRef currentBuffer; + QRegion currentDamage; QWaylandBufferRef nextBuffer; + QRegion nextDamage; bool lockedBuffer; bool broadcastRequestedPositionChanged; }; diff --git a/src/compositor/extensions/qwlshellsurface.cpp b/src/compositor/extensions/qwlshellsurface.cpp index e2d92c5ed..1a4e87bbb 100644 --- a/src/compositor/extensions/qwlshellsurface.cpp +++ b/src/compositor/extensions/qwlshellsurface.cpp @@ -92,8 +92,7 @@ ShellSurface::ShellSurface(Shell *shell, wl_client *client, uint32_t id, Surface , m_transientParent(0) , m_transientOffset() { - connect(surface->waylandSurface(), &QWaylandSurface::configure, this, &ShellSurface::configure); - connect(surface->waylandSurface(), &QWaylandSurface::mapped, this, &ShellSurface::mapped); + connect(surface->waylandSurface(), &QWaylandSurface::mappedChanged, this, &ShellSurface::mappedChanged); connect(surface->waylandSurface(), &QWaylandSurface::offsetForNextFrame, this, &ShellSurface::adjustOffset); } @@ -169,13 +168,11 @@ void ShellSurface::setOffset(const QPointF &offset) setTransientOffset(offset); } -void ShellSurface::configure(bool hasBuffer) +void ShellSurface::mappedChanged() { - m_surface->setMapped(hasBuffer); -} + if (!m_surface->waylandSurface()->isMapped()) + return; -void ShellSurface::mapped() -{ if (m_surfaceType == Popup) { if (m_surface->mapped() && m_popupGrabber->grabSerial() == m_popupSerial) { m_popupGrabber->addPopup(this); diff --git a/src/compositor/extensions/qwlshellsurface_p.h b/src/compositor/extensions/qwlshellsurface_p.h index 8afc2fb25..d222fba03 100644 --- a/src/compositor/extensions/qwlshellsurface_p.h +++ b/src/compositor/extensions/qwlshellsurface_p.h @@ -101,8 +101,6 @@ public: void setOffset(const QPointF &offset); - void configure(bool hasBuffer); - void requestSize(const QSize &size); Q_INVOKABLE void ping(); @@ -126,7 +124,7 @@ Q_SIGNALS: void surfaceTypeChanged(); private Q_SLOTS: - void mapped(); + void mappedChanged(); void adjustOffset(const QPoint &p); private: diff --git a/src/compositor/wayland_wrapper/qwlcompositor.cpp b/src/compositor/wayland_wrapper/qwlcompositor.cpp index 722893bbf..3fef11521 100644 --- a/src/compositor/wayland_wrapper/qwlcompositor.cpp +++ b/src/compositor/wayland_wrapper/qwlcompositor.cpp @@ -100,8 +100,6 @@ QT_BEGIN_NAMESPACE namespace QtWayland { -static Compositor *compositor; - class WindowSystemEventHandler : public QWindowSystemEventHandler { public: diff --git a/src/compositor/wayland_wrapper/qwlkeyboard.cpp b/src/compositor/wayland_wrapper/qwlkeyboard.cpp index 7ee0e11cc..d40422c31 100644 --- a/src/compositor/wayland_wrapper/qwlkeyboard.cpp +++ b/src/compositor/wayland_wrapper/qwlkeyboard.cpp @@ -113,6 +113,8 @@ QWaylandKeyboardPrivate *QWaylandKeyboardPrivate::get(QWaylandKeyboard *keyboard void QWaylandKeyboardPrivate::focused(QWaylandSurface *surface) { + if (surface && surface->isCursorSurface()) + surface = Q_NULLPTR; if (m_focusResource && m_focus != surface) { uint32_t serial = wl_display_next_serial(compositor()->waylandDisplay()); send_leave(m_focusResource->handle, serial, m_focus->handle()->resource()->handle); diff --git a/src/compositor/wayland_wrapper/qwlkeyboard_p.h b/src/compositor/wayland_wrapper/qwlkeyboard_p.h index 1c1651989..bcd0bab69 100644 --- a/src/compositor/wayland_wrapper/qwlkeyboard_p.h +++ b/src/compositor/wayland_wrapper/qwlkeyboard_p.h @@ -100,16 +100,17 @@ public: struct xkb_state *xkbState() const { return m_state; } uint32_t xkbModsMask() const { return m_modsDepressed | m_modsLatched | m_modsLocked; } #endif + void keyEvent(uint code, uint32_t state); + void sendKeyEvent(uint code, uint32_t state); + void updateModifierState(uint code, uint32_t state); + void updateKeymap(); + protected: void keyboard_bind_resource(Resource *resource); void keyboard_destroy_resource(Resource *resource); void keyboard_release(Resource *resource) Q_DECL_OVERRIDE; private: - void keyEvent(uint code, uint32_t state); - void sendKeyEvent(uint code, uint32_t state); - void updateModifierState(uint code, uint32_t state); - void updateKeymap(); #ifndef QT_NO_WAYLAND_XKB void initXKB(); diff --git a/src/compositor/wayland_wrapper/qwlpointer.cpp b/src/compositor/wayland_wrapper/qwlpointer.cpp index cf02d003c..13963d269 100644 --- a/src/compositor/wayland_wrapper/qwlpointer.cpp +++ b/src/compositor/wayland_wrapper/qwlpointer.cpp @@ -147,6 +147,8 @@ void QWaylandPointerPrivate::sendMouseReleaseEvent(Qt::MouseButton button) void QWaylandPointerPrivate::sendMouseMoveEvent(QWaylandView *view, const QPointF &localPos, const QPointF &outputSpacePos) { Q_Q(QWaylandPointer); + if (view && (!view->surface() || view->surface()->isCursorSurface())) + view = Q_NULLPTR; m_seat->setMouseFocus(view); m_localPosition = localPos; m_spacePosition = outputSpacePos; diff --git a/src/compositor/wayland_wrapper/qwlsurface.cpp b/src/compositor/wayland_wrapper/qwlsurface.cpp index 95aa8c98b..7992f6d18 100644 --- a/src/compositor/wayland_wrapper/qwlsurface.cpp +++ b/src/compositor/wayland_wrapper/qwlsurface.cpp @@ -163,11 +163,6 @@ Surface *Surface::fromResource(struct ::wl_resource *resource) return static_cast<Surface *>(Resource::fromResource(resource)->surface_object); } -bool Surface::mapped() const -{ - return m_buffer && bool(m_buffer->waylandBufferHandle()); -} - QSize Surface::size() const { return m_size; @@ -278,31 +273,35 @@ void Surface::setBackBuffer(SurfaceBuffer *buffer, const QRegion &damage) if (valid) setSize(m_buffer->size()); - m_damage = m_damage.intersected(QRect(QPoint(), m_size)); - emit m_waylandSurface->damaged(m_damage); + m_damage = damage.intersected(QRect(QPoint(), m_size)); + } else { + setSize(QSize()); + m_damage = QRect(); } - m_damage = damage; - QWaylandSurfacePrivate *priv = QWaylandSurfacePrivate::get(waylandSurface()); for (int i = 0; i < priv->views.size(); i++) { - priv->views.at(i)->attach(m_bufferRef); + priv->views.at(i)->attach(m_bufferRef, m_damage); } - emit m_waylandSurface->configure(m_bufferRef.hasBuffer()); + emit m_waylandSurface->damaged(m_damage); + setMapped(m_bufferRef.hasBuffer()); if (!m_pending.offset.isNull()) emit m_waylandSurface->offsetForNextFrame(m_pending.offset); } +bool Surface::mapped() const +{ + return m_buffer && bool(m_buffer->waylandBufferHandle()); +} + void Surface::setMapped(bool mapped) { - if (!m_surfaceMapped && mapped) { - m_surfaceMapped = true; - emit m_waylandSurface->mapped(); - } else if (!mapped && m_surfaceMapped) { - m_surfaceMapped = false; - emit m_waylandSurface->unmapped(); - } + if (m_surfaceMapped == mapped) + return; + + m_surfaceMapped = mapped; + emit m_waylandSurface->mappedChanged(); } SurfaceBuffer *Surface::createSurfaceBuffer(struct ::wl_resource *buffer) |