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