[neon/qt6/qt6-base/Neon/release] debian/patches: remove upstream patch
Carlos De Maine
null at kde.org
Wed May 20 01:00:47 BST 2026
Git commit ab43efa19f78a33ece936ebc6a65ccfc3fa30a25 by Carlos De Maine.
Committed on 20/05/2026 at 00:00.
Pushed by carlosdem into branch 'Neon/release'.
remove upstream patch
D +0 -534 debian/patches/0001-fix-slow-scrolling-on-wayland.patch
M +0 -1 debian/patches/series
https://invent.kde.org/neon/qt6/qt6-base/-/commit/ab43efa19f78a33ece936ebc6a65ccfc3fa30a25
diff --git a/debian/patches/0001-fix-slow-scrolling-on-wayland.patch b/debian/patches/0001-fix-slow-scrolling-on-wayland.patch
deleted file mode 100644
index 4440661..0000000
--- a/debian/patches/0001-fix-slow-scrolling-on-wayland.patch
+++ /dev/null
@@ -1,534 +0,0 @@
-Contains 2 changes:
-- wayland: Compress high frequency mouse events (https://bugreports.qt.io/browse/QTBUG-138706)
-- wayland: Optimize scroll operation (https://bugreports.qt.io/browse/QTBUG-139231)
-
-diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
-index c845cfa7eec..f463d7364ca 100644
---- a/src/corelib/global/qnamespace.qdoc
-+++ b/src/corelib/global/qnamespace.qdoc
-@@ -227,6 +227,7 @@
- application later.
- On Windows 8 and above the default value is also true, but it only applies
- to touch events. Mouse and window events remain unaffected by this flag.
-+ On Wayland the default value is also true, but it only applies to mouse events.
- On other platforms, the default is false.
- (In the future, the compression feature may be implemented across platforms.)
- You can test the attribute to see whether compression is enabled.
-diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
-index 170e80f806c..5f927fca51a 100644
---- a/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
-+++ b/src/plugins/platforms/wayland/qwaylandinputdevice.cpp
-@@ -63,6 +63,34 @@ Q_LOGGING_CATEGORY(lcQpaWaylandInput, "qt.qpa.wayland.input");
- // reasonable number of them. As of 2021 most touchscreen panels support 10 concurrent touchpoints.
- static const int MaxTouchPoints = 10;
-
-+QWaylandEventCompressionPrivate::QWaylandEventCompressionPrivate()
-+{
-+ timeElapsed.start();
-+ delayTimer.setSingleShot(true);
-+}
-+
-+bool QWaylandEventCompressionPrivate::compressEvent()
-+{
-+ using namespace std::chrono_literals;
-+
-+ if (!QCoreApplication::testAttribute(Qt::AA_CompressHighFrequencyEvents))
-+ return false;
-+
-+ const auto elapsed = timeElapsed.durationElapsed();
-+ timeElapsed.start();
-+ if (elapsed < 100us || delayTimer.isActive())
-+ {
-+ // The highest USB HID polling rate is 8 kHz (125 μs). Most mice use lowe polling rate [125 Hz - 1000 Hz].
-+ // Reject all events faster than 100 μs, because it definitely means the application main thread is
-+ // freezed by long operation and events are delivered one after another from the queue. Since now we rely
-+ // on the 0 ms timer to deliver the last pending event when application main thread is no longer freezed.
-+ delayTimer.start(0);
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
- QWaylandInputDevice::Keyboard::Keyboard(QWaylandInputDevice *p)
- : mParent(p)
- {
-@@ -140,6 +168,8 @@ QWaylandInputDevice::Pointer::Pointer(QWaylandInputDevice *seat)
- cursorTimerCallback();
- });
- #endif
-+
-+ mEventCompression.delayTimer.callOnTimeout(this, &QWaylandInputDevice::Pointer::flushFrameEvent);
- }
-
- QWaylandInputDevice::Pointer::~Pointer()
-@@ -914,14 +944,16 @@ void QWaylandInputDevice::Pointer::pointer_axis(uint32_t time, uint32_t axis, in
-
- mParent->mTime = time;
-
-- if (version() < WL_POINTER_FRAME_SINCE_VERSION) {
-- qCDebug(lcQpaWaylandInput) << "Flushing new event; no frame event in this version";
-- flushFrameEvent();
-- }
-+ maybePointerFrame();
- }
-
- void QWaylandInputDevice::Pointer::pointer_frame()
- {
-+ if (mEventCompression.compressEvent()) {
-+ qCDebug(lcQpaWaylandInput) << "compressed pointer_frame event";
-+ return;
-+ }
-+
- flushFrameEvent();
- }
-
-@@ -952,11 +984,9 @@ void QWaylandInputDevice::Pointer::pointer_axis_stop(uint32_t time, uint32_t axi
- switch (axis) {
- case axis_vertical_scroll:
- qCDebug(lcQpaWaylandInput) << "Received vertical wl_pointer.axis_stop";
-- mFrameData.delta.setY(0); //TODO: what's the point of doing this?
- break;
- case axis_horizontal_scroll:
- qCDebug(lcQpaWaylandInput) << "Received horizontal wl_pointer.axis_stop";
-- mFrameData.delta.setX(0);
- break;
- default:
- qCWarning(lcQpaWaylandInput) << "wl_pointer.axis_stop: Unknown axis: " << axis
-@@ -964,25 +994,7 @@ void QWaylandInputDevice::Pointer::pointer_axis_stop(uint32_t time, uint32_t axi
- return;
- }
-
-- // May receive axis_stop for events we haven't sent a ScrollBegin for because
-- // most axis_sources do not mandate an axis_stop event to be sent.
-- if (!mScrollBeginSent) {
-- // TODO: For now, we just ignore these events, but we could perhaps take this as an
-- // indication that this compositor will in fact send axis_stop events for these sources
-- // and send a ScrollBegin the next time an axis_source event with this type is encountered.
-- return;
-- }
--
-- QWaylandWindow *target = QWaylandWindow::mouseGrab();
-- if (!target)
-- target = focusWindow();
-- Qt::KeyboardModifiers mods = mParent->modifiers();
-- const bool inverted = mFrameData.verticalAxisInverted || mFrameData.horizontalAxisInverted;
-- WheelEvent wheelEvent(focusWindow(), Qt::ScrollEnd, mParent->mTime, mSurfacePos, mGlobalPos,
-- QPoint(), QPoint(), Qt::MouseEventNotSynthesized, mods, inverted);
-- target->handleMouse(mParent, wheelEvent);
-- mScrollBeginSent = false;
-- mScrollDeltaRemainder = QPointF();
-+ mScrollEnd = true;
- }
-
- void QWaylandInputDevice::Pointer::pointer_axis_discrete(uint32_t axis, int32_t value)
-@@ -1043,6 +1055,14 @@ void QWaylandInputDevice::Pointer::pointer_axis_relative_direction(uint32_t axis
- }
- }
-
-+inline void QWaylandInputDevice::Pointer::maybePointerFrame()
-+{
-+ if (version() < WL_POINTER_FRAME_SINCE_VERSION) {
-+ qCDebug(lcQpaWaylandInput) << "Flushing new event; no frame event in this version";
-+ pointer_frame();
-+ }
-+}
-+
- void QWaylandInputDevice::Pointer::setFrameEvent(QWaylandPointerEvent *event)
- {
- qCDebug(lcQpaWaylandInput) << "Setting frame event " << event->type;
-@@ -1051,12 +1071,9 @@ void QWaylandInputDevice::Pointer::setFrameEvent(QWaylandPointerEvent *event)
- flushFrameEvent();
- }
-
-- mFrameData.event = event;
-+ mFrameData.event.reset(event);
-
-- if (version() < WL_POINTER_FRAME_SINCE_VERSION) {
-- qCDebug(lcQpaWaylandInput) << "Flushing new event; no frame event in this version";
-- flushFrameEvent();
-- }
-+ maybePointerFrame();
- }
-
- void QWaylandInputDevice::Pointer::FrameData::resetScrollData()
-@@ -1136,11 +1153,24 @@ void QWaylandInputDevice::Pointer::flushScrollEvent()
- {
- QPoint angleDelta = mFrameData.angleDelta();
-
-+ // The wayland protocol has separate horizontal and vertical axes, Qt has just the one inverted flag
-+ // Pragmatically it should't come up
-+ const bool inverted = mFrameData.verticalAxisInverted || mFrameData.horizontalAxisInverted;
-+
- // Angle delta is required for Qt wheel events, so don't try to send events if it's zero
- if (!angleDelta.isNull()) {
-- QWaylandWindow *target = QWaylandWindow::mouseGrab();
-- if (!target)
-- target = focusWindow();
-+ QWaylandWindow *target = mScrollTarget;
-+ if (!mScrollBeginSent) {
-+ if (!target)
-+ target = QWaylandWindow::mouseGrab();
-+ if (!target)
-+ target = focusWindow();
-+ }
-+ if (!target) {
-+ qCDebug(lcQpaWaylandInput) << "Flushing scroll event aborted - no scroll target";
-+ mFrameData.resetScrollData();
-+ return;
-+ }
-
- if (isDefinitelyTerminated(mFrameData.axisSource) && !mScrollBeginSent) {
- qCDebug(lcQpaWaylandInput) << "Flushing scroll event sending ScrollBegin";
-@@ -1150,27 +1180,46 @@ void QWaylandInputDevice::Pointer::flushScrollEvent()
- mParent->modifiers(), false));
- mScrollBeginSent = true;
- mScrollDeltaRemainder = QPointF();
-+ mScrollTarget = target;
- }
-
- Qt::ScrollPhase phase = mScrollBeginSent ? Qt::ScrollUpdate : Qt::NoScrollPhase;
- QPoint pixelDelta = mFrameData.pixelDeltaAndError(&mScrollDeltaRemainder);
-- Qt::MouseEventSource source = mFrameData.wheelEventSource();
--
--
-- // The wayland protocol has separate horizontal and vertical axes, Qt has just the one inverted flag
-- // Pragmatically it should't come up
-- const bool inverted = mFrameData.verticalAxisInverted || mFrameData.horizontalAxisInverted;
-
- qCDebug(lcQpaWaylandInput) << "Flushing scroll event" << phase << pixelDelta << angleDelta;
- target->handleMouse(mParent, WheelEvent(focusWindow(), phase, mParent->mTime, mSurfacePos, mGlobalPos,
-- pixelDelta, angleDelta, source, mParent->modifiers(), inverted));
-+ pixelDelta, angleDelta, mFrameData.wheelEventSource(), mParent->modifiers(), inverted));
-+ }
-+
-+ if (mScrollEnd) {
-+ if (mScrollBeginSent) {
-+ if (auto target = mScrollTarget.get()) {
-+ qCDebug(lcQpaWaylandInput) << "Flushing scroll end event";
-+ target->handleMouse(mParent, WheelEvent(focusWindow(), Qt::ScrollEnd, mParent->mTime, mSurfacePos, mGlobalPos,
-+ QPoint(), QPoint(), mFrameData.wheelEventSource(), mParent->modifiers(), inverted));
-+ }
-+ mScrollBeginSent = false;
-+ mScrollDeltaRemainder = QPointF();
-+ } else {
-+ // May receive axis_stop for events we haven't sent a ScrollBegin for because
-+ // most axis_sources do not mandate an axis_stop event to be sent.
-+
-+ // TODO: For now, we just ignore these events, but we could perhaps take this as an
-+ // indication that this compositor will in fact send axis_stop events for these sources
-+ // and send a ScrollBegin the next time an axis_source event with this type is encountered.
-+ }
-+ mScrollEnd = false;
-+ mScrollTarget.clear();
- }
-+
- mFrameData.resetScrollData();
- }
-
- void QWaylandInputDevice::Pointer::flushFrameEvent()
- {
-- if (auto *event = mFrameData.event) {
-+ mEventCompression.delayTimer.stop();
-+
-+ if (auto *event = mFrameData.event.get()) {
- if (auto window = event->surface) {
- window->handleMouse(mParent, *event);
- } else if (mFrameData.event->type == QEvent::MouseButtonRelease) {
-@@ -1183,8 +1232,7 @@ void QWaylandInputDevice::Pointer::flushFrameEvent()
- event->modifiers); // , Qt::MouseEventSource source =
- // Qt::MouseEventNotSynthesized);
- }
-- delete mFrameData.event;
-- mFrameData.event = nullptr;
-+ mFrameData.event.reset();
- }
-
- //TODO: do modifiers get passed correctly here?
-diff --git a/src/plugins/platforms/wayland/qwaylandinputdevice_p.h b/src/plugins/platforms/wayland/qwaylandinputdevice_p.h
-index bcaf025840d..b9582daf32c 100644
---- a/src/plugins/platforms/wayland/qwaylandinputdevice_p.h
-+++ b/src/plugins/platforms/wayland/qwaylandinputdevice_p.h
-@@ -75,6 +75,16 @@ class CursorSurface;
-
- Q_DECLARE_LOGGING_CATEGORY(lcQpaWaylandInput);
-
-+struct QWaylandEventCompressionPrivate
-+{
-+ QWaylandEventCompressionPrivate();
-+
-+ bool compressEvent();
-+
-+ QElapsedTimer timeElapsed;
-+ QTimer delayTimer;
-+};
-+
- class Q_WAYLANDCLIENT_EXPORT QWaylandInputDevice
- : public QObject
- , public QtWayland::wl_seat
-@@ -362,7 +372,7 @@ public:
- Qt::MouseButton mLastButton = Qt::NoButton;
-
- struct FrameData {
-- QWaylandPointerEvent *event = nullptr;
-+ QScopedPointer<QWaylandPointerEvent> event;
-
- QPointF delta;
- QPoint delta120;
-@@ -379,7 +389,13 @@ public:
- } mFrameData;
-
- bool mScrollBeginSent = false;
-+ bool mScrollEnd = false;
- QPointF mScrollDeltaRemainder;
-+ QPointer<QWaylandWindow> mScrollTarget;
-+
-+ QWaylandEventCompressionPrivate mEventCompression;
-+
-+ void maybePointerFrame();
-
- void setFrameEvent(QWaylandPointerEvent *event);
- void flushScrollEvent();
-diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp
-index 669d47ee3b8..fc869de669f 100644
---- a/src/plugins/platforms/wayland/qwaylandintegration.cpp
-+++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp
-@@ -87,6 +87,8 @@ QWaylandIntegration::QWaylandIntegration(const QString &platformName)
- : mPlatformName(platformName), mFontDb(new QGenericUnixFontDatabase())
- #endif
- {
-+ QCoreApplication::setAttribute(Qt::AA_CompressHighFrequencyEvents);
-+
- mDisplay.reset(new QWaylandDisplay(this));
- mPlatformServices.reset(new QWaylandPlatformServices(mDisplay.data()));
-
-diff --git a/src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp b/src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp
-index d8fc7b18ca3..591e5064ebd 100644
---- a/src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp
-+++ b/src/plugins/platforms/wayland/qwaylandshmbackingstore.cpp
-@@ -159,6 +159,8 @@ QWaylandShmBackingStore::QWaylandShmBackingStore(QWindow *window, QWaylandDispla
- // recreateBackBufferIfNeeded always resets mBackBuffer
- if (mRequestedSize.isValid() && waylandWindow())
- recreateBackBufferIfNeeded();
-+ else
-+ mBackBuffer = nullptr;
- qDeleteAll(copy);
- wl_event_queue_destroy(oldEventQueue);
- });
-@@ -183,11 +185,15 @@ QPaintDevice *QWaylandShmBackingStore::paintDevice()
-
- void QWaylandShmBackingStore::updateDirtyStates(const QRegion ®ion)
- {
-- // Update dirty state of buffers based on what was painted. The back buffer will
-- // not be dirty since we already painted on it, while other buffers will become dirty.
-+ // Update dirty state of buffers based on what was painted. The back buffer will be
-+ // less dirty, since we painted to it, while other buffers will become more dirty.
-+ // This allows us to minimize copies between front and back buffers on swap in the
-+ // cases where the painted region overlaps with the previous frame (front buffer).
- for (QWaylandShmBuffer *b : std::as_const(mBuffers)) {
- if (b != mBackBuffer)
- b->dirtyRegion() += region;
-+ else
-+ b->dirtyRegion() -= region;
- }
- }
-
-@@ -198,7 +204,7 @@ void QWaylandShmBackingStore::beginPaint(const QRegion ®ion)
-
- const QMargins margins = windowDecorationMargins();
- const QRegion regionTranslated = region.translated(margins.left(), margins.top());
-- const bool bufferWasRecreated = recreateBackBufferIfNeeded(regionTranslated);
-+ const bool bufferWasRecreated = recreateBackBufferIfNeeded();
- updateDirtyStates(regionTranslated);
-
- // Although undocumented, QBackingStore::beginPaint expects the painted region
-@@ -223,7 +229,7 @@ void QWaylandShmBackingStore::endPaint()
- // Inspired by QCALayerBackingStore.
- bool QWaylandShmBackingStore::scroll(const QRegion ®ion, int dx, int dy)
- {
-- if (!mBackBuffer)
-+ if (Q_UNLIKELY(!mBackBuffer || !mFrontBuffer))
- return false;
-
- const qreal devicePixelRatio = waylandWindow()->scale();
-@@ -236,19 +242,35 @@ bool QWaylandShmBackingStore::scroll(const QRegion ®ion, int dx, int dy)
-
- recreateBackBufferIfNeeded();
-
-- QImage *backBufferImage = mBackBuffer->image();
--
- const QPoint scrollDelta(dx, dy);
- const QMargins margins = windowDecorationMargins();
- const QRegion adjustedRegion = region.translated(margins.left(), margins.top());
-
-- const QRect boundingRect = adjustedRegion.boundingRect();
-- const QPoint devicePixelDelta = scrollDelta * devicePixelRatio;
-+ const QRegion inPlaceRegion = adjustedRegion - mBackBuffer->dirtyRegion();
-+ const QRegion frontBufferRegion = adjustedRegion - inPlaceRegion;
-+
-+ if (!inPlaceRegion.isEmpty()) {
-+ const QRect inPlaceBoundingRect = inPlaceRegion.boundingRect();
-+ const QPoint devicePixelDelta = scrollDelta * devicePixelRatio;
-+
-+ qt_scrollRectInImage(*mBackBuffer->image(),
-+ QRect(inPlaceBoundingRect.topLeft() * devicePixelRatio,
-+ inPlaceBoundingRect.size() * devicePixelRatio),
-+ devicePixelDelta);
-+ }
-
-- qt_scrollRectInImage(*backBufferImage,
-- QRect(boundingRect.topLeft() * devicePixelRatio,
-- boundingRect.size() * devicePixelRatio),
-- devicePixelDelta);
-+ if (!frontBufferRegion.isEmpty()) {
-+ QPainter painter(mBackBuffer->image());
-+ painter.setCompositionMode(QPainter::CompositionMode_Source);
-+ painter.scale(qreal(1) / devicePixelRatio, qreal(1) / devicePixelRatio);
-+ for (const QRect &rect : frontBufferRegion) {
-+ QRect sourceRect(rect.topLeft() * devicePixelRatio,
-+ rect.size() * devicePixelRatio);
-+ QRect destinationRect((rect.topLeft() + scrollDelta) * devicePixelRatio,
-+ rect.size() * devicePixelRatio);
-+ painter.drawImage(destinationRect, *mFrontBuffer->image(), sourceRect);
-+ }
-+ }
-
- // We do not mark the source region as dirty, even though it technically has "moved".
- // This matches the behavior of other backingstore implementations using qt_scrollRectInImage.
-@@ -289,6 +311,8 @@ void QWaylandShmBackingStore::flush(QWindow *window, const QRegion ®ion, cons
- if (windowDecoration() && windowDecoration()->isDirty())
- updateDecorations();
-
-+ finalizeBackBuffer();
-+
- mFrontBuffer = mBackBuffer;
-
- QMargins margins = windowDecorationMargins();
-@@ -313,6 +337,8 @@ QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size, bool &b
- mBuffers.removeAt(i);
- if (mBackBuffer == buffer)
- mBackBuffer = nullptr;
-+ if (mFrontBuffer == buffer)
-+ mFrontBuffer = nullptr;
- delete buffer;
- }
- }
-@@ -341,7 +367,7 @@ QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size, bool &b
- return nullptr;
- }
-
--bool QWaylandShmBackingStore::recreateBackBufferIfNeeded(const QRegion &nonDirtyRegion)
-+bool QWaylandShmBackingStore::recreateBackBufferIfNeeded()
- {
- wl_display_dispatch_queue_pending(mDisplay->wl_display(), mEventQueue);
-
-@@ -375,30 +401,6 @@ bool QWaylandShmBackingStore::recreateBackBufferIfNeeded(const QRegion &nonDirty
- qsizetype oldSizeInBytes = mBackBuffer ? mBackBuffer->image()->sizeInBytes() : 0;
- qsizetype newSizeInBytes = buffer->image()->sizeInBytes();
-
-- // mBackBuffer may have been deleted here but if so it means its size was different so we wouldn't copy it anyway
-- if (mBackBuffer != buffer && oldSizeInBytes == newSizeInBytes) {
-- const QRegion clipRegion = buffer->dirtyRegion() - nonDirtyRegion;
-- const auto clipRects = clipRegion.rects();
-- if (!clipRects.empty()) {
-- Q_ASSERT(mBackBuffer);
-- const QImage *sourceImage = mBackBuffer->image();
-- QImage *targetImage = buffer->image();
--
-- QPainter painter(targetImage);
-- painter.setCompositionMode(QPainter::CompositionMode_Source);
-- const qreal targetDevicePixelRatio = painter.device()->devicePixelRatio();
-- for (const QRect &clipRect : clipRects) { // Iterate clip rects, because complicated clip region causes higher CPU usage
-- if (clipRects.size() > 1)
-- painter.save();
-- painter.setClipRect(clipRect);
-- painter.scale(qreal(1) / targetDevicePixelRatio, qreal(1) / targetDevicePixelRatio);
-- painter.drawImage(QRectF(QPointF(), targetImage->size()), *sourceImage, sourceImage->rect());
-- if (clipRects.size() > 1)
-- painter.restore();
-- }
-- }
-- }
--
- mBackBuffer = buffer;
-
- for (QWaylandShmBuffer *buffer : std::as_const(mBuffers)) {
-@@ -412,11 +414,40 @@ bool QWaylandShmBackingStore::recreateBackBufferIfNeeded(const QRegion &nonDirty
- if (windowDecoration() && window()->isVisible() && oldSizeInBytes != newSizeInBytes)
- windowDecoration()->update();
-
-- buffer->dirtyRegion() = QRegion();
--
- return bufferWasRecreated;
- }
-
-+void QWaylandShmBackingStore::finalizeBackBuffer()
-+{
-+ Q_ASSERT(mBackBuffer);
-+
-+ const QRegion clipRegion = mBackBuffer->dirtyRegion();
-+ if (clipRegion.isEmpty())
-+ return;
-+
-+ if (Q_UNLIKELY(!mFrontBuffer || mFrontBuffer == mBackBuffer))
-+ return;
-+
-+ const QImage *sourceImage = mFrontBuffer->image();
-+ QImage *targetImage = mBackBuffer->image();
-+
-+ QPainter painter(targetImage);
-+ painter.setCompositionMode(QPainter::CompositionMode_Source);
-+ const qreal targetDevicePixelRatio = painter.device()->devicePixelRatio();
-+ const auto clipRects = clipRegion.rects();
-+ for (const QRect &clipRect : clipRects) { // Iterate clip rects, because complicated clip region causes higher CPU usage
-+ if (clipRects.size() > 1)
-+ painter.save();
-+ painter.setClipRect(clipRect);
-+ painter.scale(qreal(1) / targetDevicePixelRatio, qreal(1) / targetDevicePixelRatio);
-+ painter.drawImage(QRectF(QPointF(), targetImage->size()), *sourceImage, sourceImage->rect());
-+ if (clipRects.size() > 1)
-+ painter.restore();
-+ }
-+
-+ mBackBuffer->dirtyRegion() = QRegion();
-+}
-+
- QImage *QWaylandShmBackingStore::entireSurface() const
- {
- return mBackBuffer->image();
-@@ -496,6 +527,8 @@ QImage QWaylandShmBackingStore::toImage() const
- // instead of flush() for widgets that have renderToTexture children
- // (QOpenGLWidget, QQuickWidget).
-
-+ const_cast<QWaylandShmBackingStore *>(this)->finalizeBackBuffer();
-+
- return *contentSurface();
- }
- #endif // opengl
-diff --git a/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h b/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h
-index efd80159e85..cfcafb28326 100644
---- a/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h
-+++ b/src/plugins/platforms/wayland/qwaylandshmbackingstore_p.h
-@@ -73,7 +73,8 @@ public:
- QMargins windowDecorationMargins() const;
- QImage *entireSurface() const;
- QImage *contentSurface() const;
-- bool recreateBackBufferIfNeeded(const QRegion &nonDirtyRegion = QRegion());
-+ bool recreateBackBufferIfNeeded();
-+ void finalizeBackBuffer();
-
- QWaylandWindow *waylandWindow() const;
- void iterateBuffer();
-diff --git a/tests/auto/wayland/client/tst_client.cpp b/tests/auto/wayland/client/tst_client.cpp
-index 04400e3f26a..09ac4f7f81d 100644
---- a/tests/auto/wayland/client/tst_client.cpp
-+++ b/tests/auto/wayland/client/tst_client.cpp
-@@ -276,6 +276,8 @@ void tst_WaylandClient::events()
- exec([&] {
- pointer()->sendEnter(s, window.frameOffset() + mousePressPos);
- pointer()->sendFrame(client());
-+ pointer()->sendMotion(client(), window.frameOffset() + mousePressPos / 2);
-+ pointer()->sendFrame(client());
- pointer()->sendMotion(client(), window.frameOffset() + mousePressPos);
- pointer()->sendFrame(client());
- pointer()->sendButton(client(), BTN_LEFT, Pointer::button_state_pressed);
diff --git a/debian/patches/series b/debian/patches/series
index aa23332..c345263 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,4 @@
# Neon added
-0001-fix-slow-scrolling-on-wayland.patch
0002-c93008e4d06abb0072e0e5e57d84a4ae182ecfc0.patch
0003-qwaylandshmbackingstore.diff
0004-qwaylandcursor.diff
More information about the Neon-commits
mailing list