Check whether exposed widget is mapped in QWidgetBackingStore::sync(QWidget*).
Qt::WA_Mapped corresponds to 'exposed' in Qt 5, hence a parent window fully obscured by its children may not have the attribute set. In that case, go by the attribute of the child widget. Task-number: QTBUG-33520 Change-Id: Ia08f283172daaa58f58e5636004461b2c48784f7 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>bb10
parent
4beafcd944
commit
5adba7cba7
|
|
@ -892,10 +892,10 @@ static inline bool discardSyncRequest(QWidget *tlw, QTLWExtra *tlwExtra)
|
|||
void QWidgetBackingStore::sync(QWidget *exposedWidget, const QRegion &exposedRegion)
|
||||
{
|
||||
QTLWExtra *tlwExtra = tlw->d_func()->maybeTopData();
|
||||
if (discardSyncRequest(tlw, tlwExtra) || tlwExtra->inTopLevelResize)
|
||||
if (!tlw->isVisible() || !tlwExtra || tlwExtra->inTopLevelResize)
|
||||
return;
|
||||
|
||||
if (!exposedWidget || !exposedWidget->internalWinId() || !exposedWidget->isVisible()
|
||||
if (!exposedWidget || !exposedWidget->internalWinId() || !exposedWidget->isVisible() || !exposedWidget->testAttribute(Qt::WA_Mapped)
|
||||
|| !exposedWidget->updatesEnabled() || exposedRegion.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -910,7 +910,8 @@ void QWidgetBackingStore::sync(QWidget *exposedWidget, const QRegion &exposedReg
|
|||
markDirtyOnScreen(exposedRegion, exposedWidget, exposedWidget->mapTo(tlw, QPoint()));
|
||||
else
|
||||
markDirtyOnScreen(exposedRegion, exposedWidget, QPoint());
|
||||
sync();
|
||||
|
||||
doSync();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -935,10 +936,15 @@ void QWidgetBackingStore::sync()
|
|||
return;
|
||||
}
|
||||
|
||||
doSync();
|
||||
}
|
||||
|
||||
void QWidgetBackingStore::doSync()
|
||||
{
|
||||
const bool updatesDisabled = !tlw->updatesEnabled();
|
||||
bool repaintAllWidgets = false;
|
||||
|
||||
const bool inTopLevelResize = tlwExtra->inTopLevelResize;
|
||||
const bool inTopLevelResize = tlw->d_func()->maybeTopData()->inTopLevelResize;
|
||||
const QRect tlwRect(topLevelRect());
|
||||
const QRect surfaceGeometry(tlwRect.topLeft(), store->size());
|
||||
if ((fullUpdatePending || inTopLevelResize || surfaceGeometry.size() != tlwRect.size()) && !updatesDisabled) {
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ private:
|
|||
static bool flushPaint(QWidget *widget, const QRegion &rgn);
|
||||
static void unflushPaint(QWidget *widget, const QRegion &rgn);
|
||||
|
||||
void doSync();
|
||||
bool bltRect(const QRect &rect, int dx, int dy, QWidget *widget);
|
||||
void releaseBuffer();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue