public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Andreas Sturmlechner" <asturm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: kde-frameworks/kio/files/, kde-frameworks/kio/
Date: Mon, 25 Dec 2023 19:51:42 +0000 (UTC)	[thread overview]
Message-ID: <1703533860.0613524c927b0e15a323dbf0c42e44a3cec7c502.asturm@gentoo> (raw)

commit:     0613524c927b0e15a323dbf0c42e44a3cec7c502
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 25 19:19:34 2023 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Dec 25 19:51:00 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0613524c

kde-frameworks/kio: Fix dolphin crash while copying

KDE-bug: https://bugs.kde.org/show_bug.cgi?id=448532

Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 .../kio-5.113.0-fix-crash-while-copying.patch      | 184 +++++++++++++++++++++
 kde-frameworks/kio/kio-5.113.0-r1.ebuild           |  96 +++++++++++
 2 files changed, 280 insertions(+)

diff --git a/kde-frameworks/kio/files/kio-5.113.0-fix-crash-while-copying.patch b/kde-frameworks/kio/files/kio-5.113.0-fix-crash-while-copying.patch
new file mode 100644
index 000000000000..845e6bc64339
--- /dev/null
+++ b/kde-frameworks/kio/files/kio-5.113.0-fix-crash-while-copying.patch
@@ -0,0 +1,184 @@
+From 6bea074739d5a75920d5540bc266549df5642511 Mon Sep 17 00:00:00 2001
+From: Akseli Lahtinen <akselmo@akselmo.dev>
+Date: Fri, 1 Dec 2023 11:27:26 +0000
+Subject: [PATCH] WidgetsAskUserActionHandler: Use QPointer to check the
+ validity of parent widgets
+
+If Dolphin is closed during the copying process,
+and the overwrite/skip dialog appears,
+this crashes the copying process since the
+parent shows to faulty location.
+
+Use QPointer to check that the parent widgets are still
+valid. If not, we just use nullptr, and the dialogs
+will still open.
+
+This also cleans some repetition in code.
+
+BUG:448532
+(cherry picked from commit bdef648edd54e146c30e881d8eb95990a59c5bbc)
+---
+ src/widgets/widgetsaskuseractionhandler.cpp | 90 +++++++++------------
+ 1 file changed, 39 insertions(+), 51 deletions(-)
+
+diff --git a/src/widgets/widgetsaskuseractionhandler.cpp b/src/widgets/widgetsaskuseractionhandler.cpp
+index fe2975d0ce..9cbaaec99f 100644
+--- a/src/widgets/widgetsaskuseractionhandler.cpp
++++ b/src/widgets/widgetsaskuseractionhandler.cpp
+@@ -22,6 +22,7 @@
+ 
+ #include <QApplication>
+ #include <QDialogButtonBox>
++#include <QPointer>
+ #include <QRegularExpression>
+ #include <QUrl>
+ 
+@@ -40,7 +41,10 @@
+     void savePersistentUserReply(KIO::AskUserActionInterface::MessageDialogType type, KConfigGroup &cg, const QString &dontAskAgainName, int result);
+ 
+     WidgetsAskUserActionHandler *const q;
+-    QWidget *m_parentWidget = nullptr;
++    QPointer<QWidget> m_parentWidget = nullptr;
++
++    QWidget *getParentWidget(KJob *job);
++    QWidget *getParentWidget(QWidget *widget);
+ };
+ 
+ bool KIO::WidgetsAskUserActionHandlerPrivate::gotPersistentUserReply(KIO::AskUserActionInterface::MessageDialogType type,
+@@ -106,6 +110,36 @@
+     }
+ }
+ 
++QWidget *KIO::WidgetsAskUserActionHandlerPrivate::getParentWidget(KJob *job)
++{
++    // This needs to be in qpointer, otherwise copying process
++    // will crash if done in background and dolphin is closed
++    QPointer<QWidget> parentWidget = nullptr;
++
++    if (job) {
++        parentWidget = KJobWidgets::window(job);
++    }
++
++    return getParentWidget(parentWidget);
++}
++
++QWidget *KIO::WidgetsAskUserActionHandlerPrivate::getParentWidget(QWidget *widget)
++{
++    // This needs to be in qpointer, otherwise copying process
++    // will crash if done in background and dolphin is closed
++    QPointer<QWidget> parentWidget = widget;
++
++    if (!parentWidget) {
++        parentWidget = this->m_parentWidget;
++    }
++
++    if (!parentWidget) {
++        parentWidget = qApp->activeWindow();
++    }
++
++    return parentWidget;
++}
++
+ KIO::WidgetsAskUserActionHandler::WidgetsAskUserActionHandler(QObject *parent)
+     : KIO::AskUserActionInterface(parent)
+     , d(new WidgetsAskUserActionHandlerPrivate(this))
+@@ -128,22 +162,8 @@
+                                                      const QDateTime &mtimeSrc,
+                                                      const QDateTime &mtimeDest)
+ {
+-    QWidget *parentWidget = nullptr;
+-
+-    if (job) {
+-        parentWidget = KJobWidgets::window(job);
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = d->m_parentWidget;
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = qApp->activeWindow();
+-    }
+-
+     QMetaObject::invokeMethod(qGuiApp, [=] {
+-        auto *dlg = new KIO::RenameDialog(parentWidget, title, src, dest, options, sizeSrc, sizeDest, ctimeSrc, ctimeDest, mtimeSrc, mtimeDest);
++        auto *dlg = new KIO::RenameDialog(d->getParentWidget(job), title, src, dest, options, sizeSrc, sizeDest, ctimeSrc, ctimeDest, mtimeSrc, mtimeDest);
+ 
+         dlg->setAttribute(Qt::WA_DeleteOnClose);
+         dlg->setWindowModality(Qt::WindowModal);
+@@ -161,22 +181,8 @@
+ 
+ void KIO::WidgetsAskUserActionHandler::askUserSkip(KJob *job, KIO::SkipDialog_Options options, const QString &errorText)
+ {
+-    QWidget *parentWidget = nullptr;
+-
+-    if (job) {
+-        parentWidget = KJobWidgets::window(job);
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = d->m_parentWidget;
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = qApp->activeWindow();
+-    }
+-
+     QMetaObject::invokeMethod(qGuiApp, [=] {
+-        auto *dlg = new KIO::SkipDialog(parentWidget, options, errorText);
++        auto *dlg = new KIO::SkipDialog(d->getParentWidget(job), options, errorText);
+         dlg->setAttribute(Qt::WA_DeleteOnClose);
+         dlg->setWindowModality(Qt::WindowModal);
+ 
+@@ -373,16 +379,6 @@
+         return;
+     }
+ 
+-    QWidget *parentWidget = parent;
+-
+-    if (!parentWidget) {
+-        parentWidget = d->m_parentWidget;
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = qApp->activeWindow();
+-    }
+-
+     const KGuiItem primaryActionButton(primaryActionText, primaryActionIconName);
+     const KGuiItem secondaryActionButton(secondaryActionText, secondaryActionIconName);
+ 
+@@ -412,7 +408,7 @@
+         hasCancelButton = true;
+         break;
+     case AskUserActionInterface::SSLMessageBox:
+-        d->sslMessageBox(text, metaData, parentWidget);
++        d->sslMessageBox(text, metaData, d->getParentWidget(parent));
+         return;
+     case AskUserActionInterface::Information:
+         dlgType = KMessageDialog::Information;
+@@ -442,7 +438,7 @@
+ 
+     QMetaObject::invokeMethod(qGuiApp, [=]() {
+         auto cancelButton = hasCancelButton ? KStandardGuiItem::cancel() : KGuiItem();
+-        auto *dialog = new KMessageDialog(dlgType, text, parentWidget);
++        auto *dialog = new KMessageDialog(dlgType, text, d->getParentWidget(parent));
+ 
+         dialog->setAttribute(Qt::WA_DeleteOnClose);
+         dialog->setCaption(title);
+@@ -492,15 +488,7 @@
+ 
+ void KIO::WidgetsAskUserActionHandlerPrivate::sslMessageBox(const QString &text, const KIO::MetaData &metaData, QWidget *parent)
+ {
+-    QWidget *parentWidget = parent;
+-
+-    if (!parentWidget) {
+-        parentWidget = m_parentWidget;
+-    }
+-
+-    if (!parentWidget) {
+-        parentWidget = qApp->activeWindow();
+-    }
++    QWidget *parentWidget = getParentWidget(parent);
+ 
+     const QStringList sslList = metaData.value(QStringLiteral("ssl_peer_chain")).split(QLatin1Char('\x01'), Qt::SkipEmptyParts);
+ 

diff --git a/kde-frameworks/kio/kio-5.113.0-r1.ebuild b/kde-frameworks/kio/kio-5.113.0-r1.ebuild
new file mode 100644
index 000000000000..1d6824b359b1
--- /dev/null
+++ b/kde-frameworks/kio/kio-5.113.0-r1.ebuild
@@ -0,0 +1,96 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+ECM_DESIGNERPLUGIN="true"
+ECM_HANDBOOK="optional"
+ECM_HANDBOOK_DIR="docs"
+ECM_TEST="forceoptional"
+PVCUT=$(ver_cut 1-2)
+QTMIN=5.15.9
+inherit ecm frameworks.kde.org xdg-utils
+
+DESCRIPTION="Framework providing transparent file and data management"
+
+LICENSE="LGPL-2+"
+KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86"
+IUSE="acl kerberos kf6compat +kwallet X"
+
+# tests hang
+RESTRICT="test"
+
+RDEPEND="
+	>=dev-qt/qtdbus-${QTMIN}:5
+	>=dev-qt/qtdeclarative-${QTMIN}:5
+	>=dev-qt/qtgui-${QTMIN}:5
+	>=dev-qt/qtnetwork-${QTMIN}:5[ssl]
+	>=dev-qt/qtwidgets-${QTMIN}:5
+	>=dev-qt/qtxml-${QTMIN}:5
+	=kde-frameworks/kauth-${PVCUT}*:5
+	=kde-frameworks/karchive-${PVCUT}*:5
+	=kde-frameworks/kbookmarks-${PVCUT}*:5
+	=kde-frameworks/kcodecs-${PVCUT}*:5
+	=kde-frameworks/kcompletion-${PVCUT}*:5
+	=kde-frameworks/kconfig-${PVCUT}*:5
+	=kde-frameworks/kconfigwidgets-${PVCUT}*:5
+	=kde-frameworks/kcoreaddons-${PVCUT}*:5
+	=kde-frameworks/kcrash-${PVCUT}*:5
+	=kde-frameworks/kdbusaddons-${PVCUT}*:5
+	=kde-frameworks/kguiaddons-${PVCUT}*:5
+	=kde-frameworks/ki18n-${PVCUT}*:5
+	=kde-frameworks/kiconthemes-${PVCUT}*:5
+	=kde-frameworks/kitemviews-${PVCUT}*:5
+	=kde-frameworks/kjobwidgets-${PVCUT}*:5
+	=kde-frameworks/knotifications-${PVCUT}*:5
+	=kde-frameworks/kservice-${PVCUT}*:5
+	=kde-frameworks/ktextwidgets-${PVCUT}*:5
+	=kde-frameworks/kwidgetsaddons-${PVCUT}*:5
+	=kde-frameworks/kwindowsystem-${PVCUT}*:5[X?]
+	=kde-frameworks/kxmlgui-${PVCUT}*:5
+	=kde-frameworks/solid-${PVCUT}*:5
+	sys-power/switcheroo-control
+	acl? (
+		sys-apps/attr
+		virtual/acl
+	)
+	handbook? (
+		dev-libs/libxml2
+		dev-libs/libxslt
+		=kde-frameworks/kdoctools-${PVCUT}*:5
+	)
+	kerberos? ( virtual/krb5 )
+	kf6compat? ( kde-apps/kio-extras:6 )
+	kwallet? ( =kde-frameworks/kwallet-${PVCUT}*:5 )
+	X? ( >=dev-qt/qtx11extras-${QTMIN}:5 )
+"
+DEPEND="${RDEPEND}
+	>=dev-qt/qtconcurrent-${QTMIN}:5
+	test? ( sys-libs/zlib )
+"
+PDEPEND=">=kde-frameworks/kded-${PVCUT}:5"
+
+PATCHES=( "${FILESDIR}/${P}-fix-crash-while-copying.patch" ) # KDE-bug 448532
+
+src_configure() {
+	local mycmakeargs=(
+		-DKIO_NO_PUBLIC_QTCONCURRENT=ON
+		$(cmake_use_find_package acl ACL)
+		$(cmake_use_find_package kerberos GSSAPI)
+		$(cmake_use_find_package kwallet KF5Wallet)
+		-DKF6_COMPAT_BUILD=$(usex kf6compat)
+		-DWITH_X11=$(usex X)
+	)
+
+	ecm_src_configure
+}
+
+pkg_postinst() {
+	ecm_pkg_postinst
+	xdg_desktop_database_update
+}
+
+pkg_postrm() {
+	ecm_pkg_postrm
+	xdg_desktop_database_update
+}


             reply	other threads:[~2023-12-25 19:51 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-25 19:51 Andreas Sturmlechner [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-12-25 19:51 [gentoo-commits] repo/gentoo:master commit in: kde-frameworks/kio/files/, kde-frameworks/kio/ Andreas Sturmlechner
2023-09-19 10:40 Andreas Sturmlechner
2023-04-22 16:21 Andreas Sturmlechner
2023-02-18 23:05 Andreas Sturmlechner
2023-01-30 21:43 Andreas Sturmlechner
2022-06-29 19:53 Andreas Sturmlechner
2022-02-10  9:13 Andreas Sturmlechner
2021-11-05 16:24 Andreas Sturmlechner
2021-09-14  9:04 Andreas Sturmlechner
2021-08-15 18:57 Andreas Sturmlechner
2021-07-11 20:47 Andreas Sturmlechner
2021-04-04 13:23 Andreas Sturmlechner
2021-02-03 22:33 Andreas Sturmlechner
2020-10-15 18:48 Andreas Sturmlechner
2020-09-29 12:49 Andreas Sturmlechner
2020-05-16  9:08 Andreas Sturmlechner
2020-05-15  8:16 Andreas Sturmlechner
2020-02-09 22:28 Andreas Sturmlechner
2019-12-22 22:48 Andreas Sturmlechner
2019-12-19  9:45 Andreas Sturmlechner
2019-01-12 14:35 Andreas Sturmlechner
2018-11-27  7:49 Andreas Sturmlechner
2017-11-29 16:40 Andreas Sturmlechner
2017-11-26 18:57 Andreas Sturmlechner
2017-05-29 22:58 Andreas Sturmlechner
2016-09-29 11:39 Michael Palimaka

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1703533860.0613524c927b0e15a323dbf0c42e44a3cec7c502.asturm@gentoo \
    --to=asturm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox