diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 60013fc..5dc9164 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -941,9 +941,7 @@ void QWidgetPrivate::moveRect(const QRect &rect, int dx, int dy) #endif const QRect newRect(rect.translated(dx, dy)); QRect destRect = rect.intersected(clipR); - if (destRect.isValid()) - destRect = destRect.translated(dx, dy).intersected(clipR); - const QRect sourceRect(destRect.translated(-dx, -dy)); + QRect sourceRect = newRect.intersected(clipR); const QRect parentRect(rect & clipR); bool accelerateMove = accelEnv && isOpaque @@ -951,7 +949,7 @@ void QWidgetPrivate::moveRect(const QRect &rect, int dx, int dy) // No accelerate move for proxy widgets. && !tlw->d_func()->extra->proxyWidget #endif - && !isOverlapped(sourceRect) && !isOverlapped(destRect); + && !isOverlapped(destRect) && (destRect == sourceRect || !isOverlapped(sourceRect)); if (!accelerateMove) { QRegion parentR(effectiveRectFor(parentRect)); @@ -964,7 +962,10 @@ void QWidgetPrivate::moveRect(const QRect &rect, int dx, int dy) pd->invalidateBuffer(parentR); invalidateBuffer((newRect & clipR).translated(-data.crect.topLeft())); } else { - + if (destRect.isValid()) + destRect = destRect.translated(dx, dy).intersected(clipR); + sourceRect = destRect.translated(-dx, -dy); + QWidgetBackingStore *wbs = x->backingStore.data(); QRegion childExpose(newRect & clipR);