Don't draw focus frame if widget has style rules that affect border

Skip drawing the focus ring if the widget has a custom styled
border, custom focus ring, or any rule that affects the border.
For QPushButton, if the style rule has a background
set, the bevel will be drawn in the Windows style.
Skip drawing the Mac focus frame in that case too.

Fixes: QTBUG-93032
Change-Id: I7c4d4bf6f6ce7bbcd17cd620586c5efa44f2b8d6
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 05f7dd5ead5927ef7b3301380b81d7194d9e0593)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Doris Verria 2021-05-04 12:13:39 +02:00 committed by Qt Cherry-pick Bot
parent 5ee6a0ddda
commit be6fce0962

View File

@ -123,6 +123,9 @@
#if QT_CONFIG(toolbar)
#include <QtWidgets/qtoolbar.h>
#endif
#if QT_CONFIG(pushbutton)
#include <QtWidgets/qpushbutton.h>
#endif
#include <QtGui/qpainterpath.h>
#include <QtGui/qscreen.h>
@ -2943,6 +2946,12 @@ void QStyleSheetStyle::polish(QWidget *w)
if (!rule.hasBackground() || rule.background()->isTransparent() || rule.hasBox()
|| (!rule.hasNativeBorder() && !rule.border()->isOpaque()))
w->setAttribute(Qt::WA_OpaquePaintEvent, false);
if (rule.hasBox() || !rule.hasNativeBorder()
#if QT_CONFIG(pushbutton)
|| (qobject_cast<QPushButton *>(w))
#endif
)
w->setAttribute(Qt::WA_MacShowFocusRect, false);
}
}