diff options
author | Bernd Weimer <bernd.weimer@qt.io> | 2022-11-14 12:04:50 +0100 |
---|---|---|
committer | Bernd Weimer <bernd.weimer@qt.io> | 2023-03-16 08:39:46 +0000 |
commit | 6a17d561a8b3160bda0d2156e611a407e8952a00 (patch) | |
tree | 813634544f50ada1900304d1bbfc7985eb3bda0c /src/compositor | |
parent | 9619b6c46ecb30ecf2299107aa047c0b02290c32 (diff) | |
download | qtwayland-6a17d561a8b3160bda0d2156e611a407e8952a00.tar.gz |
Forward active focus to clients immediately
The acitve focus has only been set in clients when a key was pressed.
This caused Qt clients to miss the pressed key event.
Fixes: QTBUG-108645
Change-Id: Ie277d64e4e707533d84179c01a69a745cb4da950
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/compositor')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickitem.cpp | 14 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickitem.h | 1 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp index 3f729e9f..b30d6f30 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.cpp +++ b/src/compositor/compositor_api/qwaylandquickitem.cpp @@ -453,9 +453,8 @@ private: * Constructs a QWaylandQuickItem with the given \a parent. */ QWaylandQuickItem::QWaylandQuickItem(QQuickItem *parent) - : QQuickItem(*new QWaylandQuickItemPrivate(), parent) + : QWaylandQuickItem(*new QWaylandQuickItemPrivate(), parent) { - d_func()->init(); } /*! @@ -465,6 +464,7 @@ QWaylandQuickItem::QWaylandQuickItem(QWaylandQuickItemPrivate &dd, QQuickItem *p : QQuickItem(dd, parent) { d_func()->init(); + connect(this, &QQuickItem::activeFocusChanged, this, &QWaylandQuickItem::updateFocus); } /*! @@ -474,6 +474,7 @@ QWaylandQuickItem::~QWaylandQuickItem() { Q_D(QWaylandQuickItem); disconnect(this, &QQuickItem::windowChanged, this, &QWaylandQuickItem::updateWindow); + disconnect(this, &QQuickItem::activeFocusChanged, this, &QWaylandQuickItem::updateFocus); QMutexLocker locker(d->mutex); if (d->provider) { disconnect(d->texProviderConnection); @@ -536,6 +537,8 @@ void QWaylandQuickItem::setSurface(QWaylandSurface *surface) emit compositorChanged(); if (oldSurf != surface) emit surfaceChanged(); + + updateFocus(); update(); } @@ -896,6 +899,13 @@ void QWaylandQuickItem::handlePlaceBelow(QWaylandSurface *referenceSurface) } } +void QWaylandQuickItem::updateFocus() +{ + Q_D(const QWaylandQuickItem); + if (hasActiveFocus() && compositor()) + compositor()->defaultSeat()->setKeyboardFocus(d->view->surface()); +} + /*! \qmlproperty object QtWaylandCompositor::WaylandQuickItem::subsurfaceHandler diff --git a/src/compositor/compositor_api/qwaylandquickitem.h b/src/compositor/compositor_api/qwaylandquickitem.h index bdb29842..d30528a8 100644 --- a/src/compositor/compositor_api/qwaylandquickitem.h +++ b/src/compositor/compositor_api/qwaylandquickitem.h @@ -140,6 +140,7 @@ private Q_SLOTS: #if QT_CONFIG(im) void updateInputMethod(Qt::InputMethodQueries queries); #endif + void updateFocus(); Q_SIGNALS: void surfaceChanged(); |