Skip to content

Commit 9cb2616

Browse files
committed
fix: Avoid infinite repaints upon hovering the folders/tags panels
We were calling setStyleSheet() unconditionally inside the paint event handlers of the folders/tags panels, which would then trigger a new paint event, causing an infinite repaint recursion. Now, we only call setStylesheet() if the stylesheet of a widget actually needs to be updated.
1 parent bfb0827 commit 9cb2616

File tree

2 files changed

+43
-24
lines changed

2 files changed

+43
-24
lines changed

src/foldertreedelegateeditor.cpp

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -158,36 +158,50 @@ void FolderTreeDelegateEditor::updateDelegate()
158158
auto displayName = m_index.data(NodeItem::Roles::DisplayText).toString();
159159
QFontMetrics fm(m_titleFont);
160160
displayName = fm.elidedText(displayName, Qt::ElideRight, m_label->contentsRect().width());
161+
QString labelStyle;
162+
QString folderIconStyle;
161163

162164
if (m_view->selectionModel()->isSelected(m_index)) {
163-
m_label->setStyleSheet(QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
164-
.arg(QString::number(m_titleSelectedColor.red()),
165-
QString::number(m_titleSelectedColor.green()),
166-
QString::number(m_titleSelectedColor.blue())));
167-
m_folderIcon->setStyleSheet(
165+
labelStyle = QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
166+
.arg(QString::number(m_titleSelectedColor.red()),
167+
QString::number(m_titleSelectedColor.green()),
168+
QString::number(m_titleSelectedColor.blue()));
169+
folderIconStyle =
168170
QStringLiteral("QPushButton{border: none; padding: 0px; color: rgb(%1, %2, %3);}")
169171
.arg(QString::number(m_titleSelectedColor.red()),
170172
QString::number(m_titleSelectedColor.green()),
171-
QString::number(m_titleSelectedColor.blue())));
173+
QString::number(m_titleSelectedColor.blue()));
172174
} else {
173-
m_label->setStyleSheet(QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
174-
.arg(QString::number(m_titleColor.red()),
175-
QString::number(m_titleColor.green()),
176-
QString::number(m_titleColor.blue())));
177-
m_folderIcon->setStyleSheet(
175+
labelStyle = QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
176+
.arg(QString::number(m_titleColor.red()),
177+
QString::number(m_titleColor.green()),
178+
QString::number(m_titleColor.blue()));
179+
folderIconStyle =
178180
QStringLiteral("QPushButton{border: none; padding: 0px; color: rgb(%1, %2, %3);}")
179181
.arg(QString::number(m_folderIconColor.red()),
180182
QString::number(m_folderIconColor.green()),
181-
QString::number(m_folderIconColor.blue())));
183+
QString::number(m_folderIconColor.blue()));
182184
}
183185
m_label->setText(displayName);
184186
auto theme = dynamic_cast<NodeTreeView *>(m_view)->theme();
185187

186188
QColor chevronColor(theme == Theme::Dark ? QColor(169, 160, 172) : QColor(103, 99, 105));
187-
m_expandIcon->setStyleSheet(QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
188-
.arg(QString::number(chevronColor.red()),
189-
QString::number(chevronColor.green()),
190-
QString::number(chevronColor.blue())));
189+
QString expandIconStyle =
190+
QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
191+
.arg(QString::number(chevronColor.red()), QString::number(chevronColor.green()),
192+
QString::number(chevronColor.blue()));
193+
194+
if (m_folderIcon->styleSheet() != folderIconStyle) {
195+
m_folderIcon->setStyleSheet(folderIconStyle);
196+
}
197+
198+
if (m_label->styleSheet() != labelStyle) {
199+
m_label->setStyleSheet(labelStyle);
200+
}
201+
202+
if (m_expandIcon->styleSheet() != expandIconStyle) {
203+
m_expandIcon->setStyleSheet(expandIconStyle);
204+
}
191205

192206
if (m_index.data(NodeItem::Roles::IsExpandable).toBool()) {
193207
if (m_view->isExpanded(m_index)) {

src/tagtreedelegateeditor.cpp

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -123,19 +123,24 @@ void TagTreeDelegateEditor::updateDelegate()
123123
auto displayName = m_index.data(NodeItem::Roles::DisplayText).toString();
124124
QFontMetrics fm(m_titleFont);
125125
displayName = fm.elidedText(displayName, Qt::ElideRight, m_label->contentsRect().width());
126+
QString labelStyle;
126127

127128
if (m_view->selectionModel()->selectedIndexes().contains(m_index)) {
128-
m_label->setStyleSheet(QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
129-
.arg(QString::number(m_titleSelectedColor.red()),
130-
QString::number(m_titleSelectedColor.green()),
131-
QString::number(m_titleSelectedColor.blue())));
129+
labelStyle = QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
130+
.arg(QString::number(m_titleSelectedColor.red()),
131+
QString::number(m_titleSelectedColor.green()),
132+
QString::number(m_titleSelectedColor.blue()));
132133
} else {
133-
m_label->setStyleSheet(QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
134-
.arg(QString::number(m_titleColor.red()),
135-
QString::number(m_titleColor.green()),
136-
QString::number(m_titleColor.blue())));
134+
labelStyle = QStringLiteral("QLabel{color: rgb(%1, %2, %3);}")
135+
.arg(QString::number(m_titleColor.red()),
136+
QString::number(m_titleColor.green()),
137+
QString::number(m_titleColor.blue()));
137138
}
138139
m_label->setText(displayName);
140+
141+
if (m_label->styleSheet() != labelStyle) {
142+
m_label->setStyleSheet(labelStyle);
143+
}
139144
}
140145

141146
void TagTreeDelegateEditor::paintEvent(QPaintEvent *event)

0 commit comments

Comments
 (0)