summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBernd Weimer <bernd.weimer@qt.io>2022-11-14 12:04:50 +0100
committerBernd Weimer <bernd.weimer@qt.io>2023-03-16 08:39:46 +0000
commit6a17d561a8b3160bda0d2156e611a407e8952a00 (patch)
tree813634544f50ada1900304d1bbfc7985eb3bda0c /src
parent9619b6c46ecb30ecf2299107aa047c0b02290c32 (diff)
downloadqtwayland-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')
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem.cpp14
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem.h1
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();