2007-04-01 18:36:23 +00:00
|
|
|
/***************************************************************************
|
2011-02-04 14:57:33 +00:00
|
|
|
* Copyright (C) 2006 by Peter Penz <peter.penz19@gmail.com> *
|
2007-04-01 18:36:23 +00:00
|
|
|
* Copyright (C) 2006 by Stefan Monov <logixoul@gmail.com> *
|
|
|
|
* Copyright (C) 2006 by Cvetoslav Ludmiloff <ludmiloff@gmail.com> *
|
|
|
|
* *
|
|
|
|
* 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 "dolphinmainwindow.h"
|
|
|
|
|
2019-12-23 10:06:54 +00:00
|
|
|
#include "dolphinmainwindowadaptor.h"
|
2019-01-28 21:38:21 +00:00
|
|
|
#include "config-terminal.h"
|
2015-10-10 13:09:48 +00:00
|
|
|
#include "global.h"
|
Add Bookmark Handling
Summary:
Add Bookmark Handling. Adds complete bookmark support as provided by
other KDE applications like Konsole and Konqueror. This allows you to
bookmark individual folders, create bookmark folders and open them.
Test Plan:
Go -> Bookmark -> Add Bookmark
Go -> Bookmark -> [Open the bookmark you selected]
FEATURE: 171366
Reviewers: #dolphin, elvisangelaccio, ngraham
Reviewed By: #dolphin, elvisangelaccio, ngraham
Subscribers: ognarb, meven, loh.tar, cfeck, hein, kfm-devel
Tags: #dolphin
Maniphest Tasks: T5408
Differential Revision: https://phabricator.kde.org/D19926
2019-03-20 19:29:20 +00:00
|
|
|
#include "dolphinbookmarkhandler.h"
|
2010-12-31 10:59:46 +00:00
|
|
|
#include "dolphindockwidget.h"
|
2010-01-25 07:58:24 +00:00
|
|
|
#include "dolphincontextmenu.h"
|
2010-08-27 05:26:27 +00:00
|
|
|
#include "dolphinnewfilemenu.h"
|
2014-06-19 20:04:36 +00:00
|
|
|
#include "dolphinrecenttabsmenu.h"
|
2007-06-07 21:10:48 +00:00
|
|
|
#include "dolphinviewcontainer.h"
|
2014-07-02 13:30:37 +00:00
|
|
|
#include "dolphintabpage.h"
|
2017-08-24 13:45:28 +00:00
|
|
|
#include "middleclickactioneventfilter.h"
|
2009-01-14 20:14:36 +00:00
|
|
|
#include "panels/folders/folderspanel.h"
|
2019-09-01 21:01:57 +00:00
|
|
|
#include "panels/places/placesitemmodel.h"
|
2009-01-14 20:14:36 +00:00
|
|
|
#include "panels/places/placespanel.h"
|
|
|
|
#include "panels/information/informationpanel.h"
|
2018-01-21 11:18:21 +00:00
|
|
|
#include "panels/terminal/terminalpanel.h"
|
2010-07-24 22:08:30 +00:00
|
|
|
#include "settings/dolphinsettingsdialog.h"
|
2009-08-01 20:01:51 +00:00
|
|
|
#include "statusbar/dolphinstatusbar.h"
|
2010-07-24 22:08:30 +00:00
|
|
|
#include "views/dolphinviewactionhandler.h"
|
|
|
|
#include "views/dolphinremoteencoding.h"
|
2012-01-27 20:52:29 +00:00
|
|
|
#include "views/draganddrophelper.h"
|
2010-07-24 22:08:30 +00:00
|
|
|
#include "views/viewproperties.h"
|
2013-08-28 16:46:45 +00:00
|
|
|
#include "views/dolphinnewfilemenuobserver.h"
|
2007-04-01 18:36:23 +00:00
|
|
|
#include "dolphin_generalsettings.h"
|
|
|
|
|
2011-02-04 14:43:21 +00:00
|
|
|
#include <KActionCollection>
|
|
|
|
#include <KActionMenu>
|
2016-05-18 01:06:49 +00:00
|
|
|
#include <KAuthorized>
|
2011-02-04 14:43:21 +00:00
|
|
|
#include <KConfig>
|
Add an option to show tabs from last time when Dolphin starts
Summary:
All modern web browsers offer a function to show tabs from last time when a browser starts, and many apps today
restore their prior state when they're launched. This patch implements thatfunctionality as an option and turns it on by default.
The settings window is accordingly adjusted to be clear about what applies when:
{F7681752}
FEATURE: 413564
FIXED-IN: 20.08.0
Depends on D25106
Depends on D25219
Test Plan:
With the new setting turned off:
- No behavioral changes at all
With the new setting turned on:
- When launched from the GUI or CLI without any URLs, dolphin restores session
- When rebooting with Dolphin open, it restores session normally after the system comes back (i.e. no behavioral change here)
- When launched with URLs, Dolphin window is opened showing those URLs instead of restoring session
- When Dolphin is already running and a new window is opened, that new window shows a single tab with the same URL as was visible in the previously-open Dolphin instance (i.e. no behavioral change here)
- "Open Containing folder" functionality in other apps works regardless of whether or not Dolphin is running
Reviewers: #dolphin, #vdg, feverfew, meven, elvisangelaccio, ndavis
Reviewed By: #dolphin, #vdg, feverfew, elvisangelaccio, ndavis
Subscribers: davidedmundson, ndavis, intika, feverfew, kfm-devel, ngraham, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D11382
2019-07-19 17:52:12 +00:00
|
|
|
#include <KConfigGui>
|
2019-01-15 17:11:09 +00:00
|
|
|
#include <KDualAction>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <KFileItemListProperties>
|
2017-08-03 14:48:02 +00:00
|
|
|
#include <KHelpMenu>
|
2020-04-05 11:44:12 +00:00
|
|
|
#include <KIO/CommandLauncherJob>
|
2012-04-17 20:19:18 +00:00
|
|
|
#include <KIO/JobUiDelegate>
|
2018-03-03 13:36:44 +00:00
|
|
|
#include <KIO/OpenFileManagerWindowJob>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <KJobWidgets>
|
2014-10-18 12:42:41 +00:00
|
|
|
#include <KLocalizedString>
|
2011-02-04 14:43:21 +00:00
|
|
|
#include <KMessageBox>
|
2019-11-17 17:14:27 +00:00
|
|
|
#include <KNS3/KMoreToolsMenuFactory>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <KProtocolInfo>
|
|
|
|
#include <KProtocolManager>
|
2011-02-04 14:43:21 +00:00
|
|
|
#include <KRun>
|
|
|
|
#include <KShell>
|
|
|
|
#include <KStandardAction>
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
#include <KStartupInfo>
|
2020-05-24 14:25:14 +00:00
|
|
|
#include <KSycoca>
|
2011-02-04 14:43:21 +00:00
|
|
|
#include <KToggleAction>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <KToolBar>
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
#include <KToolBarPopupAction>
|
2011-02-04 19:42:42 +00:00
|
|
|
#include <KToolInvocation>
|
2014-10-18 13:00:17 +00:00
|
|
|
#include <KUrlComboBox>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <KUrlNavigator>
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
#include <KWindowSystem>
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2015-02-04 09:22:03 +00:00
|
|
|
#include <QApplication>
|
2007-12-16 19:25:59 +00:00
|
|
|
#include <QClipboard>
|
2014-10-18 13:00:17 +00:00
|
|
|
#include <QCloseEvent>
|
2019-06-23 19:19:49 +00:00
|
|
|
#include <QDesktopServices>
|
2015-02-03 08:25:33 +00:00
|
|
|
#include <QDialog>
|
2018-03-03 13:36:44 +00:00
|
|
|
#include <QFileInfo>
|
2018-03-04 13:38:16 +00:00
|
|
|
#include <QLineEdit>
|
|
|
|
#include <QMenu>
|
|
|
|
#include <QMenuBar>
|
|
|
|
#include <QPushButton>
|
|
|
|
#include <QShowEvent>
|
|
|
|
#include <QStandardPaths>
|
|
|
|
#include <QTimer>
|
|
|
|
#include <QToolButton>
|
2019-06-23 19:19:49 +00:00
|
|
|
#include <QWhatsThisClickedEvent>
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2011-08-13 10:42:53 +00:00
|
|
|
namespace {
|
|
|
|
// Used for GeneralSettings::version() to determine whether
|
|
|
|
// an updated version of Dolphin is running.
|
2011-08-14 13:30:29 +00:00
|
|
|
const int CurrentDolphinVersion = 200;
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
// The maximum number of entries in the back/forward popup menu
|
|
|
|
const int MaxNumberOfNavigationentries = 12;
|
2019-10-13 14:37:00 +00:00
|
|
|
// The maximum number of "Activate Tab" shortcuts
|
|
|
|
const int MaxActivateTabShortcuts = 9;
|
2016-06-25 14:39:49 +00:00
|
|
|
}
|
2011-08-13 10:42:53 +00:00
|
|
|
|
2011-04-12 18:01:31 +00:00
|
|
|
DolphinMainWindow::DolphinMainWindow() :
|
2019-10-01 21:48:41 +00:00
|
|
|
KXmlGuiWindow(nullptr),
|
2017-11-21 09:52:14 +00:00
|
|
|
m_newFileMenu(nullptr),
|
2019-06-23 19:19:49 +00:00
|
|
|
m_helpMenu(nullptr),
|
2017-11-21 09:52:14 +00:00
|
|
|
m_tabWidget(nullptr),
|
|
|
|
m_activeViewContainer(nullptr),
|
|
|
|
m_actionHandler(nullptr),
|
|
|
|
m_remoteEncoding(nullptr),
|
2011-04-12 18:01:31 +00:00
|
|
|
m_settingsDialog(),
|
Add Bookmark Handling
Summary:
Add Bookmark Handling. Adds complete bookmark support as provided by
other KDE applications like Konsole and Konqueror. This allows you to
bookmark individual folders, create bookmark folders and open them.
Test Plan:
Go -> Bookmark -> Add Bookmark
Go -> Bookmark -> [Open the bookmark you selected]
FEATURE: 171366
Reviewers: #dolphin, elvisangelaccio, ngraham
Reviewed By: #dolphin, elvisangelaccio, ngraham
Subscribers: ognarb, meven, loh.tar, cfeck, hein, kfm-devel
Tags: #dolphin
Maniphest Tasks: T5408
Differential Revision: https://phabricator.kde.org/D19926
2019-03-20 19:29:20 +00:00
|
|
|
m_bookmarkHandler(nullptr),
|
2017-11-21 09:52:14 +00:00
|
|
|
m_controlButton(nullptr),
|
|
|
|
m_updateToolBarTimer(nullptr),
|
|
|
|
m_lastHandleUrlStatJob(nullptr),
|
|
|
|
m_terminalPanel(nullptr),
|
|
|
|
m_placesPanel(nullptr),
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
m_tearDownFromPlacesRequested(false),
|
|
|
|
m_backAction(nullptr),
|
|
|
|
m_forwardAction(nullptr)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2017-07-28 11:35:50 +00:00
|
|
|
Q_INIT_RESOURCE(dolphin);
|
2019-12-23 10:06:54 +00:00
|
|
|
|
|
|
|
new MainWindowAdaptor(this);
|
|
|
|
|
2019-10-01 21:48:41 +00:00
|
|
|
#ifndef Q_OS_WIN
|
|
|
|
setWindowFlags(Qt::WindowContextHelpButtonHint);
|
|
|
|
#endif
|
2018-04-29 15:07:18 +00:00
|
|
|
setComponentName(QStringLiteral("dolphin"), QGuiApplication::applicationDisplayName());
|
2016-03-16 21:17:37 +00:00
|
|
|
setObjectName(QStringLiteral("Dolphin#"));
|
2008-04-12 15:09:46 +00:00
|
|
|
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(&DolphinNewFileMenuObserver::instance(), &DolphinNewFileMenuObserver::errorMessage,
|
|
|
|
this, &DolphinMainWindow::showErrorMessage);
|
2013-08-28 16:46:45 +00:00
|
|
|
|
2008-04-30 23:32:33 +00:00
|
|
|
KIO::FileUndoManager* undoManager = KIO::FileUndoManager::self();
|
2008-04-20 22:07:44 +00:00
|
|
|
undoManager->setUiInterface(new UndoUiInterface());
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2019-05-05 15:20:44 +00:00
|
|
|
connect(undoManager, QOverload<bool>::of(&KIO::FileUndoManager::undoAvailable),
|
2014-04-10 14:53:41 +00:00
|
|
|
this, &DolphinMainWindow::slotUndoAvailable);
|
|
|
|
connect(undoManager, &KIO::FileUndoManager::undoTextChanged,
|
|
|
|
this, &DolphinMainWindow::slotUndoTextChanged);
|
|
|
|
connect(undoManager, &KIO::FileUndoManager::jobRecordingStarted,
|
|
|
|
this, &DolphinMainWindow::clearStatusBar);
|
|
|
|
connect(undoManager, &KIO::FileUndoManager::jobRecordingFinished,
|
|
|
|
this, &DolphinMainWindow::showCommand);
|
2011-04-12 18:01:31 +00:00
|
|
|
|
2011-11-06 08:53:03 +00:00
|
|
|
GeneralSettings* generalSettings = GeneralSettings::self();
|
2011-08-14 13:30:29 +00:00
|
|
|
const bool firstRun = (generalSettings->version() < 200);
|
2011-04-12 18:01:31 +00:00
|
|
|
if (firstRun) {
|
|
|
|
generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());
|
|
|
|
}
|
|
|
|
|
|
|
|
setAcceptDrops(true);
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget = new DolphinTabWidget(this);
|
2017-05-22 09:37:37 +00:00
|
|
|
m_tabWidget->setObjectName("tabWidget");
|
2016-03-16 21:17:37 +00:00
|
|
|
connect(m_tabWidget, &DolphinTabWidget::activeViewChanged,
|
|
|
|
this, &DolphinMainWindow::activeViewChanged);
|
|
|
|
connect(m_tabWidget, &DolphinTabWidget::tabCountChanged,
|
|
|
|
this, &DolphinMainWindow::tabCountChanged);
|
|
|
|
connect(m_tabWidget, &DolphinTabWidget::currentUrlChanged,
|
2018-07-28 15:29:00 +00:00
|
|
|
this, &DolphinMainWindow::updateWindowTitle);
|
2014-08-10 16:52:06 +00:00
|
|
|
setCentralWidget(m_tabWidget);
|
|
|
|
|
2011-04-12 18:01:31 +00:00
|
|
|
setupActions();
|
|
|
|
|
|
|
|
m_actionHandler = new DolphinViewActionHandler(actionCollection(), this);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(m_actionHandler, &DolphinViewActionHandler::actionBeingHandled, this, &DolphinMainWindow::clearStatusBar);
|
2018-10-24 20:49:01 +00:00
|
|
|
connect(m_actionHandler, &DolphinViewActionHandler::createDirectoryTriggered, this, &DolphinMainWindow::createDirectory);
|
2011-04-12 18:01:31 +00:00
|
|
|
|
|
|
|
m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(this, &DolphinMainWindow::urlChanged,
|
|
|
|
m_remoteEncoding, &DolphinRemoteEncoding::slotAboutToOpenUrl);
|
2011-04-12 18:01:31 +00:00
|
|
|
|
|
|
|
setupDockWidgets();
|
|
|
|
|
|
|
|
setupGUI(Keys | Save | Create | ToolBar);
|
2016-03-16 21:17:37 +00:00
|
|
|
stateChanged(QStringLiteral("new_file"));
|
2011-04-12 18:01:31 +00:00
|
|
|
|
|
|
|
QClipboard* clipboard = QApplication::clipboard();
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(clipboard, &QClipboard::dataChanged,
|
|
|
|
this, &DolphinMainWindow::updatePasteAction);
|
2011-04-12 18:01:31 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
|
2011-04-12 18:01:31 +00:00
|
|
|
showFilterBarAction->setChecked(generalSettings->filterBar());
|
|
|
|
|
|
|
|
if (firstRun) {
|
|
|
|
menuBar()->setVisible(false);
|
|
|
|
// Assure a proper default size if Dolphin runs the first time
|
|
|
|
resize(750, 500);
|
|
|
|
}
|
|
|
|
|
|
|
|
const bool showMenu = !menuBar()->isHidden();
|
|
|
|
QAction* showMenuBarAction = actionCollection()->action(KStandardAction::name(KStandardAction::ShowMenubar));
|
|
|
|
showMenuBarAction->setChecked(showMenu); // workaround for bug #171080
|
|
|
|
if (!showMenu) {
|
2012-04-07 22:09:11 +00:00
|
|
|
createControlButton();
|
2011-04-12 18:01:31 +00:00
|
|
|
}
|
2017-08-24 13:45:28 +00:00
|
|
|
|
|
|
|
// enable middle-click on back/forward/up to open in a new tab
|
|
|
|
auto *middleClickEventFilter = new MiddleClickActionEventFilter(this);
|
|
|
|
connect(middleClickEventFilter, &MiddleClickActionEventFilter::actionMiddleClicked, this, &DolphinMainWindow::slotToolBarActionMiddleClicked);
|
|
|
|
toolBar()->installEventFilter(middleClickEventFilter);
|
2019-06-23 19:19:49 +00:00
|
|
|
|
|
|
|
setupWhatsThis();
|
2019-11-17 17:14:27 +00:00
|
|
|
|
2020-05-24 14:25:14 +00:00
|
|
|
connect(KSycoca::self(), QOverload<>::of(&KSycoca::databaseChanged), this, &DolphinMainWindow::updateOpenPreferredSearchToolAction);
|
|
|
|
|
|
|
|
QTimer::singleShot(0, this, &DolphinMainWindow::updateOpenPreferredSearchToolAction);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
DolphinMainWindow::~DolphinMainWindow()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
Add Bookmark Handling
Summary:
Add Bookmark Handling. Adds complete bookmark support as provided by
other KDE applications like Konsole and Konqueror. This allows you to
bookmark individual folders, create bookmark folders and open them.
Test Plan:
Go -> Bookmark -> Add Bookmark
Go -> Bookmark -> [Open the bookmark you selected]
FEATURE: 171366
Reviewers: #dolphin, elvisangelaccio, ngraham
Reviewed By: #dolphin, elvisangelaccio, ngraham
Subscribers: ognarb, meven, loh.tar, cfeck, hein, kfm-devel
Tags: #dolphin
Maniphest Tasks: T5408
Differential Revision: https://phabricator.kde.org/D19926
2019-03-20 19:29:20 +00:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2015-04-27 10:55:53 +00:00
|
|
|
void DolphinMainWindow::openDirectories(const QList<QUrl>& dirs, bool splitView)
|
2009-12-17 21:07:18 +00:00
|
|
|
{
|
2015-04-27 10:55:53 +00:00
|
|
|
m_tabWidget->openDirectories(dirs, splitView);
|
2009-12-17 21:07:18 +00:00
|
|
|
}
|
|
|
|
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
void DolphinMainWindow::openDirectories(const QStringList& dirs, bool splitView)
|
|
|
|
{
|
|
|
|
openDirectories(QUrl::fromStringList(dirs), splitView);
|
|
|
|
}
|
|
|
|
|
2015-04-27 10:55:53 +00:00
|
|
|
void DolphinMainWindow::openFiles(const QList<QUrl>& files, bool splitView)
|
2009-12-17 21:07:18 +00:00
|
|
|
{
|
2015-04-27 10:55:53 +00:00
|
|
|
m_tabWidget->openFiles(files, splitView);
|
2009-12-17 21:07:18 +00:00
|
|
|
}
|
|
|
|
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
void DolphinMainWindow::openFiles(const QStringList& files, bool splitView)
|
|
|
|
{
|
|
|
|
openFiles(QUrl::fromStringList(files), splitView);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::activateWindow()
|
|
|
|
{
|
2019-11-10 13:19:17 +00:00
|
|
|
window()->setAttribute(Qt::WA_NativeWindow, true);
|
|
|
|
KStartupInfo::setNewStartupId(window()->windowHandle(), KStartupInfo::startupId());
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
KWindowSystem::activateWindow(window()->effectiveWinId());
|
|
|
|
}
|
|
|
|
|
2008-10-01 21:39:35 +00:00
|
|
|
void DolphinMainWindow::showCommand(CommandType command)
|
2007-06-12 21:45:22 +00:00
|
|
|
{
|
2008-10-01 21:39:35 +00:00
|
|
|
DolphinStatusBar* statusBar = m_activeViewContainer->statusBar();
|
|
|
|
switch (command) {
|
|
|
|
case KIO::FileUndoManager::Copy:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Successfully copied."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
case KIO::FileUndoManager::Move:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Successfully moved."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
case KIO::FileUndoManager::Link:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Successfully linked."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
case KIO::FileUndoManager::Trash:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Successfully moved to trash."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
case KIO::FileUndoManager::Rename:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Successfully renamed."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case KIO::FileUndoManager::Mkdir:
|
2012-04-12 21:57:51 +00:00
|
|
|
statusBar->setText(i18nc("@info:status", "Created folder."));
|
2008-10-01 21:39:35 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2007-06-12 21:45:22 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2008-03-29 14:54:56 +00:00
|
|
|
void DolphinMainWindow::pasteIntoFolder()
|
|
|
|
{
|
|
|
|
m_activeViewContainer->view()->pasteIntoFolder();
|
|
|
|
}
|
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
void DolphinMainWindow::changeUrl(const QUrl &url)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2008-10-07 22:05:55 +00:00
|
|
|
if (!KProtocolManager::supportsListing(url)) {
|
2008-10-07 20:29:18 +00:00
|
|
|
// The URL navigator only checks for validity, not
|
|
|
|
// if the URL can be listed. An error message is
|
|
|
|
// shown due to DolphinViewContainer::restoreView().
|
|
|
|
return;
|
|
|
|
}
|
2008-12-12 06:55:26 +00:00
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
m_activeViewContainer->setUrl(url);
|
2019-09-01 21:01:57 +00:00
|
|
|
updateFileAndEditActions();
|
2014-08-10 16:52:06 +00:00
|
|
|
updatePasteAction();
|
|
|
|
updateViewActions();
|
|
|
|
updateGoActions();
|
|
|
|
|
|
|
|
emit urlChanged(url);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
void DolphinMainWindow::slotTerminalDirectoryChanged(const QUrl& url)
|
2012-04-26 06:31:46 +00:00
|
|
|
{
|
2017-10-12 21:17:51 +00:00
|
|
|
if (m_tearDownFromPlacesRequested && url == QUrl::fromLocalFile(QDir::homePath())) {
|
|
|
|
m_placesPanel->proceedWithTearDown();
|
|
|
|
m_tearDownFromPlacesRequested = false;
|
|
|
|
}
|
|
|
|
|
2012-04-26 06:31:46 +00:00
|
|
|
m_activeViewContainer->setAutoGrabFocus(false);
|
|
|
|
changeUrl(url);
|
|
|
|
m_activeViewContainer->setAutoGrabFocus(true);
|
|
|
|
}
|
|
|
|
|
2008-02-07 07:27:06 +00:00
|
|
|
void DolphinMainWindow::slotEditableStateChanged(bool editable)
|
|
|
|
{
|
|
|
|
KToggleAction* editableLocationAction =
|
2016-03-16 21:17:37 +00:00
|
|
|
static_cast<KToggleAction*>(actionCollection()->action(QStringLiteral("editable_location")));
|
2008-02-07 07:27:06 +00:00
|
|
|
editableLocationAction->setChecked(editable);
|
|
|
|
}
|
|
|
|
|
2007-10-02 19:03:03 +00:00
|
|
|
void DolphinMainWindow::slotSelectionChanged(const KFileItemList& selection)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2019-09-01 21:01:57 +00:00
|
|
|
updateFileAndEditActions();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
const int selectedUrlsCount = m_tabWidget->currentTabPage()->selectedItemsCount();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* compareFilesAction = actionCollection()->action(QStringLiteral("compare_files"));
|
2007-12-18 15:08:59 +00:00
|
|
|
if (selectedUrlsCount == 2) {
|
2008-06-28 18:42:51 +00:00
|
|
|
compareFilesAction->setEnabled(isKompareInstalled());
|
2007-12-18 15:08:59 +00:00
|
|
|
} else {
|
|
|
|
compareFilesAction->setEnabled(false);
|
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
emit selectionChanged(selection);
|
|
|
|
}
|
|
|
|
|
2008-02-23 15:48:56 +00:00
|
|
|
void DolphinMainWindow::updateHistory()
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2008-02-23 15:48:56 +00:00
|
|
|
const KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
const int index = urlNavigator->historyIndex();
|
|
|
|
|
2018-03-10 19:50:29 +00:00
|
|
|
QAction* backAction = actionCollection()->action(KStandardAction::name(KStandardAction::Back));
|
2011-02-09 18:21:58 +00:00
|
|
|
if (backAction) {
|
2011-10-09 09:12:22 +00:00
|
|
|
backAction->setToolTip(i18nc("@info", "Go back"));
|
2019-06-23 19:19:49 +00:00
|
|
|
backAction->setWhatsThis(i18nc("@info:whatsthis go back", "Return to the previously viewed folder."));
|
2008-02-23 15:48:56 +00:00
|
|
|
backAction->setEnabled(index < urlNavigator->historySize() - 1);
|
|
|
|
}
|
|
|
|
|
2018-03-10 19:50:29 +00:00
|
|
|
QAction* forwardAction = actionCollection()->action(KStandardAction::name(KStandardAction::Forward));
|
2011-02-09 18:21:58 +00:00
|
|
|
if (forwardAction) {
|
2011-10-09 09:12:22 +00:00
|
|
|
forwardAction->setToolTip(i18nc("@info", "Go forward"));
|
2019-06-23 19:19:49 +00:00
|
|
|
forwardAction->setWhatsThis(xi18nc("@info:whatsthis go forward",
|
|
|
|
"This undoes a <interface>Go|Back</interface> action."));
|
2008-02-23 15:48:56 +00:00
|
|
|
forwardAction->setEnabled(index > 0);
|
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateFilterBarAction(bool show)
|
|
|
|
{
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
|
2007-04-01 18:36:23 +00:00
|
|
|
showFilterBarAction->setChecked(show);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openNewMainWindow()
|
|
|
|
{
|
2017-03-27 22:52:29 +00:00
|
|
|
Dolphin::openNewWindow({m_activeViewContainer->url()}, this);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
void DolphinMainWindow::openNewActivatedTab()
|
2008-04-12 15:09:46 +00:00
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->openNewActivatedTab();
|
2008-04-12 15:09:46 +00:00
|
|
|
}
|
|
|
|
|
2019-09-01 21:01:57 +00:00
|
|
|
void DolphinMainWindow::addToPlaces()
|
|
|
|
{
|
|
|
|
QUrl url;
|
|
|
|
QString name;
|
|
|
|
|
|
|
|
// If nothing is selected, act on the current dir
|
2019-09-14 07:40:09 +00:00
|
|
|
if (m_activeViewContainer->view()->selectedItems().isEmpty()) {
|
2019-09-01 21:01:57 +00:00
|
|
|
url = m_activeViewContainer->url();
|
|
|
|
name = m_activeViewContainer->placesText();
|
|
|
|
} else {
|
|
|
|
const auto dirToAdd = m_activeViewContainer->view()->selectedItems().first();
|
|
|
|
url = dirToAdd.url();
|
|
|
|
name = dirToAdd.name();
|
|
|
|
}
|
|
|
|
if (url.isValid()) {
|
|
|
|
PlacesItemModel model;
|
|
|
|
QString icon;
|
|
|
|
if (m_activeViewContainer->isSearchModeEnabled()) {
|
|
|
|
icon = QStringLiteral("folder-saved-search-symbolic");
|
|
|
|
} else {
|
|
|
|
icon = KIO::iconNameForUrl(url);
|
|
|
|
}
|
|
|
|
model.createPlacesItem(name, url, icon);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-02-21 14:45:27 +00:00
|
|
|
void DolphinMainWindow::openNewTab(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement)
|
2008-04-12 16:12:57 +00:00
|
|
|
{
|
2019-02-21 14:45:27 +00:00
|
|
|
m_tabWidget->openNewTab(url, QUrl(), tabPlacement);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openNewTabAfterCurrentTab(const QUrl& url)
|
|
|
|
{
|
|
|
|
m_tabWidget->openNewTab(url, QUrl(), DolphinTabWidget::AfterCurrentTab);
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openNewTabAfterLastTab(const QUrl& url)
|
|
|
|
{
|
|
|
|
m_tabWidget->openNewTab(url, QUrl(), DolphinTabWidget::AfterLastTab);
|
2008-04-12 16:12:57 +00:00
|
|
|
}
|
|
|
|
|
2008-10-25 10:32:55 +00:00
|
|
|
void DolphinMainWindow::openInNewTab()
|
|
|
|
{
|
2013-05-22 19:47:14 +00:00
|
|
|
const KFileItemList& list = m_activeViewContainer->view()->selectedItems();
|
2017-06-11 17:26:52 +00:00
|
|
|
bool tabCreated = false;
|
|
|
|
|
|
|
|
foreach (const KFileItem& item, list) {
|
|
|
|
const QUrl& url = DolphinView::openItemAsFolderUrl(item);
|
|
|
|
if (!url.isEmpty()) {
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(url);
|
2017-06-11 17:26:52 +00:00
|
|
|
tabCreated = true;
|
2013-05-22 19:47:14 +00:00
|
|
|
}
|
2008-10-25 10:32:55 +00:00
|
|
|
}
|
2017-06-11 17:26:52 +00:00
|
|
|
|
|
|
|
// if no new tab has been created from the selection
|
|
|
|
// open the current directory in a new tab
|
|
|
|
if (!tabCreated) {
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(m_activeViewContainer->url());
|
2017-06-11 17:26:52 +00:00
|
|
|
}
|
2008-10-25 10:32:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openInNewWindow()
|
|
|
|
{
|
2014-10-21 19:18:43 +00:00
|
|
|
QUrl newWindowUrl;
|
2010-10-06 15:04:37 +00:00
|
|
|
|
2008-10-25 10:32:55 +00:00
|
|
|
const KFileItemList list = m_activeViewContainer->view()->selectedItems();
|
2010-10-06 15:04:37 +00:00
|
|
|
if (list.isEmpty()) {
|
|
|
|
newWindowUrl = m_activeViewContainer->url();
|
2013-05-28 15:31:14 +00:00
|
|
|
} else if (list.count() == 1) {
|
|
|
|
const KFileItem& item = list.first();
|
|
|
|
newWindowUrl = DolphinView::openItemAsFolderUrl(item);
|
2010-10-06 15:04:37 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (!newWindowUrl.isEmpty()) {
|
2017-03-08 15:52:15 +00:00
|
|
|
Dolphin::openNewWindow({newWindowUrl}, this);
|
2008-10-25 10:32:55 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-18 10:55:24 +00:00
|
|
|
void DolphinMainWindow::showTarget()
|
|
|
|
{
|
|
|
|
const auto link = m_activeViewContainer->view()->selectedItems().at(0);
|
|
|
|
const auto linkLocationDir = QFileInfo(link.localPath()).absoluteDir();
|
|
|
|
auto linkDestination = link.linkDest();
|
|
|
|
if (QFileInfo(linkDestination).isRelative()) {
|
|
|
|
linkDestination = linkLocationDir.filePath(linkDestination);
|
|
|
|
}
|
|
|
|
if (QFileInfo::exists(linkDestination)) {
|
|
|
|
KIO::highlightInFileManager({QUrl::fromLocalFile(linkDestination).adjusted(QUrl::StripTrailingSlash)});
|
|
|
|
} else {
|
|
|
|
m_activeViewContainer->showMessage(xi18nc("@info", "Could not access <filename>%1</filename>.", linkDestination),
|
|
|
|
DolphinViewContainer::Warning);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2010-01-11 09:21:16 +00:00
|
|
|
void DolphinMainWindow::showEvent(QShowEvent* event)
|
|
|
|
{
|
|
|
|
KXmlGuiWindow::showEvent(event);
|
2014-07-08 17:16:17 +00:00
|
|
|
|
2010-01-11 09:21:16 +00:00
|
|
|
if (!event->spontaneous()) {
|
|
|
|
m_activeViewContainer->view()->setFocus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::closeEvent(QCloseEvent* event)
|
|
|
|
{
|
2009-08-13 18:54:16 +00:00
|
|
|
// Find out if Dolphin is closed directly by the user or
|
|
|
|
// by the session manager because the session is closed
|
|
|
|
bool closedByUser = true;
|
2016-01-28 20:03:14 +00:00
|
|
|
if (qApp->isSavingSession()) {
|
2009-08-13 18:54:16 +00:00
|
|
|
closedByUser = false;
|
|
|
|
}
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
if (m_tabWidget->count() > 1 && GeneralSettings::confirmClosingMultipleTabs() && closedByUser) {
|
2009-03-12 22:40:32 +00:00
|
|
|
// Ask the user if he really wants to quit and close all tabs.
|
|
|
|
// Open a confirmation dialog with 3 buttons:
|
2015-02-03 08:25:33 +00:00
|
|
|
// QDialogButtonBox::Yes -> Quit
|
|
|
|
// QDialogButtonBox::No -> Close only the current tab
|
|
|
|
// QDialogButtonBox::Cancel -> do nothing
|
2014-04-06 01:32:55 +00:00
|
|
|
QDialog *dialog = new QDialog(this, Qt::Dialog);
|
|
|
|
dialog->setWindowTitle(i18nc("@title:window", "Confirmation"));
|
2009-03-12 22:40:32 +00:00
|
|
|
dialog->setModal(true);
|
2014-04-06 01:32:55 +00:00
|
|
|
QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Yes | QDialogButtonBox::No | QDialogButtonBox::Cancel);
|
2018-04-29 15:13:18 +00:00
|
|
|
KGuiItem::assign(buttons->button(QDialogButtonBox::Yes), KGuiItem(i18nc("@action:button 'Quit Dolphin' button", "&Quit %1", QGuiApplication::applicationDisplayName()), QIcon::fromTheme(QStringLiteral("application-exit"))));
|
2016-03-16 21:17:37 +00:00
|
|
|
KGuiItem::assign(buttons->button(QDialogButtonBox::No), KGuiItem(i18n("C&lose Current Tab"), QIcon::fromTheme(QStringLiteral("tab-close"))));
|
2014-04-06 01:32:55 +00:00
|
|
|
KGuiItem::assign(buttons->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
|
|
|
|
buttons->button(QDialogButtonBox::Yes)->setDefault(true);
|
2009-03-12 22:40:32 +00:00
|
|
|
|
|
|
|
bool doNotAskAgainCheckboxResult = false;
|
|
|
|
|
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program
Summary:
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program.
FEATURE: 304816
FIXED-IN: 19.04.0
Test Plan:
# Open terminal panel
# Run `watch ls`
# Close Dolphin
# Observe confirmation
# Disable confirmation
# Repeat, observe no confirmation
# Enable confirmation in the settings
# Repeat, observe a confirmation
Reviewers: #dolphin, markg, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio
Subscribers: kfm-devel, elvisangelaccio, markg, ngraham, rkflx, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10960
2019-01-19 15:11:26 +00:00
|
|
|
const auto result = KMessageBox::createKMessageBox(dialog,
|
2014-04-06 01:32:55 +00:00
|
|
|
buttons,
|
2009-03-12 22:40:32 +00:00
|
|
|
QMessageBox::Warning,
|
|
|
|
i18n("You have multiple tabs open in this window, are you sure you want to quit?"),
|
|
|
|
QStringList(),
|
|
|
|
i18n("Do not ask again"),
|
|
|
|
&doNotAskAgainCheckboxResult,
|
|
|
|
KMessageBox::Notify);
|
|
|
|
|
|
|
|
if (doNotAskAgainCheckboxResult) {
|
2011-11-06 10:58:48 +00:00
|
|
|
GeneralSettings::setConfirmClosingMultipleTabs(false);
|
2009-03-12 22:40:32 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
switch (result) {
|
2014-06-04 19:56:36 +00:00
|
|
|
case QDialogButtonBox::Yes:
|
2009-03-12 22:40:32 +00:00
|
|
|
// Quit
|
|
|
|
break;
|
2014-06-04 19:56:36 +00:00
|
|
|
case QDialogButtonBox::No:
|
2009-03-12 22:40:32 +00:00
|
|
|
// Close only the current tab
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->closeTab();
|
2018-03-08 09:21:13 +00:00
|
|
|
Q_FALLTHROUGH();
|
2009-03-12 22:40:32 +00:00
|
|
|
default:
|
|
|
|
event->ignore();
|
|
|
|
return;
|
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program
Summary:
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program.
FEATURE: 304816
FIXED-IN: 19.04.0
Test Plan:
# Open terminal panel
# Run `watch ls`
# Close Dolphin
# Observe confirmation
# Disable confirmation
# Repeat, observe no confirmation
# Enable confirmation in the settings
# Repeat, observe a confirmation
Reviewers: #dolphin, markg, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio
Subscribers: kfm-devel, elvisangelaccio, markg, ngraham, rkflx, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10960
2019-01-19 15:11:26 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-10-01 09:23:12 +00:00
|
|
|
if (m_terminalPanel && m_terminalPanel->hasProgramRunning() && GeneralSettings::confirmClosingTerminalRunningProgram() && closedByUser) {
|
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program
Summary:
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program.
FEATURE: 304816
FIXED-IN: 19.04.0
Test Plan:
# Open terminal panel
# Run `watch ls`
# Close Dolphin
# Observe confirmation
# Disable confirmation
# Repeat, observe no confirmation
# Enable confirmation in the settings
# Repeat, observe a confirmation
Reviewers: #dolphin, markg, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio
Subscribers: kfm-devel, elvisangelaccio, markg, ngraham, rkflx, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10960
2019-01-19 15:11:26 +00:00
|
|
|
// Ask if the user really wants to quit Dolphin with a program that is still running in the Terminal panel
|
|
|
|
// Open a confirmation dialog with 3 buttons:
|
|
|
|
// QDialogButtonBox::Yes -> Quit
|
|
|
|
// QDialogButtonBox::No -> Show Terminal Panel
|
|
|
|
// QDialogButtonBox::Cancel -> do nothing
|
|
|
|
QDialog *dialog = new QDialog(this, Qt::Dialog);
|
|
|
|
dialog->setWindowTitle(i18nc("@title:window", "Confirmation"));
|
|
|
|
dialog->setModal(true);
|
|
|
|
auto standardButtons = QDialogButtonBox::Yes | QDialogButtonBox::Cancel;
|
|
|
|
if (!m_terminalPanel->isVisible()) {
|
|
|
|
standardButtons |= QDialogButtonBox::No;
|
|
|
|
}
|
|
|
|
QDialogButtonBox *buttons = new QDialogButtonBox(standardButtons);
|
|
|
|
KGuiItem::assign(buttons->button(QDialogButtonBox::Yes), KStandardGuiItem::quit());
|
|
|
|
if (!m_terminalPanel->isVisible()) {
|
|
|
|
KGuiItem::assign(
|
|
|
|
buttons->button(QDialogButtonBox::No),
|
2019-09-05 15:30:06 +00:00
|
|
|
KGuiItem(i18n("Show &Terminal Panel"), QIcon::fromTheme(QStringLiteral("dialog-scripts"))));
|
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program
Summary:
Ask for confirmation when Closing Dolphin windows with a terminal panel running a program.
FEATURE: 304816
FIXED-IN: 19.04.0
Test Plan:
# Open terminal panel
# Run `watch ls`
# Close Dolphin
# Observe confirmation
# Disable confirmation
# Repeat, observe no confirmation
# Enable confirmation in the settings
# Repeat, observe a confirmation
Reviewers: #dolphin, markg, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio
Subscribers: kfm-devel, elvisangelaccio, markg, ngraham, rkflx, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10960
2019-01-19 15:11:26 +00:00
|
|
|
}
|
|
|
|
KGuiItem::assign(buttons->button(QDialogButtonBox::Cancel), KStandardGuiItem::cancel());
|
|
|
|
|
|
|
|
bool doNotAskAgainCheckboxResult = false;
|
|
|
|
|
|
|
|
const auto result = KMessageBox::createKMessageBox(
|
|
|
|
dialog,
|
|
|
|
buttons,
|
|
|
|
QMessageBox::Warning,
|
|
|
|
i18n("The program '%1' is still running in the Terminal panel. Are you sure you want to quit?", m_terminalPanel->runningProgramName()),
|
|
|
|
QStringList(),
|
|
|
|
i18n("Do not ask again"),
|
|
|
|
&doNotAskAgainCheckboxResult,
|
|
|
|
KMessageBox::Dangerous);
|
|
|
|
|
|
|
|
if (doNotAskAgainCheckboxResult) {
|
|
|
|
GeneralSettings::setConfirmClosingTerminalRunningProgram(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (result) {
|
|
|
|
case QDialogButtonBox::Yes:
|
|
|
|
// Quit
|
|
|
|
break;
|
|
|
|
case QDialogButtonBox::No:
|
|
|
|
actionCollection()->action("show_terminal_panel")->trigger();
|
|
|
|
// Do not quit, ignore quit event
|
|
|
|
Q_FALLTHROUGH();
|
|
|
|
default:
|
|
|
|
event->ignore();
|
|
|
|
return;
|
2009-03-12 22:40:32 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Add an option to show tabs from last time when Dolphin starts
Summary:
All modern web browsers offer a function to show tabs from last time when a browser starts, and many apps today
restore their prior state when they're launched. This patch implements thatfunctionality as an option and turns it on by default.
The settings window is accordingly adjusted to be clear about what applies when:
{F7681752}
FEATURE: 413564
FIXED-IN: 20.08.0
Depends on D25106
Depends on D25219
Test Plan:
With the new setting turned off:
- No behavioral changes at all
With the new setting turned on:
- When launched from the GUI or CLI without any URLs, dolphin restores session
- When rebooting with Dolphin open, it restores session normally after the system comes back (i.e. no behavioral change here)
- When launched with URLs, Dolphin window is opened showing those URLs instead of restoring session
- When Dolphin is already running and a new window is opened, that new window shows a single tab with the same URL as was visible in the previously-open Dolphin instance (i.e. no behavioral change here)
- "Open Containing folder" functionality in other apps works regardless of whether or not Dolphin is running
Reviewers: #dolphin, #vdg, feverfew, meven, elvisangelaccio, ndavis
Reviewed By: #dolphin, #vdg, feverfew, elvisangelaccio, ndavis
Subscribers: davidedmundson, ndavis, intika, feverfew, kfm-devel, ngraham, broulik, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D11382
2019-07-19 17:52:12 +00:00
|
|
|
if (GeneralSettings::rememberOpenedTabs()) {
|
|
|
|
KConfigGui::setSessionConfig(QStringLiteral("dolphin"), QStringLiteral("dolphin"));
|
|
|
|
KConfig *config = KConfigGui::sessionConfig();
|
|
|
|
saveGlobalProperties(config);
|
|
|
|
savePropertiesInternal(config, 1);
|
|
|
|
config->sync();
|
|
|
|
}
|
|
|
|
|
2011-11-06 10:58:48 +00:00
|
|
|
GeneralSettings::setVersion(CurrentDolphinVersion);
|
2014-10-07 05:38:16 +00:00
|
|
|
GeneralSettings::self()->save();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2007-04-16 20:44:36 +00:00
|
|
|
KXmlGuiWindow::closeEvent(event);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2007-11-30 18:42:17 +00:00
|
|
|
void DolphinMainWindow::saveProperties(KConfigGroup& group)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->saveProperties(group);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2007-11-30 18:42:17 +00:00
|
|
|
void DolphinMainWindow::readProperties(const KConfigGroup& group)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->readProperties(group);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateNewMenu()
|
|
|
|
{
|
2011-07-30 18:13:09 +00:00
|
|
|
m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->hiddenFilesShown());
|
2010-08-27 05:26:27 +00:00
|
|
|
m_newFileMenu->checkUpToDate();
|
2019-12-06 12:31:43 +00:00
|
|
|
m_newFileMenu->setPopupFiles(QList<QUrl>() << activeViewContainer()->url());
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2009-03-26 18:44:36 +00:00
|
|
|
void DolphinMainWindow::createDirectory()
|
|
|
|
{
|
2011-07-30 18:13:09 +00:00
|
|
|
m_newFileMenu->setViewShowsHiddenFiles(activeViewContainer()->view()->hiddenFilesShown());
|
2019-12-06 12:31:43 +00:00
|
|
|
m_newFileMenu->setPopupFiles(QList<QUrl>() << activeViewContainer()->url());
|
2010-08-27 05:26:27 +00:00
|
|
|
m_newFileMenu->createDirectory();
|
2009-03-26 18:44:36 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::quit()
|
|
|
|
{
|
|
|
|
close();
|
|
|
|
}
|
|
|
|
|
2008-11-08 16:22:30 +00:00
|
|
|
void DolphinMainWindow::showErrorMessage(const QString& message)
|
2007-06-15 00:52:25 +00:00
|
|
|
{
|
2012-04-12 21:57:51 +00:00
|
|
|
m_activeViewContainer->showMessage(message, DolphinViewContainer::Error);
|
2007-06-15 00:52:25 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::slotUndoAvailable(bool available)
|
|
|
|
{
|
2008-01-27 14:54:38 +00:00
|
|
|
QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
|
2011-02-09 18:21:58 +00:00
|
|
|
if (undoAction) {
|
2007-04-01 18:36:23 +00:00
|
|
|
undoAction->setEnabled(available);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotUndoTextChanged(const QString& text)
|
|
|
|
{
|
2008-01-27 14:54:38 +00:00
|
|
|
QAction* undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
|
2011-02-09 18:21:58 +00:00
|
|
|
if (undoAction) {
|
2007-04-01 18:36:23 +00:00
|
|
|
undoAction->setText(text);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::undo()
|
|
|
|
{
|
|
|
|
clearStatusBar();
|
2008-04-30 23:32:33 +00:00
|
|
|
KIO::FileUndoManager::self()->uiInterface()->setParentWidget(this);
|
|
|
|
KIO::FileUndoManager::self()->undo();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::cut()
|
|
|
|
{
|
2020-05-11 20:53:08 +00:00
|
|
|
m_activeViewContainer->view()->cutSelectedItemsToClipboard();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::copy()
|
|
|
|
{
|
2020-05-11 17:31:29 +00:00
|
|
|
m_activeViewContainer->view()->copySelectedItemsToClipboard();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::paste()
|
|
|
|
{
|
2007-11-15 20:04:05 +00:00
|
|
|
m_activeViewContainer->view()->paste();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2010-07-24 16:37:07 +00:00
|
|
|
void DolphinMainWindow::find()
|
|
|
|
{
|
|
|
|
m_activeViewContainer->setSearchModeEnabled(true);
|
|
|
|
}
|
|
|
|
|
[dolphin] Add an action to toggle the searchbar
Summary:
Make search action toggle the searchbar instead of just launching it.
The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.
BEFORE:
{F7256652}
AFTER:
{F7256862}
BUG: 344617
FIXED-IN: 19.12.0
Closes T8473
Depends on D23075
Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.
Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio
Reviewed By: ngraham, #vdg
Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8473
Differential Revision: https://phabricator.kde.org/D23232
2019-09-01 19:59:43 +00:00
|
|
|
void DolphinMainWindow::updateSearchAction()
|
|
|
|
{
|
|
|
|
QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
|
|
|
|
toggleSearchAction->setChecked(m_activeViewContainer->isSearchModeEnabled());
|
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::updatePasteAction()
|
|
|
|
{
|
2008-01-27 14:54:38 +00:00
|
|
|
QAction* pasteAction = actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
|
2007-11-15 20:04:05 +00:00
|
|
|
QPair<bool, QString> pasteInfo = m_activeViewContainer->view()->pasteInfo();
|
|
|
|
pasteAction->setEnabled(pasteInfo.first);
|
|
|
|
pasteAction->setText(pasteInfo.second);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2014-11-02 14:34:30 +00:00
|
|
|
void DolphinMainWindow::slotDirectoryLoadingCompleted()
|
|
|
|
{
|
|
|
|
updatePasteAction();
|
|
|
|
}
|
|
|
|
|
2017-08-24 13:45:28 +00:00
|
|
|
void DolphinMainWindow::slotToolBarActionMiddleClicked(QAction *action)
|
|
|
|
{
|
2018-03-10 19:50:29 +00:00
|
|
|
if (action == actionCollection()->action(KStandardAction::name(KStandardAction::Back))) {
|
2017-08-24 13:45:28 +00:00
|
|
|
goBackInNewTab();
|
2018-03-10 19:50:29 +00:00
|
|
|
} else if (action == actionCollection()->action(KStandardAction::name(KStandardAction::Forward))) {
|
2017-08-24 13:45:28 +00:00
|
|
|
goForwardInNewTab();
|
|
|
|
} else if (action == actionCollection()->action(QStringLiteral("go_up"))) {
|
|
|
|
goUpInNewTab();
|
|
|
|
} else if (action == actionCollection()->action(QStringLiteral("go_home"))) {
|
|
|
|
goHomeInNewTab();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
void DolphinMainWindow::slotAboutToShowBackPopupMenu()
|
|
|
|
{
|
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
int entries = 0;
|
|
|
|
m_backAction->menu()->clear();
|
|
|
|
for (int i = urlNavigator->historyIndex() + 1; i < urlNavigator->historySize() && entries < MaxNumberOfNavigationentries; ++i, ++entries) {
|
|
|
|
QAction* action = new QAction(urlNavigator->locationUrl(i).toString(QUrl::PreferLocalFile), m_backAction->menu());
|
|
|
|
action->setData(i);
|
|
|
|
m_backAction->menu()->addAction(action);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotGoBack(QAction* action)
|
|
|
|
{
|
|
|
|
int gotoIndex = action->data().value<int>();
|
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
for (int i = gotoIndex - urlNavigator->historyIndex(); i > 0; --i) {
|
|
|
|
goBack();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotBackForwardActionMiddleClicked(QAction* action)
|
|
|
|
{
|
|
|
|
if (action) {
|
|
|
|
KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator();
|
|
|
|
openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value<int>()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotAboutToShowForwardPopupMenu()
|
|
|
|
{
|
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
int entries = 0;
|
|
|
|
m_forwardAction->menu()->clear();
|
|
|
|
for (int i = urlNavigator->historyIndex() - 1; i >= 0 && entries < MaxNumberOfNavigationentries; --i, ++entries) {
|
|
|
|
QAction* action = new QAction(urlNavigator->locationUrl(i).toString(QUrl::PreferLocalFile), m_forwardAction->menu());
|
|
|
|
action->setData(i);
|
|
|
|
m_forwardAction->menu()->addAction(action);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotGoForward(QAction* action)
|
|
|
|
{
|
|
|
|
int gotoIndex = action->data().value<int>();
|
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
for (int i = urlNavigator->historyIndex() - gotoIndex; i > 0; --i) {
|
|
|
|
goForward();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::selectAll()
|
|
|
|
{
|
|
|
|
clearStatusBar();
|
2007-12-16 19:25:59 +00:00
|
|
|
|
|
|
|
// if the URL navigator is editable and focused, select the whole
|
|
|
|
// URL instead of all items of the view
|
|
|
|
|
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
2018-12-16 12:57:51 +00:00
|
|
|
QLineEdit* lineEdit = urlNavigator->editor()->lineEdit();
|
2007-12-16 19:25:59 +00:00
|
|
|
const bool selectUrl = urlNavigator->isUrlEditable() &&
|
|
|
|
lineEdit->hasFocus();
|
|
|
|
if (selectUrl) {
|
|
|
|
lineEdit->selectAll();
|
|
|
|
} else {
|
|
|
|
m_activeViewContainer->view()->selectAll();
|
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::invertSelection()
|
|
|
|
{
|
|
|
|
clearStatusBar();
|
2007-06-07 21:10:48 +00:00
|
|
|
m_activeViewContainer->view()->invertSelection();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::toggleSplitView()
|
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
|
2014-07-02 13:30:37 +00:00
|
|
|
tabPage->setSplitViewEnabled(!tabPage->splitViewEnabled());
|
2008-05-04 18:40:06 +00:00
|
|
|
|
2007-06-07 21:41:22 +00:00
|
|
|
updateViewActions();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2016-09-26 16:55:42 +00:00
|
|
|
void DolphinMainWindow::toggleSplitStash()
|
|
|
|
{
|
|
|
|
DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
|
2017-02-02 16:16:54 +00:00
|
|
|
tabPage->setSplitViewEnabled(false);
|
|
|
|
tabPage->setSplitViewEnabled(true, QUrl("stash:/"));
|
2016-09-26 16:55:42 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::reloadView()
|
|
|
|
{
|
|
|
|
clearStatusBar();
|
2016-10-04 15:30:51 +00:00
|
|
|
m_activeViewContainer->reload();
|
2018-09-19 08:20:14 +00:00
|
|
|
m_activeViewContainer->statusBar()->updateSpaceInfo();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::stopLoading()
|
2007-06-12 21:45:22 +00:00
|
|
|
{
|
2010-09-22 19:39:46 +00:00
|
|
|
m_activeViewContainer->view()->stopLoading();
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::enableStopAction()
|
|
|
|
{
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->action(QStringLiteral("stop"))->setEnabled(true);
|
2010-09-22 19:39:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::disableStopAction()
|
|
|
|
{
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->action(QStringLiteral("stop"))->setEnabled(false);
|
2007-06-12 21:45:22 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2017-03-11 17:33:41 +00:00
|
|
|
void DolphinMainWindow::showFilterBar()
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2017-03-11 17:33:41 +00:00
|
|
|
m_activeViewContainer->setFilterBarVisible(true);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::toggleEditLocation()
|
|
|
|
{
|
|
|
|
clearStatusBar();
|
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* action = actionCollection()->action(QStringLiteral("editable_location"));
|
2007-06-07 21:10:48 +00:00
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
2008-01-28 11:37:08 +00:00
|
|
|
urlNavigator->setUrlEditable(action->isChecked());
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2008-10-25 09:41:39 +00:00
|
|
|
void DolphinMainWindow::replaceLocation()
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2007-11-04 18:50:22 +00:00
|
|
|
KUrlNavigator* navigator = m_activeViewContainer->urlNavigator();
|
2018-12-16 12:57:51 +00:00
|
|
|
QLineEdit* lineEdit = navigator->editor()->lineEdit();
|
Return editable URL navigator to breadcrumb mode if it has focus and everything is selected and when Ctrl+L is pressed
Summary:
This patch makes an editable location bar return to breadcrumb mode when {key Ctrl L} is pressed, but only if the location bar currently has focus and everything is selected. Otherwise, it will simply return focus to it as before.
This provides a slightly easier way to make the location bar return to breadcrumbs mode
Test Plan:
- Compile and deploy and make the location bar be breadcrumbs
- Hit {key Ctrl L} twice in a row -> location field turns to being in breadcrumb mode. Focus is correctly returned to the main view.
- Hit {key Ctrl L}, move focus elsewhere, then hit {key Ctrl L} again -> Location bar is editable and focused with everything selected.
- Hit {key Ctrl L}, deselect some of the text, then hit {key Ctrl L} again -> Location bar selects everything.
Reviewers: #dolphin, elvisangelaccio, dhaumann
Reviewed By: elvisangelaccio, dhaumann
Subscribers: elvisangelaccio, dhaumann, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16980
2018-12-16 20:49:57 +00:00
|
|
|
|
|
|
|
// If the text field currently has focus and everything is selected,
|
|
|
|
// pressing the keyboard shortcut returns the whole thing to breadcrumb mode
|
|
|
|
if (navigator->isUrlEditable()
|
|
|
|
&& lineEdit->hasFocus()
|
|
|
|
&& lineEdit->selectedText() == lineEdit->text() ) {
|
|
|
|
navigator->setUrlEditable(false);
|
|
|
|
} else {
|
|
|
|
navigator->setUrlEditable(true);
|
|
|
|
navigator->setFocus();
|
|
|
|
lineEdit->selectAll();
|
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2010-12-31 10:59:46 +00:00
|
|
|
void DolphinMainWindow::togglePanelLockState()
|
|
|
|
{
|
2011-11-06 10:58:48 +00:00
|
|
|
const bool newLockState = !GeneralSettings::lockPanels();
|
2010-12-31 10:59:46 +00:00
|
|
|
foreach (QObject* child, children()) {
|
|
|
|
DolphinDockWidget* dock = qobject_cast<DolphinDockWidget*>(child);
|
2011-02-09 18:21:58 +00:00
|
|
|
if (dock) {
|
2010-12-31 10:59:46 +00:00
|
|
|
dock->setLocked(newLockState);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-11-06 10:58:48 +00:00
|
|
|
GeneralSettings::setLockPanels(newLockState);
|
2010-12-31 10:59:46 +00:00
|
|
|
}
|
|
|
|
|
2018-01-18 17:49:54 +00:00
|
|
|
void DolphinMainWindow::slotTerminalPanelVisibilityChanged()
|
|
|
|
{
|
2019-08-11 11:11:37 +00:00
|
|
|
if (m_terminalPanel->isHiddenInVisibleWindow() && m_activeViewContainer) {
|
2018-01-18 17:49:54 +00:00
|
|
|
m_activeViewContainer->view()->setFocus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::goBack()
|
|
|
|
{
|
2010-07-08 19:46:56 +00:00
|
|
|
KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
urlNavigator->goBack();
|
2010-11-05 17:02:58 +00:00
|
|
|
|
2010-07-08 19:46:56 +00:00
|
|
|
if (urlNavigator->locationState().isEmpty()) {
|
|
|
|
// An empty location state indicates a redirection URL,
|
|
|
|
// which must be skipped too
|
2010-11-05 17:02:58 +00:00
|
|
|
urlNavigator->goBack();
|
2010-07-08 19:46:56 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::goForward()
|
|
|
|
{
|
2007-06-07 21:10:48 +00:00
|
|
|
m_activeViewContainer->urlNavigator()->goForward();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::goUp()
|
|
|
|
{
|
2007-06-07 21:10:48 +00:00
|
|
|
m_activeViewContainer->urlNavigator()->goUp();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2011-03-29 16:35:50 +00:00
|
|
|
void DolphinMainWindow::goHome()
|
|
|
|
{
|
|
|
|
m_activeViewContainer->urlNavigator()->goHome();
|
|
|
|
}
|
|
|
|
|
2017-08-24 13:45:28 +00:00
|
|
|
void DolphinMainWindow::goBackInNewTab()
|
2009-11-09 17:50:21 +00:00
|
|
|
{
|
2017-08-24 13:45:28 +00:00
|
|
|
KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator();
|
|
|
|
const int index = urlNavigator->historyIndex() + 1;
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
|
2009-11-09 17:50:21 +00:00
|
|
|
}
|
|
|
|
|
2017-08-24 13:45:28 +00:00
|
|
|
void DolphinMainWindow::goForwardInNewTab()
|
2009-11-09 17:50:21 +00:00
|
|
|
{
|
2017-08-24 13:45:28 +00:00
|
|
|
KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigator();
|
|
|
|
const int index = urlNavigator->historyIndex() - 1;
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
|
2009-11-09 17:50:21 +00:00
|
|
|
}
|
|
|
|
|
2017-08-24 13:45:28 +00:00
|
|
|
void DolphinMainWindow::goUpInNewTab()
|
2009-11-09 17:50:21 +00:00
|
|
|
{
|
2017-08-24 13:45:28 +00:00
|
|
|
const QUrl currentUrl = activeViewContainer()->urlNavigator()->locationUrl();
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(KIO::upUrl(currentUrl));
|
2009-11-09 17:50:21 +00:00
|
|
|
}
|
|
|
|
|
2017-08-24 13:45:28 +00:00
|
|
|
void DolphinMainWindow::goHomeInNewTab()
|
2012-01-09 05:54:57 +00:00
|
|
|
{
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterCurrentTab(Dolphin::homeUrl());
|
2012-01-09 05:54:57 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::compareFiles()
|
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
const KFileItemList items = m_tabWidget->currentTabPage()->selectedItems();
|
2013-10-13 08:55:21 +00:00
|
|
|
if (items.count() != 2) {
|
|
|
|
// The action is disabled in this case, but it could have been triggered
|
|
|
|
// via D-Bus, see https://bugs.kde.org/show_bug.cgi?id=325517
|
|
|
|
return;
|
2007-04-09 19:12:54 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
QUrl urlA = items.at(0).url();
|
|
|
|
QUrl urlB = items.at(1).url();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QString command(QStringLiteral("kompare -c \""));
|
2014-10-21 19:18:43 +00:00
|
|
|
command.append(urlA.toDisplayString(QUrl::PreferLocalFile));
|
2007-04-01 18:36:23 +00:00
|
|
|
command.append("\" \"");
|
2014-10-21 19:18:43 +00:00
|
|
|
command.append(urlB.toDisplayString(QUrl::PreferLocalFile));
|
2007-04-01 18:36:23 +00:00
|
|
|
command.append('\"');
|
2020-04-05 11:44:12 +00:00
|
|
|
|
|
|
|
KIO::CommandLauncherJob *job = new KIO::CommandLauncherJob(command, this);
|
|
|
|
job->setDesktopName(QStringLiteral("org.kde.kompare"));
|
|
|
|
job->start();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2007-11-18 14:37:57 +00:00
|
|
|
void DolphinMainWindow::toggleShowMenuBar()
|
|
|
|
{
|
|
|
|
const bool visible = menuBar()->isVisible();
|
|
|
|
menuBar()->setVisible(!visible);
|
2011-03-26 22:22:21 +00:00
|
|
|
if (visible) {
|
2012-04-07 22:09:11 +00:00
|
|
|
createControlButton();
|
2011-03-26 22:22:21 +00:00
|
|
|
} else {
|
2012-04-07 22:09:11 +00:00
|
|
|
deleteControlButton();
|
2011-03-26 22:22:21 +00:00
|
|
|
}
|
2007-11-18 14:37:57 +00:00
|
|
|
}
|
|
|
|
|
2019-11-17 17:14:27 +00:00
|
|
|
QString DolphinMainWindow::activeContainerLocalPath()
|
2009-03-10 06:59:27 +00:00
|
|
|
{
|
2015-02-26 16:40:06 +00:00
|
|
|
KIO::StatJob* statJob = KIO::mostLocalUrl(m_activeViewContainer->url());
|
|
|
|
KJobWidgets::setWindow(statJob, this);
|
|
|
|
statJob->exec();
|
|
|
|
QUrl url = statJob->mostLocalUrl();
|
2009-05-17 19:57:07 +00:00
|
|
|
if (url.isLocalFile()) {
|
2019-11-17 17:14:27 +00:00
|
|
|
return url.toLocalFile();
|
|
|
|
}
|
|
|
|
return QDir::homePath();
|
|
|
|
}
|
|
|
|
|
|
|
|
QPointer<QAction> DolphinMainWindow::preferredSearchTool()
|
|
|
|
{
|
|
|
|
m_searchTools.clear();
|
|
|
|
KMoreToolsMenuFactory("dolphin/search-tools").fillMenuFromGroupingNames(
|
2020-05-05 10:05:18 +00:00
|
|
|
&m_searchTools, { "files-find" }, m_activeViewContainer->url()
|
2019-11-17 17:14:27 +00:00
|
|
|
);
|
|
|
|
QList<QAction*> actions = m_searchTools.actions();
|
|
|
|
if (actions.isEmpty()) {
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
QAction* action = actions.first();
|
|
|
|
if (action->isSeparator()) {
|
|
|
|
return nullptr;
|
|
|
|
}
|
|
|
|
return action;
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateOpenPreferredSearchToolAction()
|
|
|
|
{
|
|
|
|
QAction* openPreferredSearchTool = actionCollection()->action(QStringLiteral("open_preferred_search_tool"));
|
|
|
|
if (!openPreferredSearchTool) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
QPointer<QAction> tool = preferredSearchTool();
|
|
|
|
if (tool) {
|
|
|
|
openPreferredSearchTool->setVisible(true);
|
|
|
|
openPreferredSearchTool->setText(i18nc("@action:inmenu Tools", "Open %1", tool->text()));
|
|
|
|
openPreferredSearchTool->setIcon(tool->icon());
|
|
|
|
} else {
|
|
|
|
openPreferredSearchTool->setVisible(false);
|
|
|
|
// still visible in Shortcuts configuration window
|
|
|
|
openPreferredSearchTool->setText(i18nc("@action:inmenu Tools", "Open Preferred Search Tool"));
|
|
|
|
openPreferredSearchTool->setIcon(QIcon::fromTheme(QStringLiteral("search")));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openPreferredSearchTool()
|
|
|
|
{
|
|
|
|
QPointer<QAction> tool = preferredSearchTool();
|
|
|
|
if (tool) {
|
|
|
|
tool->trigger();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::openTerminal()
|
|
|
|
{
|
|
|
|
KToolInvocation::invokeTerminal(QString(), activeContainerLocalPath());
|
2009-03-10 06:59:27 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::editSettings()
|
|
|
|
{
|
2011-02-09 18:21:58 +00:00
|
|
|
if (!m_settingsDialog) {
|
2012-01-30 15:36:40 +00:00
|
|
|
DolphinViewContainer* container = activeViewContainer();
|
|
|
|
container->view()->writeSettings();
|
2012-02-23 16:26:51 +00:00
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
const QUrl url = container->url();
|
2011-04-12 18:01:31 +00:00
|
|
|
DolphinSettingsDialog* settingsDialog = new DolphinSettingsDialog(url, this);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(settingsDialog, &DolphinSettingsDialog::settingsChanged, this, &DolphinMainWindow::refreshViews);
|
2011-04-12 18:01:31 +00:00
|
|
|
settingsDialog->setAttribute(Qt::WA_DeleteOnClose);
|
|
|
|
settingsDialog->show();
|
|
|
|
m_settingsDialog = settingsDialog;
|
2009-01-13 18:06:15 +00:00
|
|
|
} else {
|
2011-04-12 18:01:31 +00:00
|
|
|
m_settingsDialog.data()->raise();
|
2009-01-13 18:06:15 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
void DolphinMainWindow::handleUrl(const QUrl& url)
|
2010-01-25 07:58:24 +00:00
|
|
|
{
|
2010-03-15 09:55:51 +00:00
|
|
|
delete m_lastHandleUrlStatJob;
|
2017-11-21 09:52:14 +00:00
|
|
|
m_lastHandleUrlStatJob = nullptr;
|
2010-03-15 09:55:51 +00:00
|
|
|
|
|
|
|
if (url.isLocalFile() && QFileInfo(url.toLocalFile()).isDir()) {
|
|
|
|
activeViewContainer()->setUrl(url);
|
|
|
|
} else if (KProtocolManager::supportsListing(url)) {
|
|
|
|
// stat the URL to see if it is a dir or not
|
|
|
|
m_lastHandleUrlStatJob = KIO::stat(url, KIO::HideProgressInfo);
|
2017-01-18 22:45:39 +00:00
|
|
|
if (m_lastHandleUrlStatJob->uiDelegate()) {
|
2014-04-06 01:32:55 +00:00
|
|
|
KJobWidgets::setWindow(m_lastHandleUrlStatJob, this);
|
2012-04-17 20:19:18 +00:00
|
|
|
}
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(m_lastHandleUrlStatJob, &KIO::Job::result,
|
|
|
|
this, &DolphinMainWindow::slotHandleUrlStatFinished);
|
2010-03-15 09:55:51 +00:00
|
|
|
|
|
|
|
} else {
|
2012-04-17 16:13:31 +00:00
|
|
|
new KRun(url, this); // Automatically deletes itself after being finished
|
2010-03-15 09:55:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotHandleUrlStatFinished(KJob* job)
|
|
|
|
{
|
2017-11-21 09:52:14 +00:00
|
|
|
m_lastHandleUrlStatJob = nullptr;
|
2010-03-15 09:55:51 +00:00
|
|
|
const KIO::UDSEntry entry = static_cast<KIO::StatJob*>(job)->statResult();
|
2014-10-21 19:18:43 +00:00
|
|
|
const QUrl url = static_cast<KIO::StatJob*>(job)->url();
|
2010-10-27 18:31:39 +00:00
|
|
|
if (entry.isDir()) {
|
2010-01-25 07:58:24 +00:00
|
|
|
activeViewContainer()->setUrl(url);
|
|
|
|
} else {
|
2012-04-17 16:13:31 +00:00
|
|
|
new KRun(url, this); // Automatically deletes itself after being finished
|
2010-01-25 07:58:24 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable)
|
|
|
|
{
|
2018-10-07 11:19:17 +00:00
|
|
|
// trash:/ is writable but we don't want to create new items in it.
|
|
|
|
// TODO: remove the trash check once https://phabricator.kde.org/T8234 is implemented
|
|
|
|
newFileMenu()->setEnabled(isFolderWritable && m_activeViewContainer->url().scheme() != QLatin1String("trash"));
|
2010-01-25 07:58:24 +00:00
|
|
|
}
|
|
|
|
|
2011-10-08 19:40:34 +00:00
|
|
|
void DolphinMainWindow::openContextMenu(const QPoint& pos,
|
|
|
|
const KFileItem& item,
|
2014-10-21 19:18:43 +00:00
|
|
|
const QUrl& url,
|
2010-01-25 07:58:24 +00:00
|
|
|
const QList<QAction*>& customActions)
|
|
|
|
{
|
2015-01-29 12:45:14 +00:00
|
|
|
QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, pos, item, url);
|
2011-10-08 19:40:34 +00:00
|
|
|
contextMenu.data()->setCustomActions(customActions);
|
|
|
|
const DolphinContextMenu::Command command = contextMenu.data()->open();
|
2010-09-22 20:24:49 +00:00
|
|
|
|
|
|
|
switch (command) {
|
2014-09-09 13:31:55 +00:00
|
|
|
case DolphinContextMenu::OpenParentFolder:
|
|
|
|
changeUrl(KIO::upUrl(item.url()));
|
2018-03-26 00:06:46 +00:00
|
|
|
m_activeViewContainer->view()->markUrlsAsSelected({item.url()});
|
|
|
|
m_activeViewContainer->view()->markUrlAsCurrent(item.url());
|
2014-09-09 13:31:55 +00:00
|
|
|
break;
|
|
|
|
|
2017-03-08 15:52:15 +00:00
|
|
|
case DolphinContextMenu::OpenParentFolderInNewWindow:
|
2018-03-26 00:06:46 +00:00
|
|
|
Dolphin::openNewWindow({item.url()}, this, Dolphin::OpenNewWindowFlag::Select);
|
2010-09-22 20:24:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DolphinContextMenu::OpenParentFolderInNewTab:
|
2019-02-21 14:45:27 +00:00
|
|
|
openNewTabAfterLastTab(KIO::upUrl(item.url()));
|
2010-09-22 20:24:49 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case DolphinContextMenu::None:
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
2015-01-29 12:45:14 +00:00
|
|
|
|
|
|
|
// Delete the menu, unless it has been deleted in its own nested event loop already.
|
|
|
|
if (contextMenu) {
|
|
|
|
contextMenu->deleteLater();
|
|
|
|
}
|
2010-01-25 07:58:24 +00:00
|
|
|
}
|
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
void DolphinMainWindow::updateControlMenu()
|
2011-03-26 22:22:21 +00:00
|
|
|
{
|
2014-10-10 21:36:36 +00:00
|
|
|
QMenu* menu = qobject_cast<QMenu*>(sender());
|
2011-04-08 17:37:11 +00:00
|
|
|
Q_ASSERT(menu);
|
|
|
|
|
2016-01-10 10:18:30 +00:00
|
|
|
// All actions get cleared by QMenu::clear(). This includes the sub-menus
|
|
|
|
// because 'menu' is their parent.
|
2011-04-08 17:37:11 +00:00
|
|
|
menu->clear();
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
KActionCollection* ac = actionCollection();
|
|
|
|
|
2018-10-07 13:24:22 +00:00
|
|
|
menu->addMenu(m_newFileMenu->menu());
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("file_new")), menu);
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("new_tab")), menu);
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("closed_tabs")), menu);
|
2018-10-07 13:24:22 +00:00
|
|
|
|
|
|
|
menu->addSeparator();
|
|
|
|
|
2011-03-26 22:22:21 +00:00
|
|
|
// Add "Edit" actions
|
|
|
|
bool added = addActionToMenu(ac->action(KStandardAction::name(KStandardAction::Undo)), menu) |
|
2020-06-29 22:27:33 +00:00
|
|
|
addActionToMenu(ac->action(QString("copy_location")), menu) |
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("copy_to_inactive_split_view")), menu) |
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("move_to_inactive_split_view")), menu) |
|
2018-03-10 19:50:29 +00:00
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::SelectAll)), menu) |
|
2016-03-16 21:17:37 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("invert_selection")), menu);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
if (added) {
|
|
|
|
menu->addSeparator();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add "View" actions
|
2011-11-06 10:58:48 +00:00
|
|
|
if (!GeneralSettings::showZoomSlider()) {
|
2011-03-26 22:22:21 +00:00
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ZoomIn)), menu);
|
2019-09-01 15:29:00 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("view_zoom_reset")), menu);
|
2011-03-26 22:22:21 +00:00
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ZoomOut)), menu);
|
|
|
|
menu->addSeparator();
|
|
|
|
}
|
|
|
|
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
added = addActionToMenu(ac->action(QStringLiteral("show_preview")), menu) |
|
2016-03-16 21:17:37 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("show_in_groups")), menu) |
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("show_hidden_files")), menu) |
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("additional_info")), menu) |
|
2016-03-16 21:17:37 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("view_properties")), menu);
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
|
2011-03-26 22:22:21 +00:00
|
|
|
if (added) {
|
|
|
|
menu->addSeparator();
|
|
|
|
}
|
|
|
|
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
// Add a curated assortment of items from the "Tools" menu
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("show_filter_bar")), menu);
|
2019-11-17 17:14:27 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("open_preferred_search_tool")), menu);
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
addActionToMenu(ac->action(QStringLiteral("open_terminal")), menu);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
menu->addSeparator();
|
|
|
|
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
// Add "Show Panels" menu
|
|
|
|
addActionToMenu(ac->action(QStringLiteral("panels")), menu);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
2011-03-27 15:41:30 +00:00
|
|
|
// Add "Settings" menu entries
|
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::KeyBindings)), menu);
|
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ConfigureToolbars)), menu);
|
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::Preferences)), menu);
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ShowMenubar)), menu);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
// Add "Help" menu
|
Clean up hamburger menu and viewport and single-folder context menus
Summary:
Dolphin's hamburger and context menus have grown organically over time,
becoming a bit messy and somewhat visually overwhelming. This makes them
harder to parse and more intimidating to use.
This patch cleans up the hamburger menu and viewport and single-folder context
menus to group items more logically, and remove items that aren't actually relevant
to the context.
The hamburger menu part of the patch is fairly significant, and draws from the
principle of only showing actions with a global scope that are not already accessible
from another visible method (e.g. via the default toolbar). In the end, it manages to be
shorter than the current hamburger menu with expose actions that are more relevant.
A visible method to display context-specific actions should be explored separately
(see https://bugs.kde.org/show_bug.cgi?id=411500).
Depends on D23945
Test Plan:
Before, hamburger menu: {F7334178}
After, hamburger menu: {F7350958}
Before, viewport: {F7324802}
After, viewport: {F7330109}
Before, one folder selected: {F7324798}
After, one folder selected: {F7341163}
No change for the context menus shown when selecting a single item, multiple items, or multiple folders
Reviewers: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Reviewed By: #vdg, #dolphin, meven, elvisangelaccio, GB_2
Subscribers: GB_2, mmustac, elvisangelaccio, meven, ndavis, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D23757
2019-09-06 16:08:58 +00:00
|
|
|
auto helpMenu = m_helpMenu->menu();
|
|
|
|
helpMenu->setIcon(QIcon::fromTheme(QStringLiteral("system-help")));
|
|
|
|
menu->addMenu(helpMenu);
|
2011-03-26 22:22:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateToolBar()
|
|
|
|
{
|
|
|
|
if (!menuBar()->isVisible()) {
|
2012-04-07 22:09:11 +00:00
|
|
|
createControlButton();
|
2011-03-26 22:22:21 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
void DolphinMainWindow::slotControlButtonDeleted()
|
2011-03-26 22:22:21 +00:00
|
|
|
{
|
2017-11-21 09:52:14 +00:00
|
|
|
m_controlButton = nullptr;
|
2011-03-26 22:22:21 +00:00
|
|
|
m_updateToolBarTimer->start();
|
|
|
|
}
|
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
void DolphinMainWindow::slotPlaceActivated(const QUrl& url)
|
2013-10-26 07:24:04 +00:00
|
|
|
{
|
|
|
|
DolphinViewContainer* view = activeViewContainer();
|
|
|
|
|
|
|
|
if (view->url() == url) {
|
|
|
|
// We can end up here if the user clicked a device in the Places Panel
|
|
|
|
// which had been unmounted earlier, see https://bugs.kde.org/show_bug.cgi?id=161385.
|
|
|
|
reloadView();
|
|
|
|
} else {
|
|
|
|
changeUrl(url);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-22 12:01:49 +00:00
|
|
|
void DolphinMainWindow::closedTabsCountChanged(unsigned int count)
|
|
|
|
{
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->action(QStringLiteral("undo_close_tab"))->setEnabled(count > 0);
|
2014-07-22 12:01:49 +00:00
|
|
|
}
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
void DolphinMainWindow::activeViewChanged(DolphinViewContainer* viewContainer)
|
2007-06-12 21:45:22 +00:00
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
DolphinViewContainer* oldViewContainer = m_activeViewContainer;
|
2011-02-09 18:21:58 +00:00
|
|
|
Q_ASSERT(viewContainer);
|
2007-06-12 21:45:22 +00:00
|
|
|
|
2008-02-11 12:34:48 +00:00
|
|
|
m_activeViewContainer = viewContainer;
|
2014-08-10 16:52:06 +00:00
|
|
|
|
|
|
|
if (oldViewContainer) {
|
[dolphin] Add an action to toggle the searchbar
Summary:
Make search action toggle the searchbar instead of just launching it.
The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.
BEFORE:
{F7256652}
AFTER:
{F7256862}
BUG: 344617
FIXED-IN: 19.12.0
Closes T8473
Depends on D23075
Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.
Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio
Reviewed By: ngraham, #vdg
Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8473
Differential Revision: https://phabricator.kde.org/D23232
2019-09-01 19:59:43 +00:00
|
|
|
const QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
|
|
|
|
toggleSearchAction->disconnect(oldViewContainer);
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
// Disconnect all signals between the old view container (container,
|
|
|
|
// view and url navigator) and main window.
|
|
|
|
oldViewContainer->disconnect(this);
|
|
|
|
oldViewContainer->view()->disconnect(this);
|
|
|
|
oldViewContainer->urlNavigator()->disconnect(this);
|
2019-03-24 17:37:10 +00:00
|
|
|
|
|
|
|
// except the requestItemInfo so that on hover the information panel can still be updated
|
|
|
|
connect(oldViewContainer->view(), &DolphinView::requestItemInfo,
|
|
|
|
this, &DolphinMainWindow::requestItemInfo);
|
2014-08-10 16:52:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
connectViewSignals(viewContainer);
|
|
|
|
|
2008-03-12 16:58:11 +00:00
|
|
|
m_actionHandler->setCurrentView(viewContainer->view());
|
|
|
|
|
2007-06-12 21:45:22 +00:00
|
|
|
updateHistory();
|
2019-09-01 21:01:57 +00:00
|
|
|
updateFileAndEditActions();
|
2014-04-30 07:34:32 +00:00
|
|
|
updatePasteAction();
|
2007-06-12 21:45:22 +00:00
|
|
|
updateViewActions();
|
|
|
|
updateGoActions();
|
[dolphin] Add an action to toggle the searchbar
Summary:
Make search action toggle the searchbar instead of just launching it.
The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.
BEFORE:
{F7256652}
AFTER:
{F7256862}
BUG: 344617
FIXED-IN: 19.12.0
Closes T8473
Depends on D23075
Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.
Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio
Reviewed By: ngraham, #vdg
Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8473
Differential Revision: https://phabricator.kde.org/D23232
2019-09-01 19:59:43 +00:00
|
|
|
updateSearchAction();
|
2007-06-12 21:45:22 +00:00
|
|
|
|
2014-10-21 19:18:43 +00:00
|
|
|
const QUrl url = viewContainer->url();
|
2007-06-13 17:08:39 +00:00
|
|
|
emit urlChanged(url);
|
2007-06-12 21:45:22 +00:00
|
|
|
}
|
|
|
|
|
2014-08-10 16:52:06 +00:00
|
|
|
void DolphinMainWindow::tabCountChanged(int count)
|
|
|
|
{
|
|
|
|
const bool enableTabActions = (count > 1);
|
2019-10-13 14:37:00 +00:00
|
|
|
for (int i = 0; i < MaxActivateTabShortcuts; ++i) {
|
|
|
|
actionCollection()->action(QStringLiteral("activate_tab_%1").arg(i))->setEnabled(enableTabActions);
|
|
|
|
}
|
|
|
|
actionCollection()->action(QStringLiteral("activate_last_tab"))->setEnabled(enableTabActions);
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->action(QStringLiteral("activate_next_tab"))->setEnabled(enableTabActions);
|
|
|
|
actionCollection()->action(QStringLiteral("activate_prev_tab"))->setEnabled(enableTabActions);
|
2014-08-10 16:52:06 +00:00
|
|
|
}
|
|
|
|
|
2018-07-28 15:29:00 +00:00
|
|
|
void DolphinMainWindow::updateWindowTitle()
|
2014-08-13 20:06:28 +00:00
|
|
|
{
|
Do not display full path in the title of the tab
Summary:
Displays the full path only in the window title, not in the tab title.
Screenshot for comparison: ( Dolphin on the right is without D28815 , Dolphin on left has both D28815 and this patch)
{F8240079}
Reviewers: #vdg, #dolphin, ngraham, meven
Reviewed By: #vdg, #dolphin, ngraham, meven
Subscribers: ngraham, elvisangelaccio, meven, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D28857
2020-04-15 15:29:17 +00:00
|
|
|
const QString newTitle = m_activeViewContainer->captionWindowTitle();
|
2019-01-14 01:55:07 +00:00
|
|
|
if (windowTitle() != newTitle) {
|
|
|
|
setWindowTitle(newTitle);
|
|
|
|
}
|
2014-08-13 20:06:28 +00:00
|
|
|
}
|
|
|
|
|
2017-10-12 21:17:51 +00:00
|
|
|
void DolphinMainWindow::slotStorageTearDownFromPlacesRequested(const QString& mountPath)
|
|
|
|
{
|
2019-10-01 20:28:20 +00:00
|
|
|
if (m_terminalPanel && m_terminalPanel->currentWorkingDirectory().startsWith(mountPath)) {
|
2017-10-12 21:17:51 +00:00
|
|
|
m_tearDownFromPlacesRequested = true;
|
|
|
|
m_terminalPanel->goHome();
|
|
|
|
// m_placesPanel->proceedWithTearDown() will be called in slotTerminalDirectoryChanged
|
|
|
|
} else {
|
|
|
|
m_placesPanel->proceedWithTearDown();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::slotStorageTearDownExternallyRequested(const QString& mountPath)
|
|
|
|
{
|
2019-10-01 20:28:20 +00:00
|
|
|
if (m_terminalPanel && m_terminalPanel->currentWorkingDirectory().startsWith(mountPath)) {
|
2017-10-12 21:17:51 +00:00
|
|
|
m_tearDownFromPlacesRequested = false;
|
|
|
|
m_terminalPanel->goHome();
|
|
|
|
}
|
2017-10-14 10:49:29 +00:00
|
|
|
}
|
2017-10-12 21:17:51 +00:00
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::setupActions()
|
|
|
|
{
|
|
|
|
// setup 'File' menu
|
2013-08-16 18:22:33 +00:00
|
|
|
m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this);
|
2014-04-06 01:32:55 +00:00
|
|
|
QMenu* menu = m_newFileMenu->menu();
|
2008-03-18 22:38:52 +00:00
|
|
|
menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
|
2016-03-16 21:17:37 +00:00
|
|
|
menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new")));
|
2013-01-14 09:42:03 +00:00
|
|
|
m_newFileMenu->setDelayed(false);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(menu, &QMenu::aboutToShow,
|
|
|
|
this, &DolphinMainWindow::updateNewMenu);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2018-03-10 19:50:29 +00:00
|
|
|
QAction* newWindow = KStandardAction::openNew(this, &DolphinMainWindow::openNewMainWindow, actionCollection());
|
2007-06-30 20:10:50 +00:00
|
|
|
newWindow->setText(i18nc("@action:inmenu File", "New &Window"));
|
2019-08-24 14:16:42 +00:00
|
|
|
newWindow->setToolTip(i18nc("@info", "Open a new Dolphin window"));
|
2019-06-23 19:19:49 +00:00
|
|
|
newWindow->setWhatsThis(xi18nc("@info:whatsthis", "This opens a new "
|
|
|
|
"window just like this one with the current location and view."
|
|
|
|
"<nl/>You can drag and drop items between windows."));
|
2018-12-19 05:03:16 +00:00
|
|
|
newWindow->setIcon(QIcon::fromTheme(QStringLiteral("window-new")));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* newTab = actionCollection()->addAction(QStringLiteral("new_tab"));
|
|
|
|
newTab->setIcon(QIcon::fromTheme(QStringLiteral("tab-new")));
|
2008-04-12 15:09:46 +00:00
|
|
|
newTab->setText(i18nc("@action:inmenu File", "New Tab"));
|
2019-06-23 19:19:49 +00:00
|
|
|
newTab->setWhatsThis(xi18nc("@info:whatsthis", "This opens a new "
|
|
|
|
"<emphasis>Tab</emphasis> with the current location and view.<nl/>"
|
|
|
|
"A tab is an additional view within this window. "
|
|
|
|
"You can drag and drop items between tabs."));
|
2018-10-06 07:59:10 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(newTab, {Qt::CTRL + Qt::Key_T, Qt::CTRL + Qt::SHIFT + Qt::Key_N});
|
2019-05-05 15:20:44 +00:00
|
|
|
connect(newTab, &QAction::triggered, this, &DolphinMainWindow::openNewActivatedTab);
|
2008-04-12 15:09:46 +00:00
|
|
|
|
2019-09-01 21:01:57 +00:00
|
|
|
QAction* addToPlaces = actionCollection()->addAction(QStringLiteral("add_to_places"));
|
|
|
|
addToPlaces->setIcon(QIcon::fromTheme(QStringLiteral("bookmark-new")));
|
2020-01-11 19:52:46 +00:00
|
|
|
addToPlaces->setText(i18nc("@action:inmenu Add current folder to places", "Add to Places"));
|
2019-09-02 04:23:53 +00:00
|
|
|
addToPlaces->setWhatsThis(xi18nc("@info:whatsthis", "This adds the selected folder "
|
2019-09-01 21:01:57 +00:00
|
|
|
"to the Places panel."));
|
|
|
|
connect(addToPlaces, &QAction::triggered, this, &DolphinMainWindow::addToPlaces);
|
|
|
|
|
2019-05-05 15:20:44 +00:00
|
|
|
QAction* closeTab = KStandardAction::close(m_tabWidget, QOverload<>::of(&DolphinTabWidget::closeTab), actionCollection());
|
2009-01-11 16:28:42 +00:00
|
|
|
closeTab->setText(i18nc("@action:inmenu File", "Close Tab"));
|
2019-06-23 19:19:49 +00:00
|
|
|
closeTab->setWhatsThis(i18nc("@info:whatsthis", "This closes the "
|
|
|
|
"currently viewed tab. If no more tabs are left this window "
|
|
|
|
"will close instead."));
|
2008-04-16 20:03:05 +00:00
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
QAction* quitAction = KStandardAction::quit(this, &DolphinMainWindow::quit, actionCollection());
|
|
|
|
quitAction->setWhatsThis(i18nc("@info:whatsthis quit", "This closes this window."));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
// setup 'Edit' menu
|
|
|
|
KStandardAction::undo(this,
|
2017-08-24 15:32:06 +00:00
|
|
|
&DolphinMainWindow::undo,
|
2007-04-01 18:36:23 +00:00
|
|
|
actionCollection());
|
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
// i18n: This will be the last paragraph for the whatsthis for all three:
|
|
|
|
// Cut, Copy and Paste
|
|
|
|
const QString cutCopyPastePara = xi18nc("@info:whatsthis", "<para><emphasis>Cut, "
|
|
|
|
"Copy</emphasis> and <emphasis>Paste</emphasis> work between many "
|
|
|
|
"applications and are among the most used commands. That's why their "
|
|
|
|
"<emphasis>keyboard shortcuts</emphasis> are prominently placed right "
|
|
|
|
"next to each other on the keyboard: <shortcut>Ctrl+X</shortcut>, "
|
|
|
|
"<shortcut>Ctrl+C</shortcut> and <shortcut>Ctrl+V</shortcut>.</para>");
|
|
|
|
QAction* cutAction = KStandardAction::cut(this, &DolphinMainWindow::cut, actionCollection());
|
|
|
|
cutAction->setWhatsThis(xi18nc("@info:whatsthis cut", "This copies the items "
|
|
|
|
"in your current selection to the <emphasis>clipboard</emphasis>.<nl/>"
|
|
|
|
"Use the <emphasis>Paste</emphasis> action afterwards to copy them from "
|
|
|
|
"the clipboard to a new location. The items will be removed from their "
|
|
|
|
"initial location.") + cutCopyPastePara);
|
|
|
|
QAction* copyAction = KStandardAction::copy(this, &DolphinMainWindow::copy, actionCollection());
|
|
|
|
copyAction->setWhatsThis(xi18nc("@info:whatsthis copy", "This copies the "
|
|
|
|
"items in your current selection to the <emphasis>clipboard</emphasis>."
|
|
|
|
"<nl/>Use the <emphasis>Paste</emphasis> action afterwards to copy them "
|
|
|
|
"from the clipboard to a new location.") + cutCopyPastePara);
|
2017-08-24 15:32:06 +00:00
|
|
|
QAction* paste = KStandardAction::paste(this, &DolphinMainWindow::paste, actionCollection());
|
2009-10-11 17:43:30 +00:00
|
|
|
// The text of the paste-action is modified dynamically by Dolphin
|
|
|
|
// (e. g. to "Paste One Folder"). To prevent that the size of the toolbar changes
|
|
|
|
// due to the long text, the text "Paste" is used:
|
|
|
|
paste->setIconText(i18nc("@action:inmenu Edit", "Paste"));
|
2019-06-23 19:19:49 +00:00
|
|
|
paste->setWhatsThis(xi18nc("@info:whatsthis paste", "This copies the items from "
|
|
|
|
"your <emphasis>clipboard</emphasis> to the currently viewed folder.<nl/>"
|
|
|
|
"If the items were added to the clipboard by the <emphasis>Cut</emphasis> "
|
|
|
|
"action they are removed from their old location.") + cutCopyPastePara);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
QAction* copyToOtherViewAction = actionCollection()->addAction(QStringLiteral("copy_to_inactive_split_view"));
|
|
|
|
copyToOtherViewAction->setText(i18nc("@action:inmenu", "Copy to inactive split view"));
|
|
|
|
copyToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Copy", "This copies the selected items from "
|
|
|
|
"the <emphasis>active</emphasis> view to the inactive split view."));
|
|
|
|
copyToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy")));
|
|
|
|
copyToOtherViewAction->setIconText(i18nc("@action:inmenu Edit", "Copy to inactive split view"));
|
|
|
|
actionCollection()->setDefaultShortcut(copyToOtherViewAction, Qt::SHIFT + Qt::Key_F5 );
|
|
|
|
connect(copyToOtherViewAction, &QAction::triggered, m_tabWidget, &DolphinTabWidget::copyToInactiveSplitView);
|
|
|
|
|
|
|
|
QAction* moveToOtherViewAction = actionCollection()->addAction(QStringLiteral("move_to_inactive_split_view"));
|
|
|
|
moveToOtherViewAction->setText(i18nc("@action:inmenu", "Move to inactive split view"));
|
|
|
|
moveToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Move", "This moves the selected items from "
|
|
|
|
"the <emphasis>active</emphasis> view to the inactive split view."));
|
|
|
|
moveToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-cut")));
|
|
|
|
moveToOtherViewAction->setIconText(i18nc("@action:inmenu Edit", "Move to inactive split view"));
|
|
|
|
actionCollection()->setDefaultShortcut(moveToOtherViewAction, Qt::SHIFT + Qt::Key_F6 );
|
|
|
|
connect(moveToOtherViewAction, &QAction::triggered, m_tabWidget, &DolphinTabWidget::moveToInactiveSplitView);
|
|
|
|
|
Use placeholder for search action
Summary:
See https://hig.kde.org/style/writing/placeholder.html
Screenshot:
Old: {F6691712}
New: {F6698685}
Test Plan: Compile and run
Reviewers: #dolphin, #vdg, ngraham, elvisangelaccio
Reviewed By: #dolphin, #vdg, ngraham
Subscribers: GB_2, kde-doc-english, elvisangelaccio, ngraham, yurchor, kfm-devel
Tags: #dolphin, #documentation
Maniphest Tasks: T10258
Differential Revision: https://phabricator.kde.org/D19770
2019-03-14 19:53:49 +00:00
|
|
|
QAction *searchAction = KStandardAction::find(this, &DolphinMainWindow::find, actionCollection());
|
|
|
|
searchAction->setText(i18n("Search..."));
|
2019-06-23 19:19:49 +00:00
|
|
|
searchAction->setToolTip(i18nc("@info:tooltip", "Search for files and folders"));
|
|
|
|
searchAction->setWhatsThis(xi18nc("@info:whatsthis find", "<para>This helps you "
|
|
|
|
"find files and folders by opening a <emphasis>find bar</emphasis>. "
|
|
|
|
"There you can enter search terms and specify settings to find the "
|
|
|
|
"objects you are looking for.</para><para>Use this help again on "
|
|
|
|
"the find bar so we can have a look at it while the settings are "
|
|
|
|
"explained.</para>"));
|
|
|
|
|
[dolphin] Add an action to toggle the searchbar
Summary:
Make search action toggle the searchbar instead of just launching it.
The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.
BEFORE:
{F7256652}
AFTER:
{F7256862}
BUG: 344617
FIXED-IN: 19.12.0
Closes T8473
Depends on D23075
Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.
Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio
Reviewed By: ngraham, #vdg
Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8473
Differential Revision: https://phabricator.kde.org/D23232
2019-09-01 19:59:43 +00:00
|
|
|
// toggle_search acts as a copy of the main searchAction to be used mainly
|
|
|
|
// in the toolbar, with no default shortcut attached, to avoid messing with
|
|
|
|
// existing workflows (search bar always open and Ctrl-F to focus)
|
|
|
|
QAction *toggleSearchAction = actionCollection()->addAction(QStringLiteral("toggle_search"));
|
|
|
|
toggleSearchAction->setText(i18nc("@action:inmenu", "Toggle Search Bar"));
|
|
|
|
toggleSearchAction->setIconText(i18nc("@action:intoolbar", "Search"));
|
|
|
|
toggleSearchAction->setIcon(searchAction->icon());
|
|
|
|
toggleSearchAction->setToolTip(searchAction->toolTip());
|
|
|
|
toggleSearchAction->setWhatsThis(searchAction->whatsThis());
|
|
|
|
toggleSearchAction->setCheckable(true);
|
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
QAction* selectAllAction = KStandardAction::selectAll(this, &DolphinMainWindow::selectAll, actionCollection());
|
|
|
|
selectAllAction->setWhatsThis(xi18nc("@info:whatsthis", "This selects all "
|
|
|
|
"files and folders in the current location."));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* invertSelection = actionCollection()->addAction(QStringLiteral("invert_selection"));
|
2007-06-30 20:10:50 +00:00
|
|
|
invertSelection->setText(i18nc("@action:inmenu Edit", "Invert Selection"));
|
2019-06-23 19:19:49 +00:00
|
|
|
invertSelection->setWhatsThis(xi18nc("@info:whatsthis invert", "This selects all "
|
|
|
|
"objects that you have currently <emphasis>not</emphasis> selected instead."));
|
2018-02-14 14:40:36 +00:00
|
|
|
invertSelection->setIcon(QIcon::fromTheme(QStringLiteral("edit-select-invert")));
|
2018-03-03 08:46:14 +00:00
|
|
|
actionCollection()->setDefaultShortcut(invertSelection, Qt::CTRL + Qt::SHIFT + Qt::Key_A);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(invertSelection, &QAction::triggered, this, &DolphinMainWindow::invertSelection);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
// setup 'View' menu
|
2008-02-13 20:52:21 +00:00
|
|
|
// (note that most of it is set up in DolphinViewActionHandler)
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* split = actionCollection()->addAction(QStringLiteral("split_view"));
|
2019-06-23 19:19:49 +00:00
|
|
|
split->setWhatsThis(xi18nc("@info:whatsthis find", "<para>This splits "
|
|
|
|
"the folder view below into two autonomous views.</para><para>This "
|
|
|
|
"way you can see two locations at once and move items between them "
|
|
|
|
"quickly.</para>Click this again afterwards to recombine the views."));
|
2014-09-14 20:49:25 +00:00
|
|
|
actionCollection()->setDefaultShortcut(split, Qt::Key_F3);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(split, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-09-26 16:55:42 +00:00
|
|
|
QAction* stashSplit = actionCollection()->addAction(QStringLiteral("split_stash"));
|
2018-03-03 08:46:14 +00:00
|
|
|
actionCollection()->setDefaultShortcut(stashSplit, Qt::CTRL + Qt::Key_S);
|
2016-09-26 16:55:42 +00:00
|
|
|
stashSplit->setText(i18nc("@action:intoolbar Stash", "Stash"));
|
|
|
|
stashSplit->setToolTip(i18nc("@info", "Opens the stash virtual directory in a split window"));
|
2017-11-08 14:06:46 +00:00
|
|
|
stashSplit->setIcon(QIcon::fromTheme(QStringLiteral("folder-stash")));
|
2017-02-02 16:16:54 +00:00
|
|
|
stashSplit->setCheckable(false);
|
2017-02-13 10:09:01 +00:00
|
|
|
stashSplit->setVisible(KProtocolInfo::isKnownProtocol("stash"));
|
2016-09-26 16:55:42 +00:00
|
|
|
connect(stashSplit, &QAction::triggered, this, &DolphinMainWindow::toggleSplitStash);
|
|
|
|
|
2018-03-10 19:50:29 +00:00
|
|
|
KStandardAction::redisplay(this, &DolphinMainWindow::reloadView, actionCollection());
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* stop = actionCollection()->addAction(QStringLiteral("stop"));
|
2007-06-30 20:10:50 +00:00
|
|
|
stop->setText(i18nc("@action:inmenu View", "Stop"));
|
2009-11-06 18:02:55 +00:00
|
|
|
stop->setToolTip(i18nc("@info", "Stop loading"));
|
2019-06-23 19:19:49 +00:00
|
|
|
stop->setWhatsThis(i18nc("@info", "This stops the loading of the contents of the current folder."));
|
2016-03-16 21:17:37 +00:00
|
|
|
stop->setIcon(QIcon::fromTheme(QStringLiteral("process-stop")));
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(stop, &QAction::triggered, this, &DolphinMainWindow::stopLoading);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
KToggleAction* editableLocation = actionCollection()->add<KToggleAction>(QStringLiteral("editable_location"));
|
2011-03-26 22:22:21 +00:00
|
|
|
editableLocation->setText(i18nc("@action:inmenu Navigation Bar", "Editable Location"));
|
2019-06-23 19:19:49 +00:00
|
|
|
editableLocation->setWhatsThis(xi18nc("@info:whatsthis",
|
|
|
|
"This toggles the <emphasis>Location Bar</emphasis> to be "
|
|
|
|
"editable so you can directly enter a location you want to go to.<nl/>"
|
|
|
|
"You can also switch to editing by clicking to the right of the "
|
|
|
|
"location and switch back by confirming the edited location."));
|
2014-09-14 20:49:25 +00:00
|
|
|
actionCollection()->setDefaultShortcut(editableLocation, Qt::Key_F6);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(editableLocation, &KToggleAction::triggered, this, &DolphinMainWindow::toggleEditLocation);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* replaceLocation = actionCollection()->addAction(QStringLiteral("replace_location"));
|
2008-10-25 09:41:39 +00:00
|
|
|
replaceLocation->setText(i18nc("@action:inmenu Navigation Bar", "Replace Location"));
|
2019-06-23 19:19:49 +00:00
|
|
|
// i18n: "enter" is used both in the meaning of "writing" and "going to" a new location here.
|
|
|
|
// Both meanings are useful but not necessary to understand the use of "Replace Location".
|
|
|
|
// So you might want to be more verbose in your language to convey the meaning but it's up to you.
|
|
|
|
replaceLocation->setWhatsThis(xi18nc("@info:whatsthis",
|
|
|
|
"This switches to editing the location and selects it "
|
|
|
|
"so you can quickly enter a different location."));
|
2018-03-03 08:46:14 +00:00
|
|
|
actionCollection()->setDefaultShortcut(replaceLocation, Qt::CTRL + Qt::Key_L);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(replaceLocation, &QAction::triggered, this, &DolphinMainWindow::replaceLocation);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
// setup 'Go' menu
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
{
|
|
|
|
QScopedPointer<QAction> backAction(KStandardAction::back(nullptr, nullptr, nullptr));
|
|
|
|
m_backAction = new KToolBarPopupAction(backAction->icon(), backAction->text(), actionCollection());
|
|
|
|
m_backAction->setObjectName(backAction->objectName());
|
|
|
|
m_backAction->setShortcuts(backAction->shortcuts());
|
|
|
|
}
|
|
|
|
m_backAction->setDelayed(true);
|
|
|
|
m_backAction->setStickyMenu(false);
|
|
|
|
connect(m_backAction, &QAction::triggered, this, &DolphinMainWindow::goBack);
|
|
|
|
connect(m_backAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowBackPopupMenu);
|
|
|
|
connect(m_backAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoBack);
|
|
|
|
actionCollection()->addAction(m_backAction->objectName(), m_backAction);
|
|
|
|
|
|
|
|
auto backShortcuts = m_backAction->shortcuts();
|
2014-04-06 01:32:55 +00:00
|
|
|
backShortcuts.append(QKeySequence(Qt::Key_Backspace));
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(m_backAction, backShortcuts);
|
2007-09-09 19:02:22 +00:00
|
|
|
|
2014-06-19 20:04:36 +00:00
|
|
|
DolphinRecentTabsMenu* recentTabsMenu = new DolphinRecentTabsMenu(this);
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->addAction(QStringLiteral("closed_tabs"), recentTabsMenu);
|
|
|
|
connect(m_tabWidget, &DolphinTabWidget::rememberClosedTab,
|
|
|
|
recentTabsMenu, &DolphinRecentTabsMenu::rememberClosedTab);
|
|
|
|
connect(recentTabsMenu, &DolphinRecentTabsMenu::restoreClosedTab,
|
|
|
|
m_tabWidget, &DolphinTabWidget::restoreClosedTab);
|
|
|
|
connect(recentTabsMenu, &DolphinRecentTabsMenu::closedTabsCountChanged,
|
|
|
|
this, &DolphinMainWindow::closedTabsCountChanged);
|
|
|
|
|
|
|
|
QAction* undoCloseTab = actionCollection()->addAction(QStringLiteral("undo_close_tab"));
|
2014-07-22 12:01:49 +00:00
|
|
|
undoCloseTab->setText(i18nc("@action:inmenu File", "Undo close tab"));
|
2019-06-23 19:19:49 +00:00
|
|
|
undoCloseTab->setWhatsThis(i18nc("@info:whatsthis undo close tab",
|
|
|
|
"This returns you to the previously closed tab."));
|
2018-03-03 08:46:14 +00:00
|
|
|
actionCollection()->setDefaultShortcut(undoCloseTab, Qt::CTRL + Qt::SHIFT + Qt::Key_T);
|
2016-03-16 21:17:37 +00:00
|
|
|
undoCloseTab->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo")));
|
2014-07-22 12:01:49 +00:00
|
|
|
undoCloseTab->setEnabled(false);
|
2016-03-16 21:17:37 +00:00
|
|
|
connect(undoCloseTab, &QAction::triggered, recentTabsMenu, &DolphinRecentTabsMenu::undoCloseTab);
|
2009-03-01 01:38:20 +00:00
|
|
|
|
2015-01-28 14:04:32 +00:00
|
|
|
auto undoAction = actionCollection()->action(KStandardAction::name(KStandardAction::Undo));
|
2019-06-23 19:19:49 +00:00
|
|
|
undoAction->setWhatsThis(xi18nc("@info:whatsthis", "This undoes "
|
|
|
|
"the last change you made to files or folders.<nl/>"
|
|
|
|
"Such changes include <interface>creating, renaming</interface> "
|
|
|
|
"and <interface>moving</interface> them to a different location "
|
|
|
|
"or to the <filename>Trash</filename>. <nl/>Changes that can't "
|
|
|
|
"be undone will ask for your confirmation."));
|
2015-01-28 14:04:32 +00:00
|
|
|
undoAction->setEnabled(false); // undo should be disabled by default
|
|
|
|
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
{
|
|
|
|
QScopedPointer<QAction> forwardAction(KStandardAction::forward(nullptr, nullptr, nullptr));
|
|
|
|
m_forwardAction = new KToolBarPopupAction(forwardAction->icon(), forwardAction->text(), actionCollection());
|
|
|
|
m_forwardAction->setObjectName(forwardAction->objectName());
|
|
|
|
m_forwardAction->setShortcuts(forwardAction->shortcuts());
|
|
|
|
}
|
|
|
|
m_forwardAction->setDelayed(true);
|
|
|
|
m_forwardAction->setStickyMenu(false);
|
|
|
|
connect(m_forwardAction, &QAction::triggered, this, &DolphinMainWindow::goForward);
|
|
|
|
connect(m_forwardAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowForwardPopupMenu);
|
|
|
|
connect(m_forwardAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoForward);
|
|
|
|
actionCollection()->addAction(m_forwardAction->objectName(), m_forwardAction);
|
2019-10-01 15:24:53 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(m_forwardAction, m_forwardAction->shortcuts());
|
|
|
|
|
Add navigation history to forward/back buttons
Summary:
Adds navigation history to forward/back buttons in the toolbar. This
changes the forward/back buttons in the toolbar to use the
KToolBarPopupAction class which provides access to a drop down menu.
Test Plan:
Browse some folders
Click the back drop down menu and navigate somewhere
Click the forward drop down menu and navigate somewhere
FEATURE: 157819
FIXED-IN: 19.12.0
Reviewers: #dolphin, ngraham, elvisangelaccio, #vdg
Reviewed By: #dolphin, ngraham, elvisangelaccio, #vdg
Subscribers: felixernst, nerdopolist, mart, richardl, ognarb, david.fontanals, abetts, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D19311
2019-04-11 17:21:41 +00:00
|
|
|
// enable middle-click to open in a new tab
|
|
|
|
auto *middleClickEventFilter = new MiddleClickActionEventFilter(this);
|
|
|
|
connect(middleClickEventFilter, &MiddleClickActionEventFilter::actionMiddleClicked, this, &DolphinMainWindow::slotBackForwardActionMiddleClicked);
|
|
|
|
m_backAction->menu()->installEventFilter(middleClickEventFilter);
|
|
|
|
m_forwardAction->menu()->installEventFilter(middleClickEventFilter);
|
2017-08-24 15:32:06 +00:00
|
|
|
KStandardAction::up(this, &DolphinMainWindow::goUp, actionCollection());
|
2019-06-23 19:19:49 +00:00
|
|
|
QAction* homeAction = KStandardAction::home(this, &DolphinMainWindow::goHome, actionCollection());
|
|
|
|
homeAction->setWhatsThis(xi18nc("@info:whatsthis", "Go to your "
|
|
|
|
"<filename>Home</filename> folder.<nl/>Every user account "
|
|
|
|
"has their own <filename>Home</filename> that contains their data "
|
|
|
|
"including folders that contain personal application data."));
|
2011-03-29 16:35:50 +00:00
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
// setup 'Tools' menu
|
2017-03-11 17:33:41 +00:00
|
|
|
QAction* showFilterBar = actionCollection()->addAction(QStringLiteral("show_filter_bar"));
|
2007-06-30 20:10:50 +00:00
|
|
|
showFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar"));
|
2019-06-23 19:19:49 +00:00
|
|
|
showFilterBar->setWhatsThis(xi18nc("@info:whatsthis", "This opens the "
|
|
|
|
"<emphasis>Filter Bar</emphasis> at the bottom of the window.<nl/> "
|
|
|
|
"There you can enter a text to filter the files and folders currently displayed. "
|
|
|
|
"Only those that contain the text in their name will be kept in view."));
|
2016-03-16 21:17:37 +00:00
|
|
|
showFilterBar->setIcon(QIcon::fromTheme(QStringLiteral("view-filter")));
|
2018-03-02 07:52:47 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(showFilterBar, {Qt::CTRL + Qt::Key_I, Qt::Key_Slash});
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(showFilterBar, &QAction::triggered, this, &DolphinMainWindow::showFilterBar);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* compareFiles = actionCollection()->addAction(QStringLiteral("compare_files"));
|
2007-06-30 20:10:50 +00:00
|
|
|
compareFiles->setText(i18nc("@action:inmenu Tools", "Compare Files"));
|
2016-03-16 21:17:37 +00:00
|
|
|
compareFiles->setIcon(QIcon::fromTheme(QStringLiteral("kompare")));
|
2007-04-01 18:36:23 +00:00
|
|
|
compareFiles->setEnabled(false);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(compareFiles, &QAction::triggered, this, &DolphinMainWindow::compareFiles);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2019-11-17 17:14:27 +00:00
|
|
|
QAction* openPreferredSearchTool = actionCollection()->addAction(QStringLiteral("open_preferred_search_tool"));
|
|
|
|
openPreferredSearchTool->setText(i18nc("@action:inmenu Tools", "Open Preferred Search Tool"));
|
|
|
|
openPreferredSearchTool->setWhatsThis(xi18nc("@info:whatsthis",
|
|
|
|
"<para>This opens a preferred search tool for the viewed location.</para>"
|
|
|
|
"<para>Use <emphasis>More Search Tools</emphasis> menu to configure it.</para>"));
|
|
|
|
openPreferredSearchTool->setIcon(QIcon::fromTheme(QStringLiteral("search")));
|
|
|
|
actionCollection()->setDefaultShortcut(openPreferredSearchTool, Qt::CTRL + Qt::SHIFT + Qt::Key_F);
|
|
|
|
connect(openPreferredSearchTool, &QAction::triggered, this, &DolphinMainWindow::openPreferredSearchTool);
|
|
|
|
|
2019-01-28 21:38:21 +00:00
|
|
|
#ifdef HAVE_TERMINAL
|
2016-05-26 12:51:23 +00:00
|
|
|
if (KAuthorized::authorize(QStringLiteral("shell_access"))) {
|
2016-05-18 01:06:49 +00:00
|
|
|
QAction* openTerminal = actionCollection()->addAction(QStringLiteral("open_terminal"));
|
|
|
|
openTerminal->setText(i18nc("@action:inmenu Tools", "Open Terminal"));
|
2019-06-23 19:19:49 +00:00
|
|
|
openTerminal->setWhatsThis(xi18nc("@info:whatsthis",
|
|
|
|
"<para>This opens a <emphasis>terminal</emphasis> application for the viewed location.</para>"
|
|
|
|
"<para>To learn more about terminals use the help in the terminal application.</para>"));
|
2019-09-05 15:30:06 +00:00
|
|
|
openTerminal->setIcon(QIcon::fromTheme(QStringLiteral("dialog-scripts")));
|
2018-03-03 08:46:14 +00:00
|
|
|
actionCollection()->setDefaultShortcut(openTerminal, Qt::SHIFT + Qt::Key_F4);
|
2016-05-18 01:06:49 +00:00
|
|
|
connect(openTerminal, &QAction::triggered, this, &DolphinMainWindow::openTerminal);
|
Add action for focusing Terminal Panel
Summary:
Add an action for focusing and de-focusing the Terminal Panel.
FEATURE: 185096
FIXED-IN 20.04.0
Test Plan:
- Hit {key Ctrl Shift F4} or click {nav Tools > Focus Terminal Panel} or {nav Control > Tools > Focus Terminal Panel}
- If the Terminal Panel was closed, it opens and gains focus
- If the Terminal Panel was open but unfocused, it gains focus
- If the Terminal Panel was open and focused, focus returns to the view
{F6630289, size=full}
Reviewers: #dolphin, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio, rominf
Subscribers: kfm-devel, elvisangelaccio, rkflx, ngraham, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10959
2019-03-20 22:06:28 +00:00
|
|
|
|
|
|
|
QAction* focusTerminalPanel = actionCollection()->addAction(QStringLiteral("focus_terminal_panel"));
|
|
|
|
focusTerminalPanel->setText(i18nc("@action:inmenu Tools", "Focus Terminal Panel"));
|
|
|
|
focusTerminalPanel->setIcon(QIcon::fromTheme(QStringLiteral("swap-panels")));
|
|
|
|
actionCollection()->setDefaultShortcut(focusTerminalPanel, Qt::CTRL + Qt::SHIFT + Qt::Key_F4);
|
|
|
|
connect(focusTerminalPanel, &QAction::triggered, this, &DolphinMainWindow::focusTerminalPanel);
|
2016-05-18 01:06:49 +00:00
|
|
|
}
|
2018-01-21 11:15:07 +00:00
|
|
|
#endif
|
2009-03-10 06:59:27 +00:00
|
|
|
|
Add Bookmark Handling
Summary:
Add Bookmark Handling. Adds complete bookmark support as provided by
other KDE applications like Konsole and Konqueror. This allows you to
bookmark individual folders, create bookmark folders and open them.
Test Plan:
Go -> Bookmark -> Add Bookmark
Go -> Bookmark -> [Open the bookmark you selected]
FEATURE: 171366
Reviewers: #dolphin, elvisangelaccio, ngraham
Reviewed By: #dolphin, elvisangelaccio, ngraham
Subscribers: ognarb, meven, loh.tar, cfeck, hein, kfm-devel
Tags: #dolphin
Maniphest Tasks: T5408
Differential Revision: https://phabricator.kde.org/D19926
2019-03-20 19:29:20 +00:00
|
|
|
// setup 'Bookmarks' menu
|
|
|
|
KActionMenu *bookmarkMenu = new KActionMenu(i18nc("@title:menu", "&Bookmarks"), this);
|
2019-06-07 15:50:53 +00:00
|
|
|
bookmarkMenu->setIcon(QIcon::fromTheme(QStringLiteral("bookmarks")));
|
|
|
|
// Make the toolbar button version work properly on click
|
|
|
|
bookmarkMenu->setDelayed(false);
|
Add Bookmark Handling
Summary:
Add Bookmark Handling. Adds complete bookmark support as provided by
other KDE applications like Konsole and Konqueror. This allows you to
bookmark individual folders, create bookmark folders and open them.
Test Plan:
Go -> Bookmark -> Add Bookmark
Go -> Bookmark -> [Open the bookmark you selected]
FEATURE: 171366
Reviewers: #dolphin, elvisangelaccio, ngraham
Reviewed By: #dolphin, elvisangelaccio, ngraham
Subscribers: ognarb, meven, loh.tar, cfeck, hein, kfm-devel
Tags: #dolphin
Maniphest Tasks: T5408
Differential Revision: https://phabricator.kde.org/D19926
2019-03-20 19:29:20 +00:00
|
|
|
m_bookmarkHandler = new DolphinBookmarkHandler(this, actionCollection(), bookmarkMenu->menu(), this);
|
|
|
|
actionCollection()->addAction(QStringLiteral("bookmarks"), bookmarkMenu);
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
// setup 'Settings' menu
|
2017-11-21 09:52:14 +00:00
|
|
|
KToggleAction* showMenuBar = KStandardAction::showMenubar(nullptr, nullptr, actionCollection());
|
2019-06-23 19:19:49 +00:00
|
|
|
showMenuBar->setWhatsThis(xi18nc("@info:whatsthis",
|
|
|
|
"This switches between having a <emphasis>Menubar</emphasis> "
|
|
|
|
"and having a <interface>Control</interface> button. Both "
|
|
|
|
"contain mostly the same commands and configuration options."));
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(showMenuBar, &KToggleAction::triggered, // Fixes #286822
|
|
|
|
this, &DolphinMainWindow::toggleShowMenuBar, Qt::QueuedConnection);
|
2018-02-03 19:30:37 +00:00
|
|
|
KStandardAction::preferences(this, &DolphinMainWindow::editSettings, actionCollection());
|
2008-10-25 09:00:28 +00:00
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
// setup 'Help' menu for the m_controlButton. The other one is set up in the base class.
|
|
|
|
m_helpMenu = new KHelpMenu(nullptr);
|
|
|
|
m_helpMenu->menu()->installEventFilter(this);
|
|
|
|
// remove duplicate shortcuts
|
|
|
|
m_helpMenu->action(KHelpMenu::menuHelpContents)->setShortcut(QKeySequence());
|
|
|
|
m_helpMenu->action(KHelpMenu::menuWhatsThis)->setShortcut(QKeySequence());
|
|
|
|
|
2008-10-25 09:00:28 +00:00
|
|
|
// not in menu actions
|
2014-11-03 23:00:04 +00:00
|
|
|
QList<QKeySequence> nextTabKeys = KStandardShortcut::tabNext();
|
2018-03-03 08:46:14 +00:00
|
|
|
nextTabKeys.append(QKeySequence(Qt::CTRL + Qt::Key_Tab));
|
2010-03-22 18:48:12 +00:00
|
|
|
|
2014-11-03 23:00:04 +00:00
|
|
|
QList<QKeySequence> prevTabKeys = KStandardShortcut::tabPrev();
|
2018-03-03 08:46:14 +00:00
|
|
|
prevTabKeys.append(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab));
|
2010-03-22 18:48:12 +00:00
|
|
|
|
2019-10-13 14:37:00 +00:00
|
|
|
for (int i = 0; i < MaxActivateTabShortcuts; ++i) {
|
|
|
|
QAction* activateTab = actionCollection()->addAction(QStringLiteral("activate_tab_%1").arg(i));
|
|
|
|
activateTab->setText(i18nc("@action:inmenu", "Activate Tab %1", i + 1));
|
|
|
|
activateTab->setEnabled(false);
|
|
|
|
connect(activateTab, &QAction::triggered, this, [this, i]() { m_tabWidget->activateTab(i); });
|
|
|
|
|
|
|
|
// only add default shortcuts for the first 9 tabs regardless of MaxActivateTabShortcuts
|
|
|
|
if (i < 9) {
|
|
|
|
actionCollection()->setDefaultShortcut(activateTab, QStringLiteral("Alt+%1").arg(i + 1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
QAction* activateLastTab = actionCollection()->addAction(QStringLiteral("activate_last_tab"));
|
|
|
|
activateLastTab->setText(i18nc("@action:inmenu", "Activate Last Tab"));
|
|
|
|
activateLastTab->setEnabled(false);
|
|
|
|
connect(activateLastTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activateLastTab);
|
|
|
|
actionCollection()->setDefaultShortcut(activateLastTab, Qt::ALT + Qt::Key_0);
|
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* activateNextTab = actionCollection()->addAction(QStringLiteral("activate_next_tab"));
|
2014-04-29 19:54:33 +00:00
|
|
|
activateNextTab->setIconText(i18nc("@action:inmenu", "Next Tab"));
|
2008-10-25 09:21:20 +00:00
|
|
|
activateNextTab->setText(i18nc("@action:inmenu", "Activate Next Tab"));
|
2014-04-26 10:28:42 +00:00
|
|
|
activateNextTab->setEnabled(false);
|
2014-08-22 21:17:02 +00:00
|
|
|
connect(activateNextTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activateNextTab);
|
2016-10-12 11:31:35 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(activateNextTab, nextTabKeys);
|
2008-10-25 09:00:28 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* activatePrevTab = actionCollection()->addAction(QStringLiteral("activate_prev_tab"));
|
2014-04-29 19:54:33 +00:00
|
|
|
activatePrevTab->setIconText(i18nc("@action:inmenu", "Previous Tab"));
|
2008-10-25 09:21:20 +00:00
|
|
|
activatePrevTab->setText(i18nc("@action:inmenu", "Activate Previous Tab"));
|
2014-04-26 10:28:42 +00:00
|
|
|
activatePrevTab->setEnabled(false);
|
2014-08-22 21:17:02 +00:00
|
|
|
connect(activatePrevTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activatePrevTab);
|
2016-10-12 11:31:35 +00:00
|
|
|
actionCollection()->setDefaultShortcuts(activatePrevTab, prevTabKeys);
|
2008-10-25 10:32:55 +00:00
|
|
|
|
|
|
|
// for context menu
|
2018-03-18 10:55:24 +00:00
|
|
|
QAction* showTarget = actionCollection()->addAction(QStringLiteral("show_target"));
|
|
|
|
showTarget->setText(i18nc("@action:inmenu", "Show Target"));
|
|
|
|
showTarget->setIcon(QIcon::fromTheme(QStringLiteral("document-open-folder")));
|
|
|
|
showTarget->setEnabled(false);
|
|
|
|
connect(showTarget, &QAction::triggered, this, &DolphinMainWindow::showTarget);
|
2018-03-03 13:36:44 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* openInNewTab = actionCollection()->addAction(QStringLiteral("open_in_new_tab"));
|
2008-10-25 10:32:55 +00:00
|
|
|
openInNewTab->setText(i18nc("@action:inmenu", "Open in New Tab"));
|
2016-03-16 21:17:37 +00:00
|
|
|
openInNewTab->setIcon(QIcon::fromTheme(QStringLiteral("tab-new")));
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(openInNewTab, &QAction::triggered, this, &DolphinMainWindow::openInNewTab);
|
2013-05-22 19:47:14 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* openInNewTabs = actionCollection()->addAction(QStringLiteral("open_in_new_tabs"));
|
2013-05-22 19:47:14 +00:00
|
|
|
openInNewTabs->setText(i18nc("@action:inmenu", "Open in New Tabs"));
|
2016-03-16 21:17:37 +00:00
|
|
|
openInNewTabs->setIcon(QIcon::fromTheme(QStringLiteral("tab-new")));
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(openInNewTabs, &QAction::triggered, this, &DolphinMainWindow::openInNewTab);
|
2008-12-12 06:55:26 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* openInNewWindow = actionCollection()->addAction(QStringLiteral("open_in_new_window"));
|
2008-10-25 10:32:55 +00:00
|
|
|
openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
|
2016-03-16 21:17:37 +00:00
|
|
|
openInNewWindow->setIcon(QIcon::fromTheme(QStringLiteral("window-new")));
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(openInNewWindow, &QAction::triggered, this, &DolphinMainWindow::openInNewWindow);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::setupDockWidgets()
|
|
|
|
{
|
2011-11-06 10:58:48 +00:00
|
|
|
const bool lock = GeneralSettings::lockPanels();
|
2010-12-31 10:59:46 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
KDualAction* lockLayoutAction = actionCollection()->add<KDualAction>(QStringLiteral("lock_panels"));
|
2010-12-31 10:59:46 +00:00
|
|
|
lockLayoutAction->setActiveText(i18nc("@action:inmenu Panels", "Unlock Panels"));
|
2016-03-16 21:17:37 +00:00
|
|
|
lockLayoutAction->setActiveIcon(QIcon::fromTheme(QStringLiteral("object-unlocked")));
|
2010-12-31 10:59:46 +00:00
|
|
|
lockLayoutAction->setInactiveText(i18nc("@action:inmenu Panels", "Lock Panels"));
|
2016-03-16 21:17:37 +00:00
|
|
|
lockLayoutAction->setInactiveIcon(QIcon::fromTheme(QStringLiteral("object-locked")));
|
2019-06-23 19:19:49 +00:00
|
|
|
lockLayoutAction->setWhatsThis(xi18nc("@info:whatsthis", "This "
|
|
|
|
"switches between having panels <emphasis>locked</emphasis> or "
|
|
|
|
"<emphasis>unlocked</emphasis>.<nl/>Unlocked panels can be "
|
|
|
|
"dragged to the other side of the window and have a close "
|
|
|
|
"button.<nl/>Locked panels are embedded more cleanly."));
|
2010-12-31 10:59:46 +00:00
|
|
|
lockLayoutAction->setActive(lock);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(lockLayoutAction, &KDualAction::triggered, this, &DolphinMainWindow::togglePanelLockState);
|
2010-12-31 10:59:46 +00:00
|
|
|
|
|
|
|
// Setup "Information"
|
|
|
|
DolphinDockWidget* infoDock = new DolphinDockWidget(i18nc("@title:window", "Information"));
|
|
|
|
infoDock->setLocked(lock);
|
2016-03-16 21:17:37 +00:00
|
|
|
infoDock->setObjectName(QStringLiteral("infoDock"));
|
2007-04-01 18:36:23 +00:00
|
|
|
infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
2018-08-13 21:36:35 +00:00
|
|
|
|
|
|
|
#ifdef HAVE_BALOO
|
2014-04-10 14:53:41 +00:00
|
|
|
InformationPanel* infoPanel = new InformationPanel(infoDock);
|
2014-11-10 07:45:38 +00:00
|
|
|
infoPanel->setCustomContextMenuActions({lockLayoutAction});
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(infoPanel, &InformationPanel::urlActivated, this, &DolphinMainWindow::handleUrl);
|
2009-01-14 20:14:36 +00:00
|
|
|
infoDock->setWidget(infoPanel);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2010-05-03 17:46:34 +00:00
|
|
|
QAction* infoAction = infoDock->toggleViewAction();
|
2016-03-16 21:17:37 +00:00
|
|
|
createPanelAction(QIcon::fromTheme(QStringLiteral("dialog-information")), Qt::Key_F11, infoAction, QStringLiteral("show_information_panel"));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
addDockWidget(Qt::RightDockWidgetArea, infoDock);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(this, &DolphinMainWindow::urlChanged,
|
|
|
|
infoPanel, &InformationPanel::setUrl);
|
|
|
|
connect(this, &DolphinMainWindow::selectionChanged,
|
|
|
|
infoPanel, &InformationPanel::setSelection);
|
|
|
|
connect(this, &DolphinMainWindow::requestItemInfo,
|
|
|
|
infoPanel, &InformationPanel::requestDelayedItemInfo);
|
2018-08-13 21:36:35 +00:00
|
|
|
#endif
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
// i18n: This is the last paragraph for the "What's This"-texts of all four panels.
|
|
|
|
const QString panelWhatsThis = xi18nc("@info:whatsthis", "<para>To show or "
|
|
|
|
"hide panels like this go to <interface>Control|Panels</interface> "
|
|
|
|
"or <interface>View|Panels</interface>.</para>");
|
2019-06-25 13:26:59 +00:00
|
|
|
#ifdef HAVE_BALOO
|
2019-06-23 19:19:49 +00:00
|
|
|
actionCollection()->action(QStringLiteral("show_information_panel"))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis", "<para> This toggles the "
|
|
|
|
"<emphasis>information</emphasis> panel at the right side of the "
|
|
|
|
"window.</para><para>The panel provides in-depth information "
|
|
|
|
"about the items your mouse is hovering over or about the selected "
|
|
|
|
"items. Otherwise it informs you about the currently viewed folder.<nl/>"
|
|
|
|
"For single items a preview of their contents is provided.</para>"));
|
2019-06-25 13:26:59 +00:00
|
|
|
#endif
|
2019-06-23 19:19:49 +00:00
|
|
|
infoDock->setWhatsThis(xi18nc("@info:whatsthis", "<para>This panel "
|
|
|
|
"provides in-depth information about the items your mouse is "
|
|
|
|
"hovering over or about the selected items. Otherwise it informs "
|
|
|
|
"you about the currently viewed folder.<nl/>For single items a "
|
|
|
|
"preview of their contents is provided.</para><para>You can configure "
|
|
|
|
"which and how details are given here by right-clicking.</para>") + panelWhatsThis);
|
|
|
|
|
2010-12-31 10:59:46 +00:00
|
|
|
// Setup "Folders"
|
|
|
|
DolphinDockWidget* foldersDock = new DolphinDockWidget(i18nc("@title:window", "Folders"));
|
|
|
|
foldersDock->setLocked(lock);
|
2016-03-16 21:17:37 +00:00
|
|
|
foldersDock->setObjectName(QStringLiteral("foldersDock"));
|
2009-01-14 20:14:36 +00:00
|
|
|
foldersDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
|
|
|
FoldersPanel* foldersPanel = new FoldersPanel(foldersDock);
|
2014-11-10 07:45:38 +00:00
|
|
|
foldersPanel->setCustomContextMenuActions({lockLayoutAction});
|
2009-01-14 20:14:36 +00:00
|
|
|
foldersDock->setWidget(foldersPanel);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2010-05-03 17:46:34 +00:00
|
|
|
QAction* foldersAction = foldersDock->toggleViewAction();
|
2016-03-16 21:17:37 +00:00
|
|
|
createPanelAction(QIcon::fromTheme(QStringLiteral("folder")), Qt::Key_F7, foldersAction, QStringLiteral("show_folders_panel"));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2009-01-14 20:14:36 +00:00
|
|
|
addDockWidget(Qt::LeftDockWidgetArea, foldersDock);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(this, &DolphinMainWindow::urlChanged,
|
|
|
|
foldersPanel, &FoldersPanel::setUrl);
|
|
|
|
connect(foldersPanel, &FoldersPanel::folderActivated,
|
|
|
|
this, &DolphinMainWindow::changeUrl);
|
2014-09-15 16:17:30 +00:00
|
|
|
connect(foldersPanel, &FoldersPanel::folderMiddleClicked,
|
2019-02-21 14:45:27 +00:00
|
|
|
this, &DolphinMainWindow::openNewTabAfterCurrentTab);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(foldersPanel, &FoldersPanel::errorMessage,
|
2015-01-24 23:14:37 +00:00
|
|
|
this, &DolphinMainWindow::showErrorMessage);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
actionCollection()->action(QStringLiteral("show_folders_panel"))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis", "This toggles the "
|
|
|
|
"<emphasis>folders</emphasis> panel at the left side of the window."
|
|
|
|
"<nl/><nl/>It shows the folders of the <emphasis>file system"
|
|
|
|
"</emphasis> in a <emphasis>tree view</emphasis>."));
|
|
|
|
foldersDock->setWhatsThis(xi18nc("@info:whatsthis", "<para>This panel "
|
|
|
|
"shows the folders of the <emphasis>file system</emphasis> in a "
|
|
|
|
"<emphasis>tree view</emphasis>.</para><para>Click a folder to go "
|
|
|
|
"there. Click the arrow to the left of a folder to see its subfolders. "
|
|
|
|
"This allows quick switching between any folders.</para>") + panelWhatsThis);
|
|
|
|
|
2010-12-31 10:59:46 +00:00
|
|
|
// Setup "Terminal"
|
2019-01-28 21:38:21 +00:00
|
|
|
#ifdef HAVE_TERMINAL
|
2016-05-26 12:51:23 +00:00
|
|
|
if (KAuthorized::authorize(QStringLiteral("shell_access"))) {
|
2016-05-18 01:06:49 +00:00
|
|
|
DolphinDockWidget* terminalDock = new DolphinDockWidget(i18nc("@title:window Shell terminal", "Terminal"));
|
|
|
|
terminalDock->setLocked(lock);
|
|
|
|
terminalDock->setObjectName(QStringLiteral("terminalDock"));
|
2017-10-12 21:17:51 +00:00
|
|
|
m_terminalPanel = new TerminalPanel(terminalDock);
|
|
|
|
m_terminalPanel->setCustomContextMenuActions({lockLayoutAction});
|
|
|
|
terminalDock->setWidget(m_terminalPanel);
|
2016-05-18 01:06:49 +00:00
|
|
|
|
2017-10-12 21:17:51 +00:00
|
|
|
connect(m_terminalPanel, &TerminalPanel::hideTerminalPanel, terminalDock, &DolphinDockWidget::hide);
|
|
|
|
connect(m_terminalPanel, &TerminalPanel::changeUrl, this, &DolphinMainWindow::slotTerminalDirectoryChanged);
|
2016-05-18 01:06:49 +00:00
|
|
|
connect(terminalDock, &DolphinDockWidget::visibilityChanged,
|
2017-10-12 21:17:51 +00:00
|
|
|
m_terminalPanel, &TerminalPanel::dockVisibilityChanged);
|
2018-01-18 17:49:54 +00:00
|
|
|
connect(terminalDock, &DolphinDockWidget::visibilityChanged,
|
|
|
|
this, &DolphinMainWindow::slotTerminalPanelVisibilityChanged);
|
2016-05-18 01:06:49 +00:00
|
|
|
|
|
|
|
QAction* terminalAction = terminalDock->toggleViewAction();
|
2019-09-05 15:30:06 +00:00
|
|
|
createPanelAction(QIcon::fromTheme(QStringLiteral("dialog-scripts")), Qt::Key_F4, terminalAction, QStringLiteral("show_terminal_panel"));
|
2016-05-18 01:06:49 +00:00
|
|
|
|
|
|
|
addDockWidget(Qt::BottomDockWidgetArea, terminalDock);
|
|
|
|
connect(this, &DolphinMainWindow::urlChanged,
|
2017-10-12 21:17:51 +00:00
|
|
|
m_terminalPanel, &TerminalPanel::setUrl);
|
2016-05-18 01:06:49 +00:00
|
|
|
|
|
|
|
if (GeneralSettings::version() < 200) {
|
|
|
|
terminalDock->hide();
|
|
|
|
}
|
2019-06-23 19:19:49 +00:00
|
|
|
|
|
|
|
actionCollection()->action(QStringLiteral("show_terminal_panel"))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis", "<para>This toggles the "
|
|
|
|
"<emphasis>terminal</emphasis> panel at the bottom of the window."
|
|
|
|
"<nl/>The location in the terminal will always match the folder "
|
|
|
|
"view so you can navigate using either.</para><para>The terminal "
|
|
|
|
"panel is not needed for basic computer usage but can be useful "
|
|
|
|
"for advanced tasks. To learn more about terminals use the help "
|
|
|
|
"in a standalone terminal application like Konsole.</para>"));
|
|
|
|
terminalDock->setWhatsThis(xi18nc("@info:whatsthis", "<para>This is "
|
|
|
|
"the <emphasis>terminal</emphasis> panel. It behaves like a "
|
|
|
|
"normal terminal but will match the location of the folder view "
|
|
|
|
"so you can navigate using either.</para><para>The terminal panel "
|
|
|
|
"is not needed for basic computer usage but can be useful for "
|
|
|
|
"advanced tasks. To learn more about terminals use the help in a "
|
|
|
|
"standalone terminal application like Konsole.</para>") + panelWhatsThis);
|
2016-05-18 01:06:49 +00:00
|
|
|
}
|
2008-03-10 17:33:30 +00:00
|
|
|
#endif
|
2008-03-12 16:58:11 +00:00
|
|
|
|
2011-11-06 10:58:48 +00:00
|
|
|
if (GeneralSettings::version() < 200) {
|
2010-06-16 21:13:41 +00:00
|
|
|
infoDock->hide();
|
2009-01-14 20:14:36 +00:00
|
|
|
foldersDock->hide();
|
2011-08-14 13:30:29 +00:00
|
|
|
}
|
2007-04-01 22:28:03 +00:00
|
|
|
|
2010-12-31 10:59:46 +00:00
|
|
|
// Setup "Places"
|
|
|
|
DolphinDockWidget* placesDock = new DolphinDockWidget(i18nc("@title:window", "Places"));
|
|
|
|
placesDock->setLocked(lock);
|
2016-03-16 21:17:37 +00:00
|
|
|
placesDock->setObjectName(QStringLiteral("placesDock"));
|
2007-04-01 22:28:03 +00:00
|
|
|
placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
|
2008-01-30 22:22:46 +00:00
|
|
|
|
2017-10-12 21:17:51 +00:00
|
|
|
m_placesPanel = new PlacesPanel(placesDock);
|
|
|
|
m_placesPanel->setCustomContextMenuActions({lockLayoutAction});
|
|
|
|
placesDock->setWidget(m_placesPanel);
|
2007-04-14 16:50:51 +00:00
|
|
|
|
2017-10-12 21:17:51 +00:00
|
|
|
QAction *placesAction = placesDock->toggleViewAction();
|
2016-03-16 21:17:37 +00:00
|
|
|
createPanelAction(QIcon::fromTheme(QStringLiteral("bookmarks")), Qt::Key_F9, placesAction, QStringLiteral("show_places_panel"));
|
2007-04-14 16:50:51 +00:00
|
|
|
|
2007-04-01 22:28:03 +00:00
|
|
|
addDockWidget(Qt::LeftDockWidgetArea, placesDock);
|
2017-10-12 21:17:51 +00:00
|
|
|
connect(m_placesPanel, &PlacesPanel::placeActivated,
|
2014-04-10 14:53:41 +00:00
|
|
|
this, &DolphinMainWindow::slotPlaceActivated);
|
2017-10-12 21:17:51 +00:00
|
|
|
connect(m_placesPanel, &PlacesPanel::placeMiddleClicked,
|
2019-02-21 14:45:27 +00:00
|
|
|
this, &DolphinMainWindow::openNewTabAfterCurrentTab);
|
2017-10-12 21:17:51 +00:00
|
|
|
connect(m_placesPanel, &PlacesPanel::errorMessage,
|
2015-01-24 23:14:37 +00:00
|
|
|
this, &DolphinMainWindow::showErrorMessage);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(this, &DolphinMainWindow::urlChanged,
|
2017-10-12 21:17:51 +00:00
|
|
|
m_placesPanel, &PlacesPanel::setUrl);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(placesDock, &DolphinDockWidget::visibilityChanged,
|
2014-08-22 21:17:02 +00:00
|
|
|
m_tabWidget, &DolphinTabWidget::slotPlacesPanelVisibilityChanged);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(this, &DolphinMainWindow::settingsChanged,
|
2017-10-12 21:17:51 +00:00
|
|
|
m_placesPanel, &PlacesPanel::readSettings);
|
|
|
|
connect(m_placesPanel, &PlacesPanel::storageTearDownRequested,
|
|
|
|
this, &DolphinMainWindow::slotStorageTearDownFromPlacesRequested);
|
|
|
|
connect(m_placesPanel, &PlacesPanel::storageTearDownExternallyRequested,
|
|
|
|
this, &DolphinMainWindow::slotStorageTearDownExternallyRequested);
|
|
|
|
m_tabWidget->slotPlacesPanelVisibilityChanged(m_placesPanel->isVisible());
|
2014-08-10 16:52:06 +00:00
|
|
|
|
2019-09-04 15:04:13 +00:00
|
|
|
auto actionShowAllPlaces = new QAction(QIcon::fromTheme(QStringLiteral("view-hidden")), i18nc("@item:inmenu", "Show Hidden Places"), this);
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
actionShowAllPlaces->setCheckable(true);
|
|
|
|
actionShowAllPlaces->setDisabled(true);
|
2019-06-23 19:19:49 +00:00
|
|
|
actionShowAllPlaces->setWhatsThis(i18nc("@info:whatsthis", "This displays "
|
|
|
|
"all places in the places panel that have been hidden. They will "
|
|
|
|
"appear semi-transparent unless you uncheck their hide property."));
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
|
|
|
|
connect(actionShowAllPlaces, &QAction::triggered, this, [actionShowAllPlaces, this](bool checked){
|
2019-09-04 15:04:13 +00:00
|
|
|
actionShowAllPlaces->setIcon(QIcon::fromTheme(checked ? QStringLiteral("view-visible") : QStringLiteral("view-hidden")));
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
m_placesPanel->showHiddenEntries(checked);
|
|
|
|
});
|
|
|
|
|
|
|
|
connect(m_placesPanel, &PlacesPanel::showHiddenEntriesChanged, this, [actionShowAllPlaces] (bool checked){
|
|
|
|
actionShowAllPlaces->setChecked(checked);
|
2019-09-04 15:04:13 +00:00
|
|
|
actionShowAllPlaces->setIcon(QIcon::fromTheme(checked ? QStringLiteral("view-visible") : QStringLiteral("view-hidden")));
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
});
|
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
actionCollection()->action(QStringLiteral("show_places_panel"))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis", "<para>This toggles the "
|
|
|
|
"<emphasis>places</emphasis> panel at the left side of the window."
|
|
|
|
"</para><para>It allows you to go to locations you have "
|
|
|
|
"bookmarked and to access disk or media attached to the computer "
|
|
|
|
"or to the network. It also contains sections to find recently "
|
|
|
|
"saved files or files of a certain type.</para>"));
|
|
|
|
placesDock->setWhatsThis(xi18nc("@info:whatsthis", "<para>This is the "
|
|
|
|
"<emphasis>Places</emphasis> panel. It allows you to go to locations "
|
|
|
|
"you have bookmarked and to access disk or media attached to the "
|
|
|
|
"computer or to the network. It also contains sections to find "
|
|
|
|
"recently saved files or files of a certain type.</para><para>"
|
|
|
|
"Click on an entry to go there. Click with the right mouse button "
|
|
|
|
"instead to open any entry in a new tab or new window.</para>"
|
|
|
|
"<para>New entries can be added by dragging folders onto this panel. "
|
|
|
|
"Right-click any section or entry to hide it. Right-click an empty "
|
|
|
|
"space on this panel and select <interface>Show Hidden Places"
|
|
|
|
"</interface> to display it again.</para>") + panelWhatsThis);
|
|
|
|
|
2010-12-31 10:59:46 +00:00
|
|
|
// Add actions into the "Panels" menu
|
2019-09-14 14:40:06 +00:00
|
|
|
KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu View", "Show Panels"), this);
|
2016-03-16 21:17:37 +00:00
|
|
|
actionCollection()->addAction(QStringLiteral("panels"), panelsMenu);
|
2019-09-14 14:40:06 +00:00
|
|
|
panelsMenu->setIcon(QIcon::fromTheme(QStringLiteral("view-sidetree")));
|
2010-05-03 15:40:24 +00:00
|
|
|
panelsMenu->setDelayed(false);
|
2011-11-21 10:04:45 +00:00
|
|
|
const KActionCollection* ac = actionCollection();
|
2016-03-16 21:17:37 +00:00
|
|
|
panelsMenu->addAction(ac->action(QStringLiteral("show_places_panel")));
|
2018-08-22 21:48:53 +00:00
|
|
|
#ifdef HAVE_BALOO
|
2016-03-16 21:17:37 +00:00
|
|
|
panelsMenu->addAction(ac->action(QStringLiteral("show_information_panel")));
|
2018-08-22 21:48:53 +00:00
|
|
|
#endif
|
2016-03-16 21:17:37 +00:00
|
|
|
panelsMenu->addAction(ac->action(QStringLiteral("show_folders_panel")));
|
|
|
|
panelsMenu->addAction(ac->action(QStringLiteral("show_terminal_panel")));
|
2010-12-31 10:59:46 +00:00
|
|
|
panelsMenu->addSeparator();
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
panelsMenu->addAction(actionShowAllPlaces);
|
2010-12-31 10:59:46 +00:00
|
|
|
panelsMenu->addAction(lockLayoutAction);
|
Improve Ux for the places panel's hidden items
Summary:
BUG: 400860
FIXED-IN: 18.12.0
Clean up the context menu for the places panel.
- Change Text "Show All Entries" -> "Show Hidden Places"
- Use State dependent icon (like hidden files)
- Disable instead of hide if not places are hidden.
- Toggle to unchecked if last item of group is unhidden.
Create a copy of this "Show Hidden Places" entry in the main dolphin menu View->Places.
Test Plan:
With Hidden Places
{F6398756}
{F6398759}
Context Menu:
{F6398762}
{F6398761}
Without Hidden Places.
{F6414694}
{F6414696}
Reviewers: #dolphin, #vdg, elvisangelaccio, ngraham
Reviewed By: #dolphin, #vdg, elvisangelaccio, ngraham
Subscribers: cfeck, elvisangelaccio, veqz, davidc, ngraham, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8349
Differential Revision: https://phabricator.kde.org/D16767
2018-11-11 21:02:08 +00:00
|
|
|
|
|
|
|
connect(panelsMenu->menu(), &QMenu::aboutToShow, this, [actionShowAllPlaces, this]{
|
|
|
|
actionShowAllPlaces->setEnabled(m_placesPanel->hiddenListCount());
|
|
|
|
});
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2019-09-01 21:01:57 +00:00
|
|
|
|
|
|
|
void DolphinMainWindow::updateFileAndEditActions()
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2007-10-02 19:03:03 +00:00
|
|
|
const KFileItemList list = m_activeViewContainer->view()->selectedItems();
|
2019-09-01 21:01:57 +00:00
|
|
|
const KActionCollection* col = actionCollection();
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
KFileItemListProperties capabilitiesSource(list);
|
|
|
|
|
2019-09-01 21:01:57 +00:00
|
|
|
QAction* addToPlacesAction = col->action(QStringLiteral("add_to_places"));
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
QAction* copyToOtherViewAction = col->action(QStringLiteral("copy_to_inactive_split_view"));
|
|
|
|
QAction* moveToOtherViewAction = col->action(QStringLiteral("move_to_inactive_split_view"));
|
2020-06-29 22:27:33 +00:00
|
|
|
QAction* copyLocation = col->action(QString("copy_location"));
|
2019-09-01 21:01:57 +00:00
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
if (list.isEmpty()) {
|
2016-03-16 21:17:37 +00:00
|
|
|
stateChanged(QStringLiteral("has_no_selection"));
|
2019-09-01 21:01:57 +00:00
|
|
|
|
2019-10-20 10:03:10 +00:00
|
|
|
addToPlacesAction->setEnabled(true);
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
copyToOtherViewAction->setEnabled(false);
|
|
|
|
moveToOtherViewAction->setEnabled(false);
|
2020-06-29 22:27:33 +00:00
|
|
|
copyLocation->setEnabled(false);
|
2007-04-09 19:12:54 +00:00
|
|
|
} else {
|
2016-03-16 21:17:37 +00:00
|
|
|
stateChanged(QStringLiteral("has_selection"));
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2018-03-03 13:36:44 +00:00
|
|
|
QAction* renameAction = col->action(KStandardAction::name(KStandardAction::RenameFile));
|
|
|
|
QAction* moveToTrashAction = col->action(KStandardAction::name(KStandardAction::MoveToTrash));
|
|
|
|
QAction* deleteAction = col->action(KStandardAction::name(KStandardAction::DeleteFile));
|
|
|
|
QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut));
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* deleteWithTrashShortcut = col->action(QStringLiteral("delete_shortcut")); // see DolphinViewActionHandler
|
2018-03-18 10:55:24 +00:00
|
|
|
QAction* showTarget = col->action(QStringLiteral("show_target"));
|
Add Duplicate feature
Summary: Adds a Duplicate feature to Dolphin, showing up as a menu item in the File menu that appears when one or more items are selected and the directory is writable. Duplicated items receive the names of the original files with " copy" appended before the file extension, if any.
Test Plan:
{F5201386} {F5201393}
Test cases:
- Try to duplicate when nothing is selected: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only local volume: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only samba share: **PASS**: menu item is grayed out
- Duplicate single local file on R/W volume: **PASS**: item is duplicated and named correctly
- Duplicate multiple local files on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single local directory on R/W volume: **PASS**: item is duplicated and named correctly, but a rename operation is not initiated
- Duplicate multiple local directories on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single file on R/W samba share: **PASS**: item is duplicated and correctly
- Duplicate multiple files on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single directory on R/W samba share: **PASS**: item is duplicated and named correctly
- Duplicate multiple directory on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Try to undo a successful duplication: **PASS**: operation is undone
This is my first attempt at a big change like this and I'm sure it's full of issues. I will accept any and all suggestions for improvement. :)
Reviewers: #dolphin, #kde_applications, elvisangelaccio, dfaure, broulik, davidedmundson
Subscribers: kfm-devel, meven, markg, fazevedo, cfeck, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D8208
2019-12-20 17:07:25 +00:00
|
|
|
QAction* duplicateAction = col->action(QStringLiteral("duplicate")); // see DolphinViewActionHandler
|
2008-06-01 18:44:35 +00:00
|
|
|
|
2019-09-01 21:01:57 +00:00
|
|
|
if (list.length() == 1 && list.first().isDir()) {
|
|
|
|
addToPlacesAction->setEnabled(true);
|
|
|
|
} else {
|
|
|
|
addToPlacesAction->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
if (m_tabWidget->currentTabPage()->splitViewEnabled()) {
|
|
|
|
DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
|
|
|
|
KFileItem capabilitiesDestination;
|
|
|
|
|
|
|
|
if (tabPage->primaryViewActive()) {
|
|
|
|
capabilitiesDestination = tabPage->secondaryViewContainer()->url();
|
|
|
|
} else {
|
|
|
|
capabilitiesDestination = tabPage->primaryViewContainer()->url();
|
|
|
|
}
|
|
|
|
|
|
|
|
copyToOtherViewAction->setEnabled(capabilitiesDestination.isWritable());
|
|
|
|
moveToOtherViewAction->setEnabled(capabilitiesSource.supportsMoving() && capabilitiesDestination.isWritable());
|
|
|
|
} else {
|
|
|
|
copyToOtherViewAction->setEnabled(false);
|
|
|
|
moveToOtherViewAction->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
const bool enableMoveToTrash = capabilitiesSource.isLocal() && capabilitiesSource.supportsMoving();
|
2008-06-01 18:44:35 +00:00
|
|
|
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
renameAction->setEnabled(capabilitiesSource.supportsMoving());
|
2008-06-01 18:44:35 +00:00
|
|
|
moveToTrashAction->setEnabled(enableMoveToTrash);
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
deleteAction->setEnabled(capabilitiesSource.supportsDeleting());
|
|
|
|
deleteWithTrashShortcut->setEnabled(capabilitiesSource.supportsDeleting() && !enableMoveToTrash);
|
|
|
|
cutAction->setEnabled(capabilitiesSource.supportsMoving());
|
2020-06-29 22:27:33 +00:00
|
|
|
copyLocation->setEnabled(list.length() == 1);
|
2018-03-18 10:55:24 +00:00
|
|
|
showTarget->setEnabled(list.length() == 1 && list.at(0).isLink());
|
Allow to copy or move selection to the other split view
Summary:
FEATURE: 276167
Default keyboard shortcuts set to `SHIFT+F5` for `copy`, `SHIFT+F6` for `move`
Reviewers: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Reviewed By: #dolphin, elvisangelaccio, ngraham, meven, dfaure
Subscribers: yurchor, kde-doc-english, dfaure, meven, kfm-devel
Tags: #dolphin, #documentation
Differential Revision: https://phabricator.kde.org/D29006
2020-05-14 22:17:31 +00:00
|
|
|
duplicateAction->setEnabled(capabilitiesSource.supportsWriting());
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateViewActions()
|
|
|
|
{
|
2008-02-11 12:34:48 +00:00
|
|
|
m_actionHandler->updateViewActions();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
|
2007-06-07 21:10:48 +00:00
|
|
|
showFilterBarAction->setChecked(m_activeViewContainer->isFilterBarVisible());
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2007-08-12 17:48:29 +00:00
|
|
|
updateSplitAction();
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* editableLocactionAction = actionCollection()->action(QStringLiteral("editable_location"));
|
2007-06-07 21:10:48 +00:00
|
|
|
const KUrlNavigator* urlNavigator = m_activeViewContainer->urlNavigator();
|
|
|
|
editableLocactionAction->setChecked(urlNavigator->isUrlEditable());
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void DolphinMainWindow::updateGoActions()
|
|
|
|
{
|
2008-01-27 14:54:38 +00:00
|
|
|
QAction* goUpAction = actionCollection()->action(KStandardAction::name(KStandardAction::Up));
|
2014-10-21 19:18:43 +00:00
|
|
|
const QUrl currentUrl = m_activeViewContainer->url();
|
2019-06-23 19:19:49 +00:00
|
|
|
// I think this is one of the best places to firstly be confronted
|
|
|
|
// with a file system and its hierarchy. Talking about the root
|
|
|
|
// directory might seem too much here but it is the question that
|
|
|
|
// naturally arises in this context.
|
|
|
|
goUpAction->setWhatsThis(xi18nc("@info:whatsthis", "<para>Go to "
|
2019-06-24 05:40:39 +00:00
|
|
|
"the folder that contains the currently viewed one.</para>"
|
2019-06-23 19:19:49 +00:00
|
|
|
"<para>All files and folders are organized in a hierarchical "
|
|
|
|
"<emphasis>file system</emphasis>. At the top of this hierarchy is "
|
|
|
|
"a directory that contains all data connected to this computer"
|
|
|
|
"—the <emphasis>root directory</emphasis>.</para>"));
|
2014-10-21 19:18:43 +00:00
|
|
|
goUpAction->setEnabled(KIO::upUrl(currentUrl) != currentUrl);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
void DolphinMainWindow::createControlButton()
|
2011-03-26 22:22:21 +00:00
|
|
|
{
|
2012-04-07 22:09:11 +00:00
|
|
|
if (m_controlButton) {
|
2011-03-26 22:22:21 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-04-07 22:09:11 +00:00
|
|
|
Q_ASSERT(!m_controlButton);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
m_controlButton = new QToolButton(this);
|
2019-11-24 13:56:53 +00:00
|
|
|
m_controlButton->setAccessibleName(i18nc("@action:intoolbar", "Control"));
|
2016-03-16 21:17:37 +00:00
|
|
|
m_controlButton->setIcon(QIcon::fromTheme(QStringLiteral("application-menu")));
|
Change default Dolphin toolbar layout
Summary:
{F7205836}
Use a default toolbar layout that looks better and makes more sense for new users.
Test Plan: Open Dolphin (with the default toolbar)
Reviewers: #dolphin, #vdg, ngraham, GB_2, elvisangelaccio
Reviewed By: #dolphin, #vdg, ngraham, GB_2
Subscribers: iasensio, filipf, meven, elvisangelaccio, felixernst, GB_2, ndavis, ngraham, kfm-devel, #vdg, #dolphin
Tags: #dolphin, #vdg
Differential Revision: https://phabricator.kde.org/D23075
2019-08-25 15:32:49 +00:00
|
|
|
m_controlButton->setToolTip(i18nc("@action", "Show menu"));
|
2019-06-23 19:19:49 +00:00
|
|
|
m_controlButton->setAttribute(Qt::WidgetAttribute::WA_CustomWhatsThis);
|
2012-04-07 22:09:11 +00:00
|
|
|
m_controlButton->setPopupMode(QToolButton::InstantPopup);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
2014-10-10 21:36:36 +00:00
|
|
|
QMenu* controlMenu = new QMenu(m_controlButton);
|
|
|
|
connect(controlMenu, &QMenu::aboutToShow, this, &DolphinMainWindow::updateControlMenu);
|
2019-06-23 19:19:49 +00:00
|
|
|
controlMenu->installEventFilter(this);
|
2011-04-08 17:37:11 +00:00
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
m_controlButton->setMenu(controlMenu);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
toolBar()->addWidget(m_controlButton);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(toolBar(), &KToolBar::iconSizeChanged,
|
|
|
|
m_controlButton, &QToolButton::setIconSize);
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
// The added widgets are owned by the toolbar and may get deleted when e.g. the toolbar
|
|
|
|
// gets edited. In this case we must add them again. The adding is done asynchronously by
|
|
|
|
// m_updateToolBarTimer.
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(m_controlButton, &QToolButton::destroyed, this, &DolphinMainWindow::slotControlButtonDeleted);
|
2011-03-26 22:22:21 +00:00
|
|
|
m_updateToolBarTimer = new QTimer(this);
|
|
|
|
m_updateToolBarTimer->setInterval(500);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(m_updateToolBarTimer, &QTimer::timeout, this, &DolphinMainWindow::updateToolBar);
|
2011-03-26 22:22:21 +00:00
|
|
|
}
|
|
|
|
|
2012-04-07 22:09:11 +00:00
|
|
|
void DolphinMainWindow::deleteControlButton()
|
2011-03-26 22:22:21 +00:00
|
|
|
{
|
2012-04-07 22:09:11 +00:00
|
|
|
delete m_controlButton;
|
2017-11-21 09:52:14 +00:00
|
|
|
m_controlButton = nullptr;
|
2011-03-26 22:22:21 +00:00
|
|
|
|
|
|
|
delete m_updateToolBarTimer;
|
2017-11-21 09:52:14 +00:00
|
|
|
m_updateToolBarTimer = nullptr;
|
2011-03-26 22:22:21 +00:00
|
|
|
}
|
|
|
|
|
2014-10-10 21:36:36 +00:00
|
|
|
bool DolphinMainWindow::addActionToMenu(QAction* action, QMenu* menu)
|
2011-03-26 22:22:21 +00:00
|
|
|
{
|
|
|
|
Q_ASSERT(action);
|
|
|
|
Q_ASSERT(menu);
|
|
|
|
|
|
|
|
const KToolBar* toolBarWidget = toolBar();
|
|
|
|
foreach (const QWidget* widget, action->associatedWidgets()) {
|
|
|
|
if (widget == toolBarWidget) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
menu->addAction(action);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2011-04-15 18:52:27 +00:00
|
|
|
void DolphinMainWindow::refreshViews()
|
|
|
|
{
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->refreshViews();
|
2011-04-15 18:52:27 +00:00
|
|
|
|
2011-11-06 10:58:48 +00:00
|
|
|
if (GeneralSettings::modifiedStartupSettings()) {
|
2011-04-15 18:52:27 +00:00
|
|
|
// The startup settings have been changed by the user (see bug #254947).
|
|
|
|
// Synchronize the split-view setting with the active view:
|
2011-11-06 10:58:48 +00:00
|
|
|
const bool splitView = GeneralSettings::splitView();
|
2014-08-10 16:52:06 +00:00
|
|
|
m_tabWidget->currentTabPage()->setSplitViewEnabled(splitView);
|
2014-07-02 13:30:37 +00:00
|
|
|
updateSplitAction();
|
2018-07-28 15:29:00 +00:00
|
|
|
updateWindowTitle();
|
2011-04-15 18:52:27 +00:00
|
|
|
}
|
2012-09-11 18:09:01 +00:00
|
|
|
|
|
|
|
emit settingsChanged();
|
2011-04-15 18:52:27 +00:00
|
|
|
}
|
|
|
|
|
2007-04-01 18:36:23 +00:00
|
|
|
void DolphinMainWindow::clearStatusBar()
|
|
|
|
{
|
2012-04-12 21:57:51 +00:00
|
|
|
m_activeViewContainer->statusBar()->resetToDefaultText();
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
2008-04-12 15:09:46 +00:00
|
|
|
void DolphinMainWindow::connectViewSignals(DolphinViewContainer* container)
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(container, &DolphinViewContainer::showFilterBarChanged,
|
|
|
|
this, &DolphinMainWindow::updateFilterBarAction);
|
|
|
|
connect(container, &DolphinViewContainer::writeStateChanged,
|
|
|
|
this, &DolphinMainWindow::slotWriteStateChanged);
|
[dolphin] Add an action to toggle the searchbar
Summary:
Make search action toggle the searchbar instead of just launching it.
The search action in dolphin did only bring up the search bar, but to close it again you had to go to the closing button on the same searchbar.
This behavior in inconsistent with other dolphin actions which toggle panels or tools.
BEFORE:
{F7256652}
AFTER:
{F7256862}
BUG: 344617
FIXED-IN: 19.12.0
Closes T8473
Depends on D23075
Test Plan:
- Enable the search mode: the searchbar appears and the toolbar button gets checked
- Press the search button again, and it goes back to normal mode.
- The search button state is coherent with the searchbox
- Coherence is kept when changing to a split view or different tab
- Shorcut <Ctrl-F> does not close the searchbar, but moves the focus to it.
Reviewers: #dolphin, ngraham, #vdg, elvisangelaccio
Reviewed By: ngraham, #vdg
Subscribers: ndavis, felixernst, elvisangelaccio, kfm-devel
Tags: #dolphin
Maniphest Tasks: T8473
Differential Revision: https://phabricator.kde.org/D23232
2019-09-01 19:59:43 +00:00
|
|
|
connect(container, &DolphinViewContainer::searchModeEnabledChanged,
|
|
|
|
this, &DolphinMainWindow::updateSearchAction);
|
|
|
|
|
|
|
|
const QAction* toggleSearchAction = actionCollection()->action(QStringLiteral("toggle_search"));
|
|
|
|
connect(toggleSearchAction, &QAction::triggered, container, &DolphinViewContainer::setSearchModeEnabled);
|
2011-04-20 18:03:51 +00:00
|
|
|
|
2014-07-02 13:30:37 +00:00
|
|
|
const DolphinView* view = container->view();
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(view, &DolphinView::selectionChanged,
|
|
|
|
this, &DolphinMainWindow::slotSelectionChanged);
|
|
|
|
connect(view, &DolphinView::requestItemInfo,
|
2015-01-24 23:42:43 +00:00
|
|
|
this, &DolphinMainWindow::requestItemInfo);
|
2014-09-15 16:17:30 +00:00
|
|
|
connect(view, &DolphinView::tabRequested,
|
|
|
|
this, &DolphinMainWindow::openNewTab);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(view, &DolphinView::requestContextMenu,
|
|
|
|
this, &DolphinMainWindow::openContextMenu);
|
|
|
|
connect(view, &DolphinView::directoryLoadingStarted,
|
|
|
|
this, &DolphinMainWindow::enableStopAction);
|
|
|
|
connect(view, &DolphinView::directoryLoadingCompleted,
|
|
|
|
this, &DolphinMainWindow::disableStopAction);
|
2014-11-02 14:34:30 +00:00
|
|
|
connect(view, &DolphinView::directoryLoadingCompleted,
|
|
|
|
this, &DolphinMainWindow::slotDirectoryLoadingCompleted);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(view, &DolphinView::goBackRequested,
|
2019-05-05 15:20:44 +00:00
|
|
|
this, &DolphinMainWindow::goBack);
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(view, &DolphinView::goForwardRequested,
|
2019-05-05 15:20:44 +00:00
|
|
|
this, &DolphinMainWindow::goForward);
|
2017-04-29 16:47:13 +00:00
|
|
|
connect(view, &DolphinView::urlActivated,
|
|
|
|
this, &DolphinMainWindow::handleUrl);
|
2007-04-01 18:36:23 +00:00
|
|
|
|
2007-06-07 21:10:48 +00:00
|
|
|
const KUrlNavigator* navigator = container->urlNavigator();
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(navigator, &KUrlNavigator::urlChanged,
|
|
|
|
this, &DolphinMainWindow::changeUrl);
|
|
|
|
connect(navigator, &KUrlNavigator::historyChanged,
|
|
|
|
this, &DolphinMainWindow::updateHistory);
|
|
|
|
connect(navigator, &KUrlNavigator::editableStateChanged,
|
|
|
|
this, &DolphinMainWindow::slotEditableStateChanged);
|
2014-09-15 16:17:30 +00:00
|
|
|
connect(navigator, &KUrlNavigator::tabRequested,
|
2019-02-21 14:45:27 +00:00
|
|
|
this, &DolphinMainWindow::openNewTabAfterLastTab);
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
2007-04-12 17:37:53 +00:00
|
|
|
|
2007-08-12 17:48:29 +00:00
|
|
|
void DolphinMainWindow::updateSplitAction()
|
2007-06-03 14:07:45 +00:00
|
|
|
{
|
2016-03-16 21:17:37 +00:00
|
|
|
QAction* splitAction = actionCollection()->action(QStringLiteral("split_view"));
|
2014-08-10 16:52:06 +00:00
|
|
|
const DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
|
2014-07-02 13:30:37 +00:00
|
|
|
if (tabPage->splitViewEnabled()) {
|
2019-02-16 15:08:12 +00:00
|
|
|
if (GeneralSettings::closeActiveSplitView() ? tabPage->primaryViewActive() : !tabPage->primaryViewActive()) {
|
2007-08-25 09:54:31 +00:00
|
|
|
splitAction->setText(i18nc("@action:intoolbar Close left view", "Close"));
|
2009-11-06 18:02:55 +00:00
|
|
|
splitAction->setToolTip(i18nc("@info", "Close left view"));
|
2016-03-16 21:17:37 +00:00
|
|
|
splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-left-close")));
|
2014-07-02 13:30:37 +00:00
|
|
|
} else {
|
|
|
|
splitAction->setText(i18nc("@action:intoolbar Close right view", "Close"));
|
|
|
|
splitAction->setToolTip(i18nc("@info", "Close right view"));
|
2016-03-16 21:17:37 +00:00
|
|
|
splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-close")));
|
2007-08-12 17:48:29 +00:00
|
|
|
}
|
2007-06-03 14:07:45 +00:00
|
|
|
} else {
|
2007-06-30 20:10:50 +00:00
|
|
|
splitAction->setText(i18nc("@action:intoolbar Split view", "Split"));
|
2009-11-06 18:02:55 +00:00
|
|
|
splitAction->setToolTip(i18nc("@info", "Split view"));
|
2016-03-16 21:17:37 +00:00
|
|
|
splitAction->setIcon(QIcon::fromTheme(QStringLiteral("view-right-new")));
|
2007-06-03 14:07:45 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-06-28 18:42:51 +00:00
|
|
|
bool DolphinMainWindow::isKompareInstalled() const
|
|
|
|
{
|
|
|
|
static bool initialized = false;
|
|
|
|
static bool installed = false;
|
|
|
|
if (!initialized) {
|
|
|
|
// TODO: maybe replace this approach later by using a menu
|
|
|
|
// plugin like kdiff3plugin.cpp
|
2014-10-01 10:34:49 +00:00
|
|
|
installed = !QStandardPaths::findExecutable(QStringLiteral("kompare")).isEmpty();
|
2008-06-28 18:42:51 +00:00
|
|
|
initialized = true;
|
|
|
|
}
|
|
|
|
return installed;
|
|
|
|
}
|
|
|
|
|
2014-04-10 22:48:52 +00:00
|
|
|
void DolphinMainWindow::createPanelAction(const QIcon& icon,
|
2011-10-10 20:05:32 +00:00
|
|
|
const QKeySequence& shortcut,
|
|
|
|
QAction* dockAction,
|
|
|
|
const QString& actionName)
|
2010-12-19 12:48:24 +00:00
|
|
|
{
|
2014-04-06 01:32:55 +00:00
|
|
|
QAction* panelAction = actionCollection()->addAction(actionName);
|
2011-11-21 10:04:45 +00:00
|
|
|
panelAction->setCheckable(true);
|
|
|
|
panelAction->setChecked(dockAction->isChecked());
|
2011-10-10 20:05:32 +00:00
|
|
|
panelAction->setText(dockAction->text());
|
|
|
|
panelAction->setIcon(icon);
|
2014-09-14 20:49:25 +00:00
|
|
|
actionCollection()->setDefaultShortcut(panelAction, shortcut);
|
2011-10-10 20:05:32 +00:00
|
|
|
|
2014-04-10 14:53:41 +00:00
|
|
|
connect(panelAction, &QAction::triggered, dockAction, &QAction::trigger);
|
|
|
|
connect(dockAction, &QAction::toggled, panelAction, &QAction::setChecked);
|
2010-12-19 12:48:24 +00:00
|
|
|
}
|
|
|
|
|
2019-06-23 19:19:49 +00:00
|
|
|
void DolphinMainWindow::setupWhatsThis()
|
|
|
|
{
|
|
|
|
// main widgets
|
|
|
|
menuBar()->setWhatsThis(xi18nc("@info:whatsthis", "<para>This is the "
|
|
|
|
"<emphasis>Menubar</emphasis>. It provides access to commands and "
|
|
|
|
"configuration options. Left-click on any of the menus on this "
|
|
|
|
"bar to see its contents.</para><para>The Menubar can be hidden "
|
|
|
|
"by unchecking <interface>Settings|Show Menubar</interface>. Then "
|
|
|
|
"most of its contents become available through a <interface>Control"
|
|
|
|
"</interface> button on the <emphasis>Toolbar</emphasis>.</para>"));
|
|
|
|
toolBar()->setWhatsThis(xi18nc("@info:whatsthis", "<para>This is the "
|
|
|
|
"<emphasis>Toolbar</emphasis>. It allows quick access to "
|
|
|
|
"frequently used actions.</para><para>It is highly customizable. "
|
|
|
|
"All items you see in the <interface>Control</interface> menu or "
|
|
|
|
"in the <interface>Menubar</interface> can be placed on the "
|
|
|
|
"Toolbar. Just right-click on it and select <interface>Configure "
|
|
|
|
"Toolbars…</interface> or find this action in the <interface>"
|
|
|
|
"Control</interface> or <interface>Settings</interface> menu."
|
|
|
|
"</para><para>The location of the bar and the style of its "
|
|
|
|
"buttons can also be changed in the right-click menu. Right-click "
|
|
|
|
"a button if you want to show or hide its text.</para>"));
|
|
|
|
m_tabWidget->setWhatsThis(xi18nc("@info:whatsthis main view",
|
|
|
|
"<para>Here you can see the <emphasis>folders</emphasis> and "
|
|
|
|
"<emphasis>files</emphasis> that are at the location described in "
|
|
|
|
"the <interface>Location Bar</interface> above. This area is the "
|
|
|
|
"central part of this application where you navigate to the files "
|
|
|
|
"you want to use.</para><para>For an elaborate and general "
|
|
|
|
"introduction to this application <link "
|
|
|
|
"url='https://userbase.kde.org/Dolphin/File_Management#Introduction_to_Dolphin'>"
|
|
|
|
"click here</link>. This will open an introductory article from "
|
|
|
|
"the <emphasis>KDE UserBase Wiki</emphasis>.</para><para>For brief "
|
|
|
|
"explanations of all the features of this <emphasis>view</emphasis> "
|
|
|
|
"<link url='help:/dolphin/dolphin-view.html'>click here</link> "
|
|
|
|
"instead. This will open a page from the <emphasis>Handbook"
|
|
|
|
"</emphasis> that covers the basics.</para>"));
|
|
|
|
|
|
|
|
// Settings menu
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::KeyBindings))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis","<para>This opens a window "
|
|
|
|
"that lists the <emphasis>keyboard shortcuts</emphasis>.<nl/>"
|
|
|
|
"There you can set up key combinations to trigger an action when "
|
|
|
|
"they are pressed simultaneously. All commands in this application can "
|
|
|
|
"be triggered this way.</para>"));
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::ConfigureToolbars))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis","<para>This opens a window in which "
|
|
|
|
"you can change which buttons appear on the <emphasis>Toolbar</emphasis>.</para>"
|
|
|
|
"<para>All items you see in the <interface>Control</interface> menu "
|
|
|
|
"or in the <interface>Menubar</interface> can also be placed on the Toolbar.</para>"));
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::Preferences))
|
|
|
|
->setWhatsThis(xi18nc("@info:whatsthis","This opens a window where you can "
|
|
|
|
"change a multitude of settings for this application. For an explanation "
|
|
|
|
"of the various settings go to the chapter <emphasis>Configuring Dolphin"
|
|
|
|
"</emphasis> in <interface>Help|Dolphin Handbook</interface>."));
|
|
|
|
|
|
|
|
// Help menu
|
|
|
|
// The whatsthis has to be set for the m_helpMenu and for the
|
|
|
|
// StandardAction separately because both are used in different locations.
|
|
|
|
// m_helpMenu is only used for createControlButton() button.
|
|
|
|
|
|
|
|
// Links do not work within the Menubar so texts without links are provided there.
|
|
|
|
|
|
|
|
// i18n: If the external link isn't available in your language you should
|
|
|
|
// probably state the external link language at least in brackets to not
|
|
|
|
// frustrate the user. If there are multiple languages that the user might
|
|
|
|
// know with a reasonable chance you might want to have 2 external links.
|
|
|
|
// The same is in my opinion true for every external link you translate.
|
|
|
|
const QString whatsThisHelpContents = xi18nc("@info:whatsthis handbook",
|
|
|
|
"<para>This opens the Handbook for this application. It provides "
|
|
|
|
"explanations for every part of <emphasis>Dolphin</emphasis>.</para>");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::HelpContents))
|
|
|
|
->setWhatsThis(whatsThisHelpContents
|
|
|
|
+ xi18nc("@info:whatsthis second half of handbook hb text without link",
|
|
|
|
"<para>If you want more elaborate introductions to the "
|
|
|
|
"different features of <emphasis>Dolphin</emphasis> "
|
|
|
|
"go to the KDE UserBase Wiki.</para>"));
|
|
|
|
m_helpMenu->action(KHelpMenu::menuHelpContents)->setWhatsThis(whatsThisHelpContents
|
|
|
|
+ xi18nc("@info:whatsthis second half of handbook text with link",
|
|
|
|
"<para>If you want more elaborate introductions to the "
|
|
|
|
"different features of <emphasis>Dolphin</emphasis> "
|
|
|
|
"<link url='https://userbase.kde.org/Dolphin/File_Management'>click here</link>. "
|
|
|
|
"It will open the dedicated page in the KDE UserBase Wiki.</para>"));
|
|
|
|
|
|
|
|
const QString whatsThisWhatsThis = xi18nc("@info:whatsthis whatsthis button",
|
|
|
|
"<para>This is the button that invokes the help feature you are "
|
|
|
|
"using right now! Click it, then click any component of this "
|
|
|
|
"application to ask \"What's this?\" about it. The mouse cursor "
|
|
|
|
"will change appearance if no help is available for a spot.</para>");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::WhatsThis))
|
|
|
|
->setWhatsThis(whatsThisWhatsThis
|
|
|
|
+ xi18nc("@info:whatsthis second half of whatsthis button text without link",
|
|
|
|
"<para>There are two other ways to get help for this application: The "
|
|
|
|
"<interface>Dolphin Handbook</interface> in the <interface>Help"
|
|
|
|
"</interface> menu and the <emphasis>KDE UserBase Wiki</emphasis> "
|
|
|
|
"article about <emphasis>File Management</emphasis> online."
|
|
|
|
"</para><para>The \"What's this?\" help is "
|
|
|
|
"missing in most other windows so don't get too used to this.</para>"));
|
|
|
|
m_helpMenu->action(KHelpMenu::menuWhatsThis)->setWhatsThis(whatsThisWhatsThis
|
|
|
|
+ xi18nc("@info:whatsthis second half of whatsthis button text with link",
|
|
|
|
"<para>There are two other ways to get help: "
|
|
|
|
"The <link url='help:/dolphin/index.html'>Dolphin Handbook</link> and "
|
|
|
|
"the <link url='https://userbase.kde.org/Dolphin/File_Management'>KDE "
|
|
|
|
"UserBase Wiki</link>.</para><para>The \"What's this?\" help is "
|
|
|
|
"missing in most other windows so don't get too used to this.</para>"));
|
|
|
|
|
|
|
|
const QString whatsThisReportBug = xi18nc("@info:whatsthis","<para>This opens a "
|
|
|
|
"window that will guide you through reporting errors or flaws "
|
|
|
|
"in this application or in other KDE software.</para>");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::ReportBug))
|
|
|
|
->setWhatsThis(whatsThisReportBug);
|
|
|
|
m_helpMenu->action(KHelpMenu::menuReportBug)->setWhatsThis(whatsThisReportBug
|
|
|
|
+ xi18nc("@info:whatsthis second half of reportbug text with link",
|
|
|
|
"<para>High-quality bug reports are much appreciated. To learn "
|
|
|
|
"how to make your bug report as effective as possible "
|
|
|
|
"<link url='https://community.kde.org/Get_Involved/Bug_Reporting'>"
|
|
|
|
"click here</link>.</para>"));
|
|
|
|
|
|
|
|
const QString whatsThisDonate = xi18nc("@info:whatsthis","<para>This opens a "
|
|
|
|
"<emphasis>web page</emphasis> where you can donate to "
|
|
|
|
"support the continued work on this application and many "
|
|
|
|
"other projects by the <emphasis>KDE</emphasis> community.</para>"
|
|
|
|
"<para>Donating is the easiest and fastest way to efficiently "
|
|
|
|
"support KDE and its projects. KDE projects are available for "
|
|
|
|
"free therefore your donation is needed to cover things that "
|
|
|
|
"require money like servers, contributor meetings, etc.</para>"
|
|
|
|
"<para><emphasis>KDE e.V.</emphasis> is the non-profit "
|
|
|
|
"organization behind the KDE community.</para>");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::Donate))
|
|
|
|
->setWhatsThis(whatsThisDonate);
|
|
|
|
m_helpMenu->action(KHelpMenu::menuDonate)->setWhatsThis(whatsThisDonate);
|
|
|
|
|
|
|
|
const QString whatsThisSwitchLanguage = xi18nc("@info:whatsthis",
|
|
|
|
"With this you can change the language this application uses."
|
|
|
|
"<nl/>You can even set secondary languages which will be used "
|
|
|
|
"if texts are not available in your preferred language.");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::SwitchApplicationLanguage))
|
|
|
|
->setWhatsThis(whatsThisSwitchLanguage);
|
|
|
|
m_helpMenu->action(KHelpMenu::menuSwitchLanguage)->setWhatsThis(whatsThisSwitchLanguage);
|
|
|
|
|
|
|
|
const QString whatsThisAboutApp = xi18nc("@info:whatsthis","This opens a "
|
|
|
|
"window that informs you about the version, license, "
|
|
|
|
"used libraries and maintainers of this application.");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::AboutApp))
|
|
|
|
->setWhatsThis(whatsThisAboutApp);
|
|
|
|
m_helpMenu->action(KHelpMenu::menuAboutApp)->setWhatsThis(whatsThisAboutApp);
|
|
|
|
|
|
|
|
const QString whatsThisAboutKDE = xi18nc("@info:whatsthis","This opens a "
|
|
|
|
"window with information about <emphasis>KDE</emphasis>. "
|
|
|
|
"The KDE community are the people behind this free software."
|
|
|
|
"<nl/>If you like using this application but don't know "
|
|
|
|
"about KDE or want to see a cute dragon have a look!");
|
|
|
|
actionCollection()->action(KStandardAction::name(KStandardAction::AboutKDE))
|
|
|
|
->setWhatsThis(whatsThisAboutKDE);
|
|
|
|
m_helpMenu->action(KHelpMenu::menuAboutKDE)->setWhatsThis(whatsThisAboutKDE);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool DolphinMainWindow::event(QEvent *event)
|
|
|
|
{
|
|
|
|
if (event->type() == QEvent::WhatsThisClicked) {
|
|
|
|
event->accept();
|
|
|
|
QWhatsThisClickedEvent* whatsThisEvent = dynamic_cast<QWhatsThisClickedEvent*>(event);
|
|
|
|
QDesktopServices::openUrl(QUrl(whatsThisEvent->href()));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return KXmlGuiWindow::event(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
bool DolphinMainWindow::eventFilter(QObject* obj, QEvent* event)
|
|
|
|
{
|
|
|
|
Q_UNUSED(obj)
|
|
|
|
if (event->type() == QEvent::WhatsThisClicked) {
|
|
|
|
event->accept();
|
|
|
|
QWhatsThisClickedEvent* whatsThisEvent = dynamic_cast<QWhatsThisClickedEvent*>(event);
|
|
|
|
QDesktopServices::openUrl(QUrl(whatsThisEvent->href()));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
Add action for focusing Terminal Panel
Summary:
Add an action for focusing and de-focusing the Terminal Panel.
FEATURE: 185096
FIXED-IN 20.04.0
Test Plan:
- Hit {key Ctrl Shift F4} or click {nav Tools > Focus Terminal Panel} or {nav Control > Tools > Focus Terminal Panel}
- If the Terminal Panel was closed, it opens and gains focus
- If the Terminal Panel was open but unfocused, it gains focus
- If the Terminal Panel was open and focused, focus returns to the view
{F6630289, size=full}
Reviewers: #dolphin, elvisangelaccio, rominf
Reviewed By: #dolphin, elvisangelaccio, rominf
Subscribers: kfm-devel, elvisangelaccio, rkflx, ngraham, #dolphin
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D10959
2019-03-20 22:06:28 +00:00
|
|
|
void DolphinMainWindow::focusTerminalPanel()
|
|
|
|
{
|
|
|
|
if (m_terminalPanel->isVisible()) {
|
|
|
|
if (m_terminalPanel->terminalHasFocus()) {
|
|
|
|
m_activeViewContainer->view()->setFocus(Qt::FocusReason::ShortcutFocusReason);
|
|
|
|
actionCollection()->action(QStringLiteral("focus_terminal_panel"))->setText(i18nc("@action:inmenu Tools", "Focus Terminal Panel"));
|
|
|
|
} else {
|
|
|
|
m_terminalPanel->setFocus(Qt::FocusReason::ShortcutFocusReason);
|
|
|
|
actionCollection()->action(QStringLiteral("focus_terminal_panel"))->setText(i18nc("@action:inmenu Tools", "Defocus Terminal Panel"));
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
actionCollection()->action(QStringLiteral("show_terminal_panel"))->trigger();
|
|
|
|
actionCollection()->action(QStringLiteral("focus_terminal_panel"))->setText(i18nc("@action:inmenu Tools", "Defocus Terminal Panel"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2008-04-20 22:07:44 +00:00
|
|
|
DolphinMainWindow::UndoUiInterface::UndoUiInterface() :
|
2008-04-30 23:32:33 +00:00
|
|
|
KIO::FileUndoManager::UiInterface()
|
2007-04-01 18:36:23 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
DolphinMainWindow::UndoUiInterface::~UndoUiInterface()
|
2007-04-12 17:37:53 +00:00
|
|
|
{
|
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
|
|
|
|
void DolphinMainWindow::UndoUiInterface::jobError(KIO::Job* job)
|
|
|
|
{
|
2008-04-20 22:07:44 +00:00
|
|
|
DolphinMainWindow* mainWin= qobject_cast<DolphinMainWindow *>(parentWidget());
|
|
|
|
if (mainWin) {
|
2012-04-12 21:57:51 +00:00
|
|
|
DolphinViewContainer* container = mainWin->activeViewContainer();
|
|
|
|
container->showMessage(job->errorString(), DolphinViewContainer::Error);
|
2008-04-20 22:07:44 +00:00
|
|
|
} else {
|
2008-04-30 23:32:33 +00:00
|
|
|
KIO::FileUndoManager::UiInterface::jobError(job);
|
2008-04-20 22:07:44 +00:00
|
|
|
}
|
2007-04-01 18:36:23 +00:00
|
|
|
}
|
|
|
|
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
bool DolphinMainWindow::isUrlOpen(const QString& url)
|
|
|
|
{
|
2019-09-10 23:09:30 +00:00
|
|
|
return m_tabWidget->isUrlOpen(QUrl::fromUserInput((url)));
|
Open externally called files/directories in new tabs
Summary:
FEATURE: 183429
FIXED-IN: 19.08.0
GUI: new cli argument --new-window
Externally called files/directories are opened in a a new tab of an instance of Dolphin that already exists. If any of the given URIs are already open in a tab, then those tabs are activated instead of a new tab being opened. If there is no instance then the files/directories are opened in a new window. The newly opened file/directory has its tab activated, and consequently, the window is also activated.
When the user clicks "Open In New Window" or "Detach Tab", the files/directories are opened in a new window.
Test Plan:
[Manual]
Before testing, set the default file manager in system settings as the newly built Dolphin executable.
One must also include the new dolphin executable in the $PATH, otherwise some functions will attempt to open the system dolphin instead of the new one.
Furthermore, running two different versions of Dolphin (in particular, where one does not have this patch included) can result in bugs appearing, in particular, new tabs not opening as old instances will not recognise the DBus commands sent to it. However, I see no reason why a user will have two different versions of Dolphin (apart from people like us :D).
Open directories with the help of auxillary programs (i.e. a browser). The files/directories should appear in a new window if an instance does not exist. If an existence already exists, then a new tab should be opened and activated in that instance and the window activated.
Use QDBusViewer to open folders/items by calling the ShowFolders/ShowItems methods in org.freedesktop.FileManager1 of the Dolphin instance.
When a user chooses to "Open In New Window"/"Detach Tab" then the files/directories should be opened in a new window.
Reviewers: #dolphin, elvisangelaccio
Subscribers: zzag, dfaure, fvogt, fikrim, magar, fbg13, davidedmundson, kwin, ngraham, elvisangelaccio, anthonyfieroni, kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D16648
2019-05-30 20:22:43 +00:00
|
|
|
}
|
|
|
|
|