From 79c53bb1c7f23ca89b5c6d1ff4770ba047cc0802 Mon Sep 17 00:00:00 2001 From: Uwe Rathmann Date: Fri, 13 Apr 2018 16:23:09 +0200 Subject: [PATCH] workaround for setting the focus with Qt::PopupFocusReason --- src/controls/QskControl.cpp | 19 +++++++++++++++++++ src/controls/QskControl.h | 2 ++ 2 files changed, 21 insertions(+) diff --git a/src/controls/QskControl.cpp b/src/controls/QskControl.cpp index ae52944b..9cfb43bb 100644 --- a/src/controls/QskControl.cpp +++ b/src/controls/QskControl.cpp @@ -151,6 +151,25 @@ QQuickItem* qskNearestFocusScope( const QQuickItem* item ) return nullptr; } +void qskForceActiveFocus( QQuickItem* item, Qt::FocusReason reason ) +{ + /* + For unknown reasons Qt::PopupFocusReason is blocked inside of + QQuickItem::setFocus and so we can't use QQuickItem::forceActiveFocus + */ + + if ( item == nullptr || item->window() == nullptr ) + return; + + auto wp = QQuickWindowPrivate::get( item->window() ); + + while ( const auto scope = qskNearestFocusScope( item ) ) + { + wp->setFocusInScope( scope, item, reason ); + item = scope; + } +} + void qskUpdateInputMethod( const QQuickItem* item, Qt::InputMethodQueries queries ) { auto inputMethod = QGuiApplication::inputMethod(); diff --git a/src/controls/QskControl.h b/src/controls/QskControl.h index ad25ac8b..3a0810e1 100644 --- a/src/controls/QskControl.h +++ b/src/controls/QskControl.h @@ -260,6 +260,8 @@ QSK_EXPORT QRectF qskItemGeometry( const QQuickItem* ); QSK_EXPORT void qskSetItemGeometry( QQuickItem*, const QRectF& ); QSK_EXPORT QQuickItem* qskNearestFocusScope( const QQuickItem* ); +QSK_EXPORT void qskForceActiveFocus( QQuickItem*, Qt::FocusReason ); + QSK_EXPORT QList< QQuickItem* > qskPaintOrderChildItems( const QQuickItem* ); QSK_EXPORT void qskUpdateInputMethod( const QQuickItem*, Qt::InputMethodQueries );