diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp
index d6cbae7d2a175d375d8b936508e882eaa60713ac..b9713c7b6ad3c59bb436d059ec81ac309594c19f 100644
--- a/src/quick/items/qquickwindow.cpp
+++ b/src/quick/items/qquickwindow.cpp
@@ -407,6 +407,7 @@ QQuickWindowPrivate::QQuickWindowPrivate()
     , persistentSceneGraph(true)
     , lastWheelEventAccepted(false)
     , componentCompleted(true)
+    , lastFocusReason(Qt::OtherFocusReason)
     , renderTarget(0)
     , renderTargetId(0)
     , incubationController(0)
@@ -710,6 +711,8 @@ void QQuickWindowPrivate::setFocusInScope(QQuickItem *scope, QQuickItem *item, Q
     QQuickItem *currentActiveFocusItem = activeFocusItem;
     QQuickItem *newActiveFocusItem = 0;
 
+    lastFocusReason = reason;
+
     QVarLengthArray<QQuickItem *, 20> changed;
 
     // Does this change the active focus?
@@ -814,6 +817,8 @@ void QQuickWindowPrivate::clearFocusInScope(QQuickItem *scope, QQuickItem *item,
     QQuickItem *oldActiveFocusItem = 0;
     QQuickItem *newActiveFocusItem = 0;
 
+    lastFocusReason = reason;
+
     QVarLengthArray<QQuickItem *, 20> changed;
 
     Q_ASSERT(item == contentItem || item == scopePrivate->subFocusItem);
diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h
index 218425c08c021118ff615e2789e863d59ce2319b..8faaf6489b0c9322f70d9ae3ca3d80f534ddb1e9 100644
--- a/src/quick/items/qquickwindow_p.h
+++ b/src/quick/items/qquickwindow_p.h
@@ -227,6 +227,8 @@ public:
     uint lastWheelEventAccepted : 1;
     bool componentCompleted : 1;
 
+    Qt::FocusReason lastFocusReason;
+
     QOpenGLFramebufferObject *renderTarget;
     uint renderTargetId;
     QSize renderTargetSize;
diff --git a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
index 18b0dd51324e71f07d674b73fa0d42af5a60a482..de4067b6e57181733014407a30006ccdfb193726 100644
--- a/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
+++ b/tests/auto/quick/qquickwindow/tst_qquickwindow.cpp
@@ -328,6 +328,7 @@ private slots:
     void animationsWhileHidden();
 
     void focusObject();
+    void focusReason();
 
     void ignoreUnhandledMouseEvents();
 
@@ -1253,6 +1254,33 @@ void tst_qquickwindow::focusObject()
     QCOMPARE(focusObjectSpy.count(), 3);
 }
 
+void tst_qquickwindow::focusReason()
+{
+    QQuickWindow *window = new QQuickWindow;
+    QScopedPointer<QQuickWindow> cleanup(window);
+    window->resize(200, 200);
+    window->show();
+    QVERIFY(QTest::qWaitForWindowExposed(window));
+
+    QQuickItem *firstItem = new QQuickItem;
+    firstItem->setSize(QSizeF(100, 100));
+    firstItem->setParentItem(window->contentItem());
+
+    QQuickItem *secondItem = new QQuickItem;
+    secondItem->setSize(QSizeF(100, 100));
+    secondItem->setParentItem(window->contentItem());
+
+    firstItem->forceActiveFocus(Qt::OtherFocusReason);
+    QCOMPARE(QQuickWindowPrivate::get(window)->lastFocusReason, Qt::OtherFocusReason);
+
+    secondItem->forceActiveFocus(Qt::TabFocusReason);
+    QCOMPARE(QQuickWindowPrivate::get(window)->lastFocusReason, Qt::TabFocusReason);
+
+    firstItem->forceActiveFocus(Qt::BacktabFocusReason);
+    QCOMPARE(QQuickWindowPrivate::get(window)->lastFocusReason, Qt::BacktabFocusReason);
+
+}
+
 void tst_qquickwindow::ignoreUnhandledMouseEvents()
 {
     QQuickWindow *window = new QQuickWindow;