https://mail.kde.org/pipermail/release-team/2025-June/013691.html https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9226 From ae57ec2ebbbbac9de40dd36e2ed54b12fe7ed869 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 26 May 2025 23:51:16 +0200 Subject: [PATCH] qml6glitem,qtitem: Allow configuring if the item will consume input events At the moment we are always accepting the input events to forward into GStreamer infrastructure. This works but we might have other uses for such events elsewhere in the QtQuick scene so allow opting out to this behaviour. Part-of: --- ext/qt6/qt6glitem.cc | 22 +++++++++++++++++-- ext/qt6/qt6glitem.h | 9 +++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/ext/qt6/qt6glitem.cc b/ext/qt6/qt6glitem.cc index 971a027de969..d1d89c3fd7f3 100644 --- a/ext/qt6/qt6glitem.cc +++ b/ext/qt6/qt6glitem.cc @@ -193,6 +193,16 @@ Qt6GLVideoItem::setForceAspectRatio(bool force_aspect_ratio) emit forceAspectRatioChanged(force_aspect_ratio); } +void +Qt6GLVideoItem::setAcceptEvents(bool accept) +{ + if (accept == acceptEvents) + return; + + acceptEvents = accept; + Q_EMIT acceptEventsChanged(acceptEvents); +} + bool Qt6GLVideoItem::getForceAspectRatio() { @@ -487,18 +497,22 @@ Qt6GLVideoItem::wheelEvent(QWheelEvent * event) g_object_unref (element); } g_mutex_unlock (&this->priv->lock); + + event->setAccepted(acceptEvents); } void -Qt6GLVideoItem::hoverEnterEvent(QHoverEvent *) +Qt6GLVideoItem::hoverEnterEvent(QHoverEvent *event) { mouseHovering = true; + event->setAccepted(acceptEvents); } void -Qt6GLVideoItem::hoverLeaveEvent(QHoverEvent *) +Qt6GLVideoItem::hoverLeaveEvent(QHoverEvent *event) { mouseHovering = false; + event->setAccepted(acceptEvents); } void @@ -527,6 +541,7 @@ Qt6GLVideoItem::hoverMoveEvent(QHoverEvent * event) } } g_mutex_unlock (&this->priv->lock); + event->setAccepted(acceptEvents); } void @@ -589,6 +604,7 @@ Qt6GLVideoItem::touchEvent(QTouchEvent * event) g_object_unref (element); g_mutex_unlock (&this->priv->lock); + event->setAccepted(acceptEvents); } void @@ -641,12 +657,14 @@ Qt6GLVideoItem::mousePressEvent(QMouseEvent * event) { forceActiveFocus(); sendMouseEvent(event, TRUE); + event->setAccepted(acceptEvents); } void Qt6GLVideoItem::mouseReleaseEvent(QMouseEvent * event) { sendMouseEvent(event, FALSE); + event->setAccepted(acceptEvents); } void diff --git a/ext/qt6/qt6glitem.h b/ext/qt6/qt6glitem.h index bfe28a1fc606..886a4a221f54 100644 --- a/ext/qt6/qt6glitem.h +++ b/ext/qt6/qt6glitem.h @@ -73,7 +73,10 @@ class Qt6GLVideoItem : public QQuickItem, protected QOpenGLFunctions READ getForceAspectRatio WRITE setForceAspectRatio NOTIFY forceAspectRatioChanged) - + Q_PROPERTY(bool acceptEvents + READ getAcceptEvents + WRITE setAcceptEvents + NOTIFY acceptEventsChanged) public: Qt6GLVideoItem(); ~Qt6GLVideoItem(); @@ -83,6 +86,8 @@ public: void setForceAspectRatio(bool); bool getForceAspectRatio(); bool itemInitialized(); + bool getAcceptEvents() const { return acceptEvents; } + void setAcceptEvents(bool accept); QSharedPointer getInterface() { return proxy; }; /* private for C interface ... */ @@ -91,6 +96,7 @@ public: Q_SIGNALS: void itemInitializedChanged(); void forceAspectRatioChanged(bool); + void acceptEventsChanged(bool acceptEvents); private Q_SLOTS: void handleWindowChanged(QQuickWindow * win); @@ -120,6 +126,7 @@ private: quint32 mousePressedButton; bool mouseHovering; + bool acceptEvents = true; QSharedPointer proxy; }; -- GitLab