From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 0839B15808A for ; Thu, 17 Jul 2025 09:12:09 +0000 (UTC) Received: from lists.gentoo.org (bobolink.gentoo.org [140.211.166.189]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) (Authenticated sender: relay-lists.gentoo.org@gentoo.org) by smtp.gentoo.org (Postfix) with ESMTPSA id E6037340E1E for ; Thu, 17 Jul 2025 09:12:08 +0000 (UTC) Received: from bobolink.gentoo.org (localhost [127.0.0.1]) by bobolink.gentoo.org (Postfix) with ESMTP id 5680311055C; Thu, 17 Jul 2025 09:12:02 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [140.211.166.183]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by bobolink.gentoo.org (Postfix) with ESMTPS id 4DFDD11055C for ; Thu, 17 Jul 2025 09:12:02 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id F3367340D7B for ; Thu, 17 Jul 2025 09:12:01 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 5AF533216 for ; Thu, 17 Jul 2025 09:12:00 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1752743479.dedc6cf6aa1412fe8feddfc5ea23365275c32f55.sam@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: kde-frameworks/kirigami/files/, kde-frameworks/kirigami/ X-VCS-Repository: repo/gentoo X-VCS-Files: kde-frameworks/kirigami/files/kirigami-6.16.0-sw.patch kde-frameworks/kirigami/kirigami-6.16.0-r1.ebuild X-VCS-Directories: kde-frameworks/kirigami/ kde-frameworks/kirigami/files/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: dedc6cf6aa1412fe8feddfc5ea23365275c32f55 X-VCS-Branch: master Date: Thu, 17 Jul 2025 09:12:00 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 6a72f734-a71e-45c7-910a-b5a51843575b X-Archives-Hash: 53fc08ec370b5b5b4eaede0d550d2458 commit: dedc6cf6aa1412fe8feddfc5ea23365275c32f55 Author: Sam James gentoo org> AuthorDate: Thu Jul 17 09:10:59 2025 +0000 Commit: Sam James gentoo org> CommitDate: Thu Jul 17 09:11:19 2025 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dedc6cf6 kde-frameworks/kirigami: fix crash w/ software renderer Closes: https://bugs.gentoo.org/960298 Signed-off-by: Sam James gentoo.org> .../kirigami/files/kirigami-6.16.0-sw.patch | 284 +++++++++++++++++++++ kde-frameworks/kirigami/kirigami-6.16.0-r1.ebuild | 55 ++++ 2 files changed, 339 insertions(+) diff --git a/kde-frameworks/kirigami/files/kirigami-6.16.0-sw.patch b/kde-frameworks/kirigami/files/kirigami-6.16.0-sw.patch new file mode 100644 index 000000000000..a8b26fbe8a16 --- /dev/null +++ b/kde-frameworks/kirigami/files/kirigami-6.16.0-sw.patch @@ -0,0 +1,284 @@ +https://bugs.gentoo.org/960298 +https://bugs.kde.org/show_bug.cgi?id=505670 +https://bugs.kde.org/show_bug.cgi?id=506991 +https://invent.kde.org/frameworks/kirigami/-/merge_requests/1884 + +From 1289232891ec190b317015fb73debcea373dab1b Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Mon, 14 Jul 2025 13:56:54 +0300 +Subject: [PATCH 1/3] Revert "Fix SoftwareRectangleNode leaking image nodes" + +This reverts commit ab359a4feac3e60e19564b2c6d991417459e08a4. +--- + src/primitives/scenegraph/softwarerectanglenode.cpp | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/primitives/scenegraph/softwarerectanglenode.cpp b/src/primitives/scenegraph/softwarerectanglenode.cpp +index 5c0c46637..8c7d900ff 100644 +--- a/src/primitives/scenegraph/softwarerectanglenode.cpp ++++ b/src/primitives/scenegraph/softwarerectanglenode.cpp +@@ -127,7 +127,6 @@ void SoftwareRectangleNode::preprocess() + if (texture) { + if (!m_imageNode) { + m_imageNode = m_window->createImageNode(); +- m_imageNode->setFlag(OwnedByParent); + } + + // The rect will be set in render(). +-- +GitLab + + +From 8d96bcc36a40465007857490376559288b2ebcd9 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Mon, 14 Jul 2025 13:56:59 +0300 +Subject: [PATCH 2/3] Revert "Fix ShadowedTexture crashing with software + rendering" + +This reverts commit 4dc4e78d26701d5babfec6602ac705912d7e8154. +--- + .../scenegraph/softwarerectanglenode.cpp | 56 +++++++++++-------- + 1 file changed, 33 insertions(+), 23 deletions(-) + +diff --git a/src/primitives/scenegraph/softwarerectanglenode.cpp b/src/primitives/scenegraph/softwarerectanglenode.cpp +index 8c7d900ff..13371029b 100644 +--- a/src/primitives/scenegraph/softwarerectanglenode.cpp ++++ b/src/primitives/scenegraph/softwarerectanglenode.cpp +@@ -53,6 +53,18 @@ void SoftwareRectangleNode::setImage(const QImage &image) + return; + } + ++ if (m_imageNode) { ++ removeChildNode(m_imageNode); ++ delete m_imageNode; ++ } ++ ++ m_imageNode = m_window->createImageNode(); ++ if (!m_imageNode) { ++ return; ++ } ++ ++ m_imageNode->setFiltering(QSGTexture::Filtering::Linear); ++ + m_textureInfo = ShaderNode::TextureInfo{ + .channel = 0, + .options = {}, +@@ -60,6 +72,9 @@ void SoftwareRectangleNode::setImage(const QImage &image) + .provider = nullptr, + .providerConnection = {}, + }; ++ ++ m_imageNode->setTexture(m_textureInfo.texture.get()); ++ appendChildNode(m_imageNode); + } + + void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) +@@ -68,6 +83,18 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) + return; + } + ++ if (m_imageNode) { ++ removeChildNode(m_imageNode); ++ delete m_imageNode; ++ } ++ ++ m_imageNode = m_window->createImageNode(); ++ if (!m_imageNode) { ++ return; ++ } ++ ++ m_imageNode->setFiltering(QSGTexture::Filtering::Linear); ++ + m_textureInfo = ShaderNode::TextureInfo{ + .channel = 0, + .options = {}, +@@ -75,6 +102,9 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) + .provider = provider, + .providerConnection = {}, + }; ++ ++ m_imageNode->setTexture(m_textureInfo.provider->texture()); ++ appendChildNode(m_imageNode); + } + + void SoftwareRectangleNode::setRadius(qreal radius) +@@ -114,32 +144,12 @@ QSGRenderNode::RenderingFlags SoftwareRectangleNode::flags() const + + void SoftwareRectangleNode::preprocess() + { +- QSGTexture *texture = nullptr; +- if (QSGTextureProvider *provider = m_textureInfo.provider) { +- texture = provider->texture(); ++ auto provider = m_textureInfo.provider; ++ if (provider && m_imageNode) { ++ m_imageNode->setTexture(provider->texture()); + if (QSGDynamicTexture *dynamic_texture = qobject_cast(provider->texture())) { + dynamic_texture->updateTexture(); + } +- } else if (m_textureInfo.texture) { +- texture = m_textureInfo.texture.get(); +- } +- +- if (texture) { +- if (!m_imageNode) { +- m_imageNode = m_window->createImageNode(); +- } +- +- // The rect will be set in render(). +- m_imageNode->setFiltering(QSGTexture::Filtering::Linear); +- m_imageNode->setTexture(texture); +- +- if (!m_imageNode->parent()) { +- appendChildNode(m_imageNode); +- } +- } else if (m_imageNode) { +- removeChildNode(m_imageNode); +- delete m_imageNode; +- m_imageNode = nullptr; + } + } + +-- +GitLab + + +From 140067bb3ab57cfcdc0daf0f3964e217cd32d3cd Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Mon, 14 Jul 2025 14:23:39 +0300 +Subject: [PATCH 3/3] Fix SoftwareRectangleNode creating QSGImageNode's without + texture + +If the texture provider has no texture, the QSGImageNode should be +removed from the scene graph, otherwise the renderer will crash. + +BUG: 506991 +--- + .../scenegraph/softwarerectanglenode.cpp | 61 +++++++++++-------- + .../scenegraph/softwarerectanglenode.h | 2 + + 2 files changed, 38 insertions(+), 25 deletions(-) + +diff --git a/src/primitives/scenegraph/softwarerectanglenode.cpp b/src/primitives/scenegraph/softwarerectanglenode.cpp +index 13371029b..31355d9c0 100644 +--- a/src/primitives/scenegraph/softwarerectanglenode.cpp ++++ b/src/primitives/scenegraph/softwarerectanglenode.cpp +@@ -54,17 +54,9 @@ void SoftwareRectangleNode::setImage(const QImage &image) + } + + if (m_imageNode) { +- removeChildNode(m_imageNode); +- delete m_imageNode; ++ cleanupImageNode(); + } + +- m_imageNode = m_window->createImageNode(); +- if (!m_imageNode) { +- return; +- } +- +- m_imageNode->setFiltering(QSGTexture::Filtering::Linear); +- + m_textureInfo = ShaderNode::TextureInfo{ + .channel = 0, + .options = {}, +@@ -73,8 +65,16 @@ void SoftwareRectangleNode::setImage(const QImage &image) + .providerConnection = {}, + }; + +- m_imageNode->setTexture(m_textureInfo.texture.get()); +- appendChildNode(m_imageNode); ++ if (!m_textureInfo.texture) { ++ return; ++ } ++ ++ m_imageNode = m_window->createImageNode(); ++ if (m_imageNode) { ++ m_imageNode->setTexture(m_textureInfo.texture.get()); ++ m_imageNode->setFiltering(QSGTexture::Filtering::Linear); ++ appendChildNode(m_imageNode); ++ } + } + + void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) +@@ -84,17 +84,9 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) + } + + if (m_imageNode) { +- removeChildNode(m_imageNode); +- delete m_imageNode; ++ cleanupImageNode(); + } + +- m_imageNode = m_window->createImageNode(); +- if (!m_imageNode) { +- return; +- } +- +- m_imageNode->setFiltering(QSGTexture::Filtering::Linear); +- + m_textureInfo = ShaderNode::TextureInfo{ + .channel = 0, + .options = {}, +@@ -103,8 +95,7 @@ void SoftwareRectangleNode::setTextureProvider(QSGTextureProvider *provider) + .providerConnection = {}, + }; + +- m_imageNode->setTexture(m_textureInfo.provider->texture()); +- appendChildNode(m_imageNode); ++ // The render node will be created in preprocess(). + } + + void SoftwareRectangleNode::setRadius(qreal radius) +@@ -145,11 +136,24 @@ QSGRenderNode::RenderingFlags SoftwareRectangleNode::flags() const + void SoftwareRectangleNode::preprocess() + { + auto provider = m_textureInfo.provider; +- if (provider && m_imageNode) { +- m_imageNode->setTexture(provider->texture()); +- if (QSGDynamicTexture *dynamic_texture = qobject_cast(provider->texture())) { ++ if (provider) { ++ QSGTexture *texture = provider->texture(); ++ if (QSGDynamicTexture *dynamic_texture = qobject_cast(texture)) { + dynamic_texture->updateTexture(); + } ++ ++ if (texture) { ++ if (!m_imageNode) { ++ m_imageNode = m_window->createImageNode(); ++ m_imageNode->setTexture(texture); ++ m_imageNode->setFiltering(QSGTexture::Filtering::Linear); ++ appendChildNode(m_imageNode); ++ } else { ++ m_imageNode->setTexture(texture); ++ } ++ } else if (m_imageNode) { ++ cleanupImageNode(); ++ } + } + } + +@@ -187,3 +191,10 @@ void SoftwareRectangleNode::render(const RenderState *state) + m_imageNode->setRect(withoutCorners); + } + } ++ ++void SoftwareRectangleNode::cleanupImageNode() ++{ ++ removeChildNode(m_imageNode); ++ delete m_imageNode; ++ m_imageNode = nullptr; ++} +diff --git a/src/primitives/scenegraph/softwarerectanglenode.h b/src/primitives/scenegraph/softwarerectanglenode.h +index 0e444c295..72898fdcc 100644 +--- a/src/primitives/scenegraph/softwarerectanglenode.h ++++ b/src/primitives/scenegraph/softwarerectanglenode.h +@@ -39,6 +39,8 @@ public: + void render(const RenderState *state) override; + + private: ++ void cleanupImageNode(); ++ + QQuickWindow *m_window = nullptr; + + QSGImageNode *m_imageNode = nullptr; +-- +GitLab diff --git a/kde-frameworks/kirigami/kirigami-6.16.0-r1.ebuild b/kde-frameworks/kirigami/kirigami-6.16.0-r1.ebuild new file mode 100644 index 000000000000..070db521bc02 --- /dev/null +++ b/kde-frameworks/kirigami/kirigami-6.16.0-r1.ebuild @@ -0,0 +1,55 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +ECM_EXAMPLES="true" +ECM_QTHELP="false" +ECM_TEST="true" +QTMIN=6.7.2 +inherit ecm frameworks.kde.org toolchain-funcs + +DESCRIPTION="Lightweight user interface framework for mobile and convergent applications" +HOMEPAGE="https://community.kde.org/Kirigami" + +LICENSE="LGPL-2+" +KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86" +IUSE="openmp" + +# requires package to already be installed +RESTRICT="test" + +# slot op: Uses Qt6::GuiPrivate for qguiapplication_p.h +DEPEND=" + >=dev-qt/qtbase-${QTMIN}:6=[concurrent,dbus,gui,network] + >=dev-qt/qtdeclarative-${QTMIN}:6 + >=dev-qt/qtsvg-${QTMIN}:6 +" +RDEPEND="${DEPEND} + examples? ( + !${CATEGORY}/${PN}:5[examples(-)] + >=dev-qt/qt5compat-${QTMIN}:6[qml] + ) +" +BDEPEND=">=dev-qt/qttools-${QTMIN}:6[linguist]" + +PATCHES=( + "${FILESDIR}"/kirigami-6.16.0-sw.patch +) + +pkg_pretend() { + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp +} + +pkg_setup() { + [[ ${MERGE_TYPE} != binary ]] && use openmp && tc-check-openmp +} + +src_configure() { + local mycmakeargs=( + -DBUILD_EXAMPLES=$(usex examples) + $(cmake_use_find_package openmp OpenMP) + ) + + ecm_src_configure +}