commit:     fdb8d397da0d650b8fa255906f6b237020d982b4
Author:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 22 18:59:44 2021 +0000
Commit:     Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sat Jan 23 00:25:36 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fdb8d397

kde-apps/dolphin: Show button to open knetattach inline

See also: https://mail.kde.org/pipermail/distributions/2021-January/000916.html
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=431626
Package-Manager: Portage-3.0.14, Repoman-3.0.2
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>

 kde-apps/dolphin/dolphin-20.12.1-r1.ebuild         |  99 +++++++++++
 .../files/dolphin-20.12.1-knetattach-button.patch  | 193 +++++++++++++++++++++
 2 files changed, 292 insertions(+)

diff --git a/kde-apps/dolphin/dolphin-20.12.1-r1.ebuild 
b/kde-apps/dolphin/dolphin-20.12.1-r1.ebuild
new file mode 100644
index 00000000000..0fbdb6a7523
--- /dev/null
+++ b/kde-apps/dolphin/dolphin-20.12.1-r1.ebuild
@@ -0,0 +1,99 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+ECM_HANDBOOK="forceoptional"
+ECM_TEST="true"
+PVCUT=$(ver_cut 1-3)
+KFMIN=5.75.0
+QTMIN=5.15.1
+VIRTUALX_REQUIRED="test"
+inherit ecm kde.org optfeature
+
+DESCRIPTION="Plasma filemanager focusing on usability"
+HOMEPAGE="https://apps.kde.org/en/dolphin https://userbase.kde.org/Dolphin";
+
+LICENSE="GPL-2" # TODO: CHECK
+SLOT="5"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE="activities semantic-desktop telemetry"
+
+DEPEND="
+       >=dev-qt/qtconcurrent-${QTMIN}:5
+       >=dev-qt/qtdbus-${QTMIN}:5
+       >=dev-qt/qtgui-${QTMIN}:5
+       >=dev-qt/qtwidgets-${QTMIN}:5
+       >=dev-qt/qtxml-${QTMIN}:5
+       >=kde-frameworks/kbookmarks-${KFMIN}:5
+       >=kde-frameworks/kcmutils-${KFMIN}:5
+       >=kde-frameworks/kcodecs-${KFMIN}:5
+       >=kde-frameworks/kcompletion-${KFMIN}:5
+       >=kde-frameworks/kconfig-${KFMIN}:5
+       >=kde-frameworks/kconfigwidgets-${KFMIN}:5
+       >=kde-frameworks/kcoreaddons-${KFMIN}:5
+       >=kde-frameworks/kcrash-${KFMIN}:5
+       >=kde-frameworks/kdbusaddons-${KFMIN}:5
+       >=kde-frameworks/ki18n-${KFMIN}:5
+       >=kde-frameworks/kiconthemes-${KFMIN}:5
+       >=kde-frameworks/kinit-${KFMIN}:5
+       >=kde-frameworks/kio-${KFMIN}:5=
+       >=kde-frameworks/kitemviews-${KFMIN}:5
+       >=kde-frameworks/kjobwidgets-${KFMIN}:5
+       >=kde-frameworks/knewstuff-${KFMIN}:5
+       >=kde-frameworks/knotifications-${KFMIN}:5
+       >=kde-frameworks/kparts-${KFMIN}:5
+       >=kde-frameworks/kservice-${KFMIN}:5
+       >=kde-frameworks/ktextwidgets-${KFMIN}:5
+       >=kde-frameworks/kwidgetsaddons-${KFMIN}:5
+       >=kde-frameworks/kwindowsystem-${KFMIN}:5
+       >=kde-frameworks/kxmlgui-${KFMIN}:5
+       >=kde-frameworks/solid-${KFMIN}:5
+       >=media-libs/phonon-4.11.0
+       activities? ( >=kde-frameworks/kactivities-${KFMIN}:5 )
+       semantic-desktop? (
+               >=kde-apps/baloo-widgets-${PVCUT}:5
+               >=kde-frameworks/baloo-${KFMIN}:5
+               >=kde-frameworks/kfilemetadata-${KFMIN}:5
+       )
+       telemetry? ( dev-libs/kuserfeedback:5 )
+"
+RDEPEND="${DEPEND}
+       >=kde-apps/kio-extras-${PVCUT}:5
+"
+
+PATCHES=( "${FILESDIR}/${P}-knetattach-button.patch" ) # KDE-Bug 431626
+
+src_configure() {
+       local mycmakeargs=(
+               -DCMAKE_DISABLE_FIND_PACKAGE_PackageKitQt5=ON
+               $(cmake_use_find_package activities KF5Activities)
+               $(cmake_use_find_package semantic-desktop KF5Baloo)
+               $(cmake_use_find_package semantic-desktop KF5BalooWidgets)
+               $(cmake_use_find_package semantic-desktop KF5FileMetaData)
+               $(cmake_use_find_package telemetry KUserFeedback)
+       )
+       ecm_src_configure
+}
+
+src_test() {
+       local myctestargs=(
+               # servicemenuinstaller requires ruby, no thanks
+               # dolphinmainwindowtest, kitemlistcontrollertest, 
kfileitemlistviewtest, kfileitemmodeltest hang forever
+               # placesitemmodeltest requires DBus
+               -E 
"(servicemenuinstaller|dolphinmainwindowtest|kfileitemlistviewtest|kfileitemmodeltest|kitemlistcontrollertest|placesitemmodeltest)"
+       )
+       ecm_src_test
+}
+
+pkg_postinst() {
+       if [[ -z "${REPLACING_VERSIONS}" ]]; then
+               elog "Optional dependencies:"
+               optfeature "compress/extract and other actions" 
kde-apps/ark:${SLOT}
+               optfeature "crypto actions" kde-apps/kleopatra:${SLOT}
+               optfeature "video file thumbnails" kde-apps/ffmpegthumbs:${SLOT}
+               optfeature "graphics file thumbnails" 
kde-apps/thumbnailers:${SLOT}
+               optfeature "'Share' context menu actions" 
kde-frameworks/purpose:${SLOT}
+       fi
+       ecm_pkg_postinst
+}

