workaround for setting the focus with Qt::PopupFocusReason

This commit is contained in:
Uwe Rathmann 2018-04-13 16:23:09 +02:00
parent e2ca55819e
commit 79c53bb1c7
2 changed files with 21 additions and 0 deletions

View File

@ -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();

View File

@ -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 );