┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/dolphinbookmarkhandler.cpp135
-rw-r--r--src/dolphinbookmarkhandler.h61
-rw-r--r--src/dolphinmainwindow.cpp20
-rw-r--r--src/dolphinmainwindow.h28
-rw-r--r--src/dolphinui.rc3
6 files changed, 237 insertions, 11 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d41235f24..f1b7534ae 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -190,6 +190,7 @@ install(FILES dolphinpart.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR})
##########################################
set(dolphinstatic_SRCS
+ dolphinbookmarkhandler.cpp
dolphindockwidget.cpp
dolphinmainwindow.cpp
dolphinviewcontainer.cpp
diff --git a/src/dolphinbookmarkhandler.cpp b/src/dolphinbookmarkhandler.cpp
new file mode 100644
index 000000000..bb8f641ec
--- /dev/null
+++ b/src/dolphinbookmarkhandler.cpp
@@ -0,0 +1,135 @@
+/***************************************************************************
+ * Copyright (C) 2019 by David Hallas <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#include "dolphinbookmarkhandler.h"
+#include "dolphinmainwindow.h"
+#include "dolphinviewcontainer.h"
+#include "global.h"
+#include <KBookmarkMenu>
+#include <KIO/Global>
+#include <QDebug>
+#include <QDir>
+#include <QStandardPaths>
+
+DolphinBookmarkHandler::DolphinBookmarkHandler(DolphinMainWindow *mainWindow,
+ KActionCollection* collection,
+ QMenu* menu,
+ QObject* parent) :
+ QObject(parent),
+ m_mainWindow(mainWindow)
+{
+ QString bookmarksFile = QStandardPaths::locate(QStandardPaths::GenericDataLocation,
+ QStringLiteral("kfile/bookmarks.xml"));
+ if (bookmarksFile.isEmpty()) {
+ QString genericDataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+ if (genericDataLocation.isEmpty()) {
+ qWarning() << "GenericDataLocation is empty! Bookmarks will not be saved correctly.";
+ }
+ bookmarksFile = QStringLiteral("%1/dolphin").arg(genericDataLocation);
+ QDir().mkpath(bookmarksFile);
+ bookmarksFile += QLatin1String("/bookmarks.xml");
+ }
+ m_bookmarkManager = KBookmarkManager::managerForFile(bookmarksFile, QStringLiteral("dolphin"));
+ m_bookmarkManager->setUpdate(true);
+ m_bookmarkMenu.reset(new KBookmarkMenu(m_bookmarkManager, this, menu, collection));
+}
+
+DolphinBookmarkHandler::~DolphinBookmarkHandler()
+{
+}
+
+void DolphinBookmarkHandler::fillControlMenu(QMenu* menu, KActionCollection* collection)
+{
+ m_bookmarkControlMenu.reset(new KBookmarkMenu(m_bookmarkManager, this, menu, collection));
+}
+
+QString DolphinBookmarkHandler::currentTitle() const
+{
+ return title(m_mainWindow->activeViewContainer());
+}
+
+QUrl DolphinBookmarkHandler::currentUrl() const
+{
+ return url(m_mainWindow->activeViewContainer());
+}
+
+QString DolphinBookmarkHandler::currentIcon() const
+{
+ return icon(m_mainWindow->activeViewContainer());
+}
+
+bool DolphinBookmarkHandler::supportsTabs() const
+{
+ return true;
+}
+
+QList<KBookmarkOwner::FutureBookmark> DolphinBookmarkHandler::currentBookmarkList() const
+{
+ const auto viewContainers = m_mainWindow->viewContainers();
+ QList<FutureBookmark> bookmarks;
+ bookmarks.reserve(viewContainers.size());
+ for (const auto viewContainer : viewContainers) {
+ bookmarks << FutureBookmark(title(viewContainer), url(viewContainer), icon(viewContainer));
+ }
+ return bookmarks;
+}
+
+bool DolphinBookmarkHandler::enableOption(KBookmarkOwner::BookmarkOption option) const
+{
+ switch (option) {
+ case BookmarkOption::ShowAddBookmark: return true;
+ case BookmarkOption::ShowEditBookmark: return true;
+ }
+ return false;
+}
+
+void DolphinBookmarkHandler::openBookmark(const KBookmark& bookmark, Qt::MouseButtons, Qt::KeyboardModifiers)
+{
+ m_mainWindow->changeUrl(bookmark.url());
+}
+
+void DolphinBookmarkHandler::openFolderinTabs(const KBookmarkGroup& bookmarkGroup)
+{
+ m_mainWindow->openDirectories(bookmarkGroup.groupUrlList(), false);
+}
+
+void DolphinBookmarkHandler::openInNewTab(const KBookmark& bookmark)
+{
+ m_mainWindow->openNewTabAfterCurrentTab(bookmark.url());
+}
+
+void DolphinBookmarkHandler::openInNewWindow(const KBookmark& bookmark)
+{
+ Dolphin::openNewWindow({bookmark.url()}, m_mainWindow);
+}
+
+QString DolphinBookmarkHandler::title(DolphinViewContainer* viewContainer)
+{
+ return viewContainer->caption();
+}
+
+QUrl DolphinBookmarkHandler::url(DolphinViewContainer* viewContainer)
+{
+ return viewContainer->url();
+}
+
+QString DolphinBookmarkHandler::icon(DolphinViewContainer* viewContainer)
+{
+ return KIO::iconNameForUrl(viewContainer->url());
+}
diff --git a/src/dolphinbookmarkhandler.h b/src/dolphinbookmarkhandler.h
new file mode 100644
index 000000000..6fd511d80
--- /dev/null
+++ b/src/dolphinbookmarkhandler.h
@@ -0,0 +1,61 @@
+/***************************************************************************
+ * Copyright (C) 2019 by David Hallas <[email protected]> *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the *
+ * Free Software Foundation, Inc., *
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
+ ***************************************************************************/
+
+#ifndef DOLPHINBOOKMARKHANDLER_H
+#define DOLPHINBOOKMARKHANDLER_H
+
+#include <KBookmarkManager>
+#include <QObject>
+
+class DolphinMainWindow;
+class DolphinViewContainer;
+class KActionCollection;
+class KBookmarkManager;
+class KBookmarkMenu;
+class QMenu;
+
+class DolphinBookmarkHandler : public QObject, public KBookmarkOwner
+{
+ Q_OBJECT
+public:
+ DolphinBookmarkHandler(DolphinMainWindow *mainWindow, KActionCollection *collection, QMenu *menu, QObject *parent);
+ ~DolphinBookmarkHandler() override;
+ void fillControlMenu(QMenu *menu, KActionCollection *collection);
+private:
+ QString currentTitle() const override;
+ QUrl currentUrl() const override;
+ QString currentIcon() const override;
+ bool supportsTabs() const override;
+ QList<FutureBookmark> currentBookmarkList() const override;
+ bool enableOption(BookmarkOption option) const override;
+ void openBookmark(const KBookmark &bookmark, Qt::MouseButtons, Qt::KeyboardModifiers) override;
+ void openFolderinTabs(const KBookmarkGroup &bookmarkGroup) override;
+ void openInNewTab(const KBookmark &bookmark) override;
+ void openInNewWindow(const KBookmark &bookmark) override;
+ static QString title(DolphinViewContainer* viewContainer);
+ static QUrl url(DolphinViewContainer* viewContainer);
+ static QString icon(DolphinViewContainer* viewContainer);
+private:
+ DolphinMainWindow* m_mainWindow;
+ KBookmarkManager *m_bookmarkManager;
+ QScopedPointer<KBookmarkMenu> m_bookmarkMenu;
+ QScopedPointer<KBookmarkMenu> m_bookmarkControlMenu;
+};
+
+#endif // DOLPHINBOOKMARKHANDLER_H
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index f8b0fbb8b..b57ed4fc4 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -23,6 +23,7 @@
#include "config-terminal.h"
#include "global.h"
+#include "dolphinbookmarkhandler.h"
#include "dolphindockwidget.h"
#include "dolphincontextmenu.h"
#include "dolphinnewfilemenu.h"
@@ -94,6 +95,7 @@ DolphinMainWindow::DolphinMainWindow() :
m_actionHandler(nullptr),
m_remoteEncoding(nullptr),
m_settingsDialog(),
+ m_bookmarkHandler(nullptr),
m_controlButton(nullptr),
m_updateToolBarTimer(nullptr),
m_lastHandleUrlStatJob(nullptr),
@@ -183,6 +185,16 @@ DolphinMainWindow::~DolphinMainWindow()
{
}
+QVector<DolphinViewContainer*> DolphinMainWindow::viewContainers() const
+{
+ QVector<DolphinViewContainer*> viewContainers;
+ viewContainers.reserve(m_tabWidget->count());
+ for (int i = 0; i < m_tabWidget->count(); ++i) {
+ viewContainers << m_tabWidget->tabPageAt(i)->activeViewContainer();
+ }
+ return viewContainers;
+}
+
void DolphinMainWindow::openDirectories(const QList<QUrl>& dirs, bool splitView)
{
m_tabWidget->openDirectories(dirs, splitView);
@@ -982,6 +994,9 @@ void DolphinMainWindow::updateControlMenu()
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Up)));
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Home)));
goMenu->addAction(ac->action(QStringLiteral("closed_tabs")));
+ KActionMenu *bookmarkMenu = new KActionMenu(i18nc("@title:menu", "&Bookmarks"), goMenu);
+ m_bookmarkHandler->fillControlMenu(bookmarkMenu->menu(), ac);
+ goMenu->addAction(bookmarkMenu);
menu->addMenu(goMenu);
// Add "Tool" menu
@@ -1240,6 +1255,11 @@ void DolphinMainWindow::setupActions()
}
#endif
+ // setup 'Bookmarks' menu
+ KActionMenu *bookmarkMenu = new KActionMenu(i18nc("@title:menu", "&Bookmarks"), this);
+ m_bookmarkHandler = new DolphinBookmarkHandler(this, actionCollection(), bookmarkMenu->menu(), this);
+ actionCollection()->addAction(QStringLiteral("bookmarks"), bookmarkMenu);
+
// setup 'Settings' menu
KToggleAction* showMenuBar = KStandardAction::showMenubar(nullptr, nullptr, actionCollection());
connect(showMenuBar, &KToggleAction::triggered, // Fixes #286822
diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h
index 1734d4ad4..1e2460768 100644
--- a/src/dolphinmainwindow.h
+++ b/src/dolphinmainwindow.h
@@ -32,9 +32,11 @@
#include <QList>
#include <QPointer>
#include <QUrl>
+#include <QVector>
typedef KIO::FileUndoManager::CommandType CommandType;
+class DolphinBookmarkHandler;
class DolphinViewActionHandler;
class DolphinSettingsDialog;
class DolphinViewContainer;
@@ -72,6 +74,11 @@ public:
DolphinViewContainer* activeViewContainer() const;
/**
+ * Returns view container for all tabs
+ */
+ QVector<DolphinViewContainer*> viewContainers() const;
+
+ /**
* Opens each directory in \p dirs in a separate tab. If \a splitView is set,
* 2 directories are collected within one tab.
* \pre \a dirs must contain at least one url.
@@ -118,6 +125,16 @@ public slots:
/** Stores all settings and quits Dolphin. */
void quit();
+ /**
+ * Opens a new tab and places it after the current tab
+ */
+ void openNewTabAfterCurrentTab(const QUrl& url);
+
+ /**
+ * Opens a new tab and places it as the last tab
+ */
+ void openNewTabAfterLastTab(const QUrl& url);
+
signals:
/**
* Is sent if the selection of the currently active view has
@@ -331,16 +348,6 @@ private slots:
void openNewTab(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement);
/**
- * Opens a new tab and places it after the current tab
- */
- void openNewTabAfterCurrentTab(const QUrl& url);
-
- /**
- * Opens a new tab and places it as the last tab
- */
- void openNewTabAfterLastTab(const QUrl& url);
-
- /**
* Opens the selected folder in a new tab.
*/
void openInNewTab();
@@ -522,6 +529,7 @@ private:
DolphinViewActionHandler* m_actionHandler;
DolphinRemoteEncoding* m_remoteEncoding;
QPointer<DolphinSettingsDialog> m_settingsDialog;
+ DolphinBookmarkHandler* m_bookmarkHandler;
// Members for the toolbar menu that is shown when the menubar is hidden:
QToolButton* m_controlButton;
diff --git a/src/dolphinui.rc b/src/dolphinui.rc
index 076aafa96..b90321d05 100644
--- a/src/dolphinui.rc
+++ b/src/dolphinui.rc
@@ -1,5 +1,5 @@
<!DOCTYPE kpartgui SYSTEM "kpartgui.dtd">
-<kpartgui name="dolphin" version="21">
+<kpartgui name="dolphin" version="22">
<MenuBar>
<Menu name="file">
<Action name="new_menu" />
@@ -43,6 +43,7 @@
<Action name="view_properties" />
</Menu>
<Menu name="go">
+ <Action name="bookmarks" />
<Action name="closed_tabs" />
</Menu>
<Menu name="tools">