diff --git a/kde-apps/dolphin/files/dolphin-20.12.1-knetattach-button.patch 
b/kde-apps/dolphin/files/dolphin-20.12.1-knetattach-button.patch
new file mode 100644
index 00000000000..b66b6c7e034
--- /dev/null
+++ b/kde-apps/dolphin/files/dolphin-20.12.1-knetattach-button.patch
@@ -0,0 +1,193 @@
+From 33270dd4423eea329b8f20db17f8d70ab7b108da Mon Sep 17 00:00:00 2001
+From: Norbert Preining <norb...@preining.info>
+Date: Tue, 19 Jan 2021 06:43:14 +0900
+Subject: [PATCH] Show button to open knetattach inline with URL nav on
+ remove:// view
+
+This is a backport of b1cadeba939155282a9fadf7d7b025d6529c489e
+
+  From b1cadeba939155282a9fadf7d7b025d6529c489e Mon Sep 17 00:00:00 2001
+  From: Nate Graham <n...@kde.org>
+  Date: Tue, 15 Dec 2020 23:03:00 -0700
+  Subject: [PATCH] Show button to open knetattach inline with URL nav on
+   Remote:// view
+
+  In conjunction with
+  https://invent.kde.org/frameworks/kio/-/merge_requests/260,
+  the net result is to hide the knetattach launcher in the view, and show
+  it inline with Dolphin's URL navigator toolbar when viewing the
+  remote:// view, just like how we add an "Empty Trash" button when
+  viewing trash://.
+
+The backport ensures that even with frameworks << 5.78 only one network
+button is shown.
+
+BUG: 431626
+---
+ src/dolphinnavigatorswidgetaction.cpp | 61 +++++++++++++++++++++++++++
+ src/dolphinnavigatorswidgetaction.h   | 20 ++++++++-
+ 2 files changed, 80 insertions(+), 1 deletion(-)
+
+diff --git a/src/dolphinnavigatorswidgetaction.cpp 
b/src/dolphinnavigatorswidgetaction.cpp
+index b8c77c69b..b25c60d0c 100644
+--- a/src/dolphinnavigatorswidgetaction.cpp
++++ b/src/dolphinnavigatorswidgetaction.cpp
+@@ -10,9 +10,13 @@
+ #include "trash/dolphintrash.h"
+ 
+ #include <KLocalizedString>
++#include <KNotificationJobUiDelegate>
++#include <KService>
+ #include <KXMLGUIFactory>
+ #include <KXmlGuiWindow>
+ 
++#include <KIO/ApplicationLauncherJob>
++
+ #include <QApplication>
+ #include <QDomDocument>
+ #include <QHBoxLayout>
+@@ -154,7 +158,13 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
+     }
+     int trailingSpacing = (m_globalXOfSplitter + m_splitter->width())
+                           - (m_globalXOfPrimary + m_widthOfPrimary);
++#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
+     if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible()) {
++#else
++    if (trailingSpacing < 0 || emptyTrashButton(Primary)->isVisible()
++                            || networkFolderButton(Primary)->isVisible()
++    ) {
++#endif
+         trailingSpacing = 0;
+     }
+     const int widthLeftForUrlNavigator = m_splitter->widget(0)->width() - 
leadingSpacing - trailingSpacing;
+@@ -181,7 +191,13 @@ void DolphinNavigatorsWidgetAction::adjustSpacing()
+ 
+     trailingSpacing = (m_globalXOfSplitter + m_splitter->width())
+                       - (m_globalXOfSecondary + m_widthOfSecondary);
++#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
+     if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible()) {
++#else
++    if (trailingSpacing < 0 || emptyTrashButton(Secondary)->isVisible()
++                            || networkFolderButton(Secondary)->isVisible()
++    ) {
++#endif
+         trailingSpacing = 0;
+     } else {
+         const int widthLeftForUrlNavigator2 = m_splitter->widget(1)->width() 
- trailingSpacing;
+@@ -212,6 +228,11 @@ QWidget 
*DolphinNavigatorsWidgetAction::createNavigatorWidget(Side side) const
+     auto emptyTrashButton = newEmptyTrashButton(urlNavigator, 
navigatorWidget);
+     layout->addWidget(emptyTrashButton);
+ 
++#if !(KIO_VERSION < QT_VERSION_CHECK(5, 78, 0))
++    auto networkFolderButton = newNetworkFolderButton(urlNavigator, 
navigatorWidget);
++    layout->addWidget(networkFolderButton);
++#endif
++
+     connect(urlNavigator, &KUrlNavigator::urlChanged, this, [this]() {
+         // We have to wait for DolphinUrlNavigator::sizeHint() to update which
+         // happens a little bit later than when urlChanged is emitted.
+@@ -249,6 +270,38 @@ QPushButton 
*DolphinNavigatorsWidgetAction::newEmptyTrashButton(const DolphinUrl
+     return emptyTrashButton;
+ }
+ 
++#if !(KIO_VERSION < QT_VERSION_CHECK(5, 78, 0))
++QPushButton 
*DolphinNavigatorsWidgetAction::networkFolderButton(DolphinNavigatorsWidgetAction::Side
 side)
++{
++    int sideIndex = (side == Primary ? 0 : 1);
++    if (side == Primary) {
++        return static_cast<QPushButton 
*>(m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget());
++    }
++    return static_cast<QPushButton 
*>(m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget());
++}
++
++QPushButton *DolphinNavigatorsWidgetAction::newNetworkFolderButton(const 
DolphinUrlNavigator *urlNavigator, QWidget *parent) const
++{
++    auto networkFolderButton = new 
QPushButton(QIcon::fromTheme(QStringLiteral("folder-add")),
++                                        i18nc("@action:button", "Add Network 
Folder"), parent);
++    networkFolderButton->setFlat(true);
++    connect(networkFolderButton, &QPushButton::clicked,
++            this, [networkFolderButton]() {
++                KService::Ptr service = 
KService::serviceByDesktopName(QStringLiteral("org.kde.knetattach"));
++                auto *job = new KIO::ApplicationLauncherJob(service, 
networkFolderButton);
++                auto *delegate = new KNotificationJobUiDelegate;
++                delegate->setAutoErrorHandlingEnabled(true);
++                job->setUiDelegate(delegate);
++                job->start();
++            });
++    networkFolderButton->hide();
++    connect(urlNavigator, &KUrlNavigator::urlChanged, this, 
[networkFolderButton, urlNavigator]() {
++        networkFolderButton->setVisible(urlNavigator->locationUrl().scheme() 
== QLatin1String("remote"));
++    });
++    return networkFolderButton;
++}
++#endif
++
+ QWidget *DolphinNavigatorsWidgetAction::spacing(Side side, Position position) 
const
+ {
+     int sideIndex = (side == Primary ? 0 : 1);
+@@ -257,9 +310,17 @@ QWidget *DolphinNavigatorsWidgetAction::spacing(Side 
side, Position position) co
+         return m_splitter->widget(sideIndex)->layout()->itemAt(0)->widget();
+     }
+     if (side == Primary) {
++#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
+         return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget();
++#else
++        return m_splitter->widget(sideIndex)->layout()->itemAt(4)->widget();
++#endif
+     }
++#if KIO_VERSION < QT_VERSION_CHECK(5, 78, 0)
+     return m_splitter->widget(sideIndex)->layout()->itemAt(2)->widget();
++#else
++    return m_splitter->widget(sideIndex)->layout()->itemAt(3)->widget();
++#endif
+ }
+ 
+ void DolphinNavigatorsWidgetAction::updateText()
+diff --git a/src/dolphinnavigatorswidgetaction.h 
b/src/dolphinnavigatorswidgetaction.h
+index bbd8cf127..ce199b3f0 100644
+--- a/src/dolphinnavigatorswidgetaction.h
++++ b/src/dolphinnavigatorswidgetaction.h
+@@ -10,6 +10,7 @@
+ 
+ #include "dolphinurlnavigator.h"
+ 
++#include <kio_version.h>
+ #include <QSplitter>
+ #include <QTimer>
+ #include <QWidgetAction>
+@@ -30,7 +31,8 @@ class QPushButton;
+  *      The secondary side only exists for split view and is created by
+  *      createSecondaryUrlNavigator() when necessary.
+  * - Each side is a QWidget which I call NavigatorWidget with a QHBoxLayout.
+- * - Each NavigatorWidget consists an UrlNavigator, an emptyTrashButton and 
spacing.
++ * - Each NavigatorWidget consists an UrlNavigator, an emptyTrashButton, a
++ *   networkFolderButton (for frameworks >= 5.78), and spacing.
+  * - Only the primary navigatorWidget has leading spacing. Both have trailing 
spacing.
+  *      The spacing is there to align the UrlNavigator with its 
DolphinViewContainer.
+  */
+@@ -131,6 +133,22 @@ private:
+      */
+     QPushButton *newEmptyTrashButton(const DolphinUrlNavigator *urlNavigator, 
QWidget *parent) const;
+ 
++#if !(KIO_VERSION < QT_VERSION_CHECK(5, 78, 0))
++    /**
++     * Used to retrieve the networkFolderButtons for the navigatorWidgets on
++     * both sides.
++     */
++    QPushButton *networkFolderButton(Side side);
++
++    /**
++     * Creates a new add "network folder" button.
++     * @param urlNavigator Only when this UrlNavigator shows the remote 
directory
++     *                     will the button be visible.
++     * @param parent       The object that should be the button's parent.
++     */
++    QPushButton *newNetworkFolderButton(const DolphinUrlNavigator 
*urlNavigator, QWidget *parent) const;
++#endif
++
+     enum Position {
+         Leading,
+         Trailing
+-- 
+GitLab
+

Reply via email to