From ff365f7b465dc699a5a8a86106de8863812525a4 Mon Sep 17 00:00:00 2001 From: Berthold Krevert <berthold.krevert@basyskom.com> Date: Wed, 30 Apr 2014 20:48:20 +0200 Subject: [PATCH] Set State_KeyboardFocusChange if focus has been requested by keyboard Some styles (QFusionStyle, QGtkStyle) don't draw a focus rectangle if QStyle::State_KeyboardFocusChange is not set. This patch is based on change,84388 in QtDeclarative. Change-Id: Ic0c0bdd68689055cff12d601e64b77b53e7980dd Reviewed-by: Liang Qi <liang.qi@digia.com> Reviewed-by: J-P Nurmi <jpnurmi@digia.com> --- src/controls/Private/qquickstyleitem.cpp | 10 ++++++++++ src/controls/controls.pro | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/controls/Private/qquickstyleitem.cpp b/src/controls/Private/qquickstyleitem.cpp index 10bda95d6..b04eeaa95 100644 --- a/src/controls/Private/qquickstyleitem.cpp +++ b/src/controls/Private/qquickstyleitem.cpp @@ -50,6 +50,7 @@ #include <qsgsimpletexturenode.h> #include <qquickwindow.h> #include "private/qguiapplication_p.h" +#include <QtQuick/private/qquickwindow_p.h> #include <QtGui/qpa/qplatformtheme.h> #include "../qquickmenuitem_p.h" @@ -757,6 +758,15 @@ void QQuickStyleItem::initStyleOption() if (m_horizontal) m_styleoption->state |= QStyle::State_Horizontal; + // some styles don't draw a focus rectangle if + // QStyle::State_KeyboardFocusChange is not set + if (window()) { + Qt::FocusReason lastFocusReason = QQuickWindowPrivate::get(window())->lastFocusReason; + if (lastFocusReason == Qt::TabFocusReason || lastFocusReason == Qt::BacktabFocusReason) { + m_styleoption->state |= QStyle::State_KeyboardFocusChange; + } + } + if (sizeHint == "mini") { m_styleoption->state |= QStyle::State_Mini; } else if (sizeHint == "small") { diff --git a/src/controls/controls.pro b/src/controls/controls.pro index e7cd6adaf..fd4aac0d0 100644 --- a/src/controls/controls.pro +++ b/src/controls/controls.pro @@ -2,7 +2,7 @@ TARGET = qtquickcontrolsplugin TARGETPATH = QtQuick/Controls IMPORT_VERSION = 1.2 -QT += qml quick gui-private core-private +QT += qml quick quick-private gui-private core-private QMAKE_DOCS = $$PWD/doc/qtquickcontrols.qdocconf -- GitLab