mirror of https://github.com/procxx/kepka.git
Fix render lag in widgets resizeEvent()->show().
ScrollArea calls show() in ScrollBar::resizeEvent. If this event handlers was called from SendPending...() you could set fake .._Shown attribute on, call resizeEvent() and remove this attribute even if it should not be removed already - after call to show().
This commit is contained in:
parent
4b1d15f968
commit
9eacb11f3c
|
@ -138,7 +138,7 @@ void CreateWidgetStateRecursive(not_null<QWidget*> target) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendPendingEventsRecursive(QWidget *target) {
|
void SendPendingEventsRecursive(QWidget *target, bool parentHiddenFlag) {
|
||||||
auto wasVisible = target->isVisible();
|
auto wasVisible = target->isVisible();
|
||||||
if (!wasVisible) {
|
if (!wasVisible) {
|
||||||
target->setAttribute(Qt::WA_WState_Visible, true);
|
target->setAttribute(Qt::WA_WState_Visible, true);
|
||||||
|
@ -153,6 +153,12 @@ void SendPendingEventsRecursive(QWidget *target) {
|
||||||
QResizeEvent e(target->size(), QSize());
|
QResizeEvent e(target->size(), QSize());
|
||||||
QApplication::sendEvent(target, &e);
|
QApplication::sendEvent(target, &e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto removeVisibleFlag = [&] {
|
||||||
|
return parentHiddenFlag
|
||||||
|
|| target->testAttribute(Qt::WA_WState_Hidden);
|
||||||
|
};
|
||||||
|
|
||||||
auto &children = target->children();
|
auto &children = target->children();
|
||||||
for (auto i = 0; i < children.size(); ++i) {
|
for (auto i = 0; i < children.size(); ++i) {
|
||||||
auto child = children[i];
|
auto child = children[i];
|
||||||
|
@ -162,11 +168,12 @@ void SendPendingEventsRecursive(QWidget *target) {
|
||||||
if (!widget->testAttribute(Qt::WA_WState_Created)) {
|
if (!widget->testAttribute(Qt::WA_WState_Created)) {
|
||||||
WidgetCreator::Create(widget);
|
WidgetCreator::Create(widget);
|
||||||
}
|
}
|
||||||
SendPendingEventsRecursive(widget);
|
SendPendingEventsRecursive(widget, removeVisibleFlag());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!wasVisible) {
|
|
||||||
|
if (removeVisibleFlag()) {
|
||||||
target->setAttribute(Qt::WA_WState_Visible, false);
|
target->setAttribute(Qt::WA_WState_Visible, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,7 +185,7 @@ void myEnsureResized(QWidget *target) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CreateWidgetStateRecursive(target);
|
CreateWidgetStateRecursive(target);
|
||||||
SendPendingEventsRecursive(target);
|
SendPendingEventsRecursive(target, !target->isVisible());
|
||||||
}
|
}
|
||||||
|
|
||||||
QPixmap myGrab(TWidget *target, QRect rect, QColor bg) {
|
QPixmap myGrab(TWidget *target, QRect rect, QColor bg) {
|
||||||
|
|
Loading…
Reference in New Issue