From da28d17eaf689446ebef38f28b51a47f7df5ea1c Mon Sep 17 00:00:00 2001 From: Wladimir Leuschner Date: Tue, 28 Nov 2023 16:44:50 +0100 Subject: [PATCH] Fix ItemView editing look and custom background color on QWindows11Style MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Disable text painting, when current item in ItemView is in editing mode. Respect custom set background colors for items in ItemView. Fixes: QTBUG-119501 Change-Id: I0cc80459e67765b2e648aa438aabc7dc18bef4a9 Reviewed-by: Chris René Lerner Reviewed-by: Oliver Wolff (cherry picked from commit 5d590a38d96206bcf5ad6ffe2b156223dc909fd7) --- .../styles/modernwindows/qwindows11style.cpp | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index aa7199e5d2b..d7548b6517f 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -1308,11 +1308,9 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op painter->setPen(highContrastTheme == true ? vopt->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]); if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) { - } - else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) { + } else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) { painter->drawLine(option->rect.topRight(), option->rect.bottomRight()); - } - else if (vopt->viewItemPosition == QStyleOptionViewItem::End) { + } else if (vopt->viewItemPosition == QStyleOptionViewItem::End) { painter->drawLine(option->rect.topLeft(), option->rect.bottomLeft()); } else { painter->drawLine(option->rect.topRight(), option->rect.bottomRight()); @@ -1321,21 +1319,22 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op painter->setPen(QPen(option->palette.buttonText().color())); bool isTreeView = widget && widget->inherits("QTreeView"); + if ((vopt->state & State_Selected || vopt->state & State_MouseOver) && !(isTreeView && vopt->state & State_MouseOver) && vopt->showDecorationSelected) { painter->setBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); - painter->setPen(Qt::NoPen); + } else { + painter->setBrush(vopt->backgroundBrush); + } + painter->setPen(Qt::NoPen); - if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) { - painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(2,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); - } - else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) { - painter->drawRoundedRect(rect.marginsRemoved(QMargins(2,2,0,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); - } - else if (vopt->viewItemPosition == QStyleOptionViewItem::End) { - painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(0,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); - } else { - painter->drawRect(vopt->rect.marginsRemoved(QMargins(0,2,0,2))); - } + if (vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid) { + painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(2,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); + } else if (vopt->viewItemPosition == QStyleOptionViewItem::Beginning) { + painter->drawRoundedRect(rect.marginsRemoved(QMargins(2,2,0,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); + } else if (vopt->viewItemPosition == QStyleOptionViewItem::End) { + painter->drawRoundedRect(vopt->rect.marginsRemoved(QMargins(0,2,2,2)),secondLevelRoundingRadius,secondLevelRoundingRadius); + } else { + painter->drawRect(vopt->rect.marginsRemoved(QMargins(0,2,0,2))); } // draw the check mark @@ -1368,7 +1367,9 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op vopt->icon.paint(painter, iconRect, vopt->decorationAlignment, mode, state); painter->setPen(QPen(option->palette.buttonText().color())); - d->viewItemDrawText(painter, vopt, textRect); + const QAbstractItemView* view = qobject_cast(widget); + if (!view->isPersistentEditorOpen(vopt->index)) + d->viewItemDrawText(painter, vopt, textRect); if (vopt->state & State_Selected && (vopt->viewItemPosition == QStyleOptionViewItem::Beginning || vopt->viewItemPosition == QStyleOptionViewItem::OnlyOne || vopt->viewItemPosition == QStyleOptionViewItem::Invalid)) { if (widget && widget->inherits("QListView") && qobject_cast(widget)->viewMode() != QListView::IconMode) { painter->setPen(QPen(vopt->palette.accent().color()));