From 02205b3ef7b612b26c525755bb7c49decc70d10e Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Wed, 26 Jan 2022 18:23:09 +0800 Subject: [PATCH] libtaskmanager: Set enabled according to visible property `enabled` must be set in the backend because `visible` will always be true after getting a valid nodeId, and sometimes we need to reset `enabled` to false. CCBUG: 449189 --- libtaskmanager/declarative/pipewiresourceitem.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libtaskmanager/declarative/pipewiresourceitem.cpp b/libtaskmanager/declarative/pipewiresourceitem.cpp index 1b667cf13..f181770a0 100644 --- a/libtaskmanager/declarative/pipewiresourceitem.cpp +++ b/libtaskmanager/declarative/pipewiresourceitem.cpp @@ -59,6 +59,7 @@ PipeWireSourceItem::PipeWireSourceItem(QQuickItem *parent) setFlag(ItemHasContents, true); connect(this, &QQuickItem::visibleChanged, this, [this]() { + setEnabled(isVisible()); if (m_stream) m_stream->setActive(isVisible()); }); @@ -72,6 +73,7 @@ void PipeWireSourceItem::itemChange(QQuickItem::ItemChange change, const QQuickI { switch (change) { case ItemVisibleHasChanged: + setEnabled(isVisible()); if (m_stream) m_stream->setActive(isVisible() && data.boolValue && isComponentComplete()); break; @@ -98,6 +100,7 @@ void PipeWireSourceItem::setNodeId(uint nodeId) return; m_nodeId = nodeId; + setEnabled(false); if (m_nodeId == 0) { m_stream.reset(nullptr); @@ -262,6 +265,7 @@ void PipeWireSourceItem::updateTextureDmaBuf(const QVector &planes, int textureId = m_texture->textureId(); QQuickWindow::CreateTextureOption textureOption = format == DRM_FORMAT_ARGB8888 ? QQuickWindow::TextureHasAlphaChannel : QQuickWindow::TextureIsOpaque; + setEnabled(true); return window()->createTextureFromNativeObject(QQuickWindow::NativeObjectTexture, &textureId, 0 /*a vulkan thing?*/, size, textureOption); }; if (window()->isVisible()) { @@ -277,6 +281,7 @@ void PipeWireSourceItem::updateTextureImage(const QImage &image) } m_createNextTexture = [this, image] { + setEnabled(true); return window()->createTextureFromImage(image, QQuickWindow::TextureIsOpaque); }; if (window()->isVisible())