X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/86df5ae994e96483559020befd96b838aee4d3ee..73ff57bef44984643bf1ffdb9a478095cfb78dfb:/src/dolphinmainwindow.cpp diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 589c2c185..24da84132 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -9,7 +9,6 @@ #include "dolphinmainwindow.h" #include "dolphinmainwindowadaptor.h" -#include "config-terminal.h" #include "global.h" #include "dolphinbookmarkhandler.h" #include "dolphindockwidget.h" @@ -49,7 +48,7 @@ #include #include #include -#include +#include #include #include #include @@ -86,8 +85,10 @@ namespace { // Used for GeneralSettings::version() to determine whether - // an updated version of Dolphin is running. - const int CurrentDolphinVersion = 201; + // an updated version of Dolphin is running, so as to migrate + // removed/renamed ...etc config entries; increment it in such + // cases + const int CurrentDolphinVersion = 202; // The maximum number of entries in the back/forward popup menu const int MaxNumberOfNavigationentries = 12; // The maximum number of "Activate Tab" shortcuts @@ -265,7 +266,7 @@ bool DolphinMainWindow::isFoldersPanelEnabled() const bool DolphinMainWindow::isInformationPanelEnabled() const { -#ifdef HAVE_BALOO +#if HAVE_BALOO return actionCollection()->action(QStringLiteral("show_information_panel"))->isChecked(); #else return false; @@ -284,6 +285,11 @@ void DolphinMainWindow::activateWindow() KWindowSystem::activateWindow(window()->effectiveWinId()); } +bool DolphinMainWindow::isActiveWindow() +{ + return window()->isActiveWindow(); +} + void DolphinMainWindow::showCommand(CommandType command) { DolphinStatusBar* statusBar = m_activeViewContainer->statusBar(); @@ -1087,8 +1093,45 @@ void DolphinMainWindow::openPreferredSearchTool() void DolphinMainWindow::openTerminal() { - const QUrl url = m_activeViewContainer->url(); + openTerminalJob(m_activeViewContainer->url()); +} + +void DolphinMainWindow::openTerminalHere() +{ + QList urls = {}; + + for (const KFileItem& item : m_activeViewContainer->view()->selectedItems()) { + QUrl url = item.targetUrl(); + if (item.isFile()) { + url.setPath(QFileInfo(url.path()).absolutePath()); + } + if (!urls.contains(url)) { + urls << url; + } + } + + // No items are selected. Open a terminal window for the current location. + if (urls.count() == 0) { + openTerminal(); + return; + } + + if (urls.count() > 5) { + QString question = i18np("Are you sure you want to open 1 terminal window?", + "Are you sure you want to open %1 terminal windows?", urls.count()); + const int answer = KMessageBox::warningYesNo(this, question); + if (answer != KMessageBox::Yes) { + return; + } + } + + for (const QUrl& url : urls) { + openTerminalJob(url); + } +} +void DolphinMainWindow::openTerminalJob(const QUrl& url) +{ if (url.isLocalFile()) { auto job = new KTerminalLauncherJob(QString()); job->setWorkingDirectory(url.toLocalFile()); @@ -1721,7 +1764,17 @@ void DolphinMainWindow::setupActions() actionCollection()->setDefaultShortcut(openTerminal, Qt::SHIFT | Qt::Key_F4); connect(openTerminal, &QAction::triggered, this, &DolphinMainWindow::openTerminal); -#ifdef HAVE_TERMINAL + QAction* openTerminalHere = actionCollection()->addAction(QStringLiteral("open_terminal_here")); + // i18n: "Here" refers to the location(s) of the currently selected item(s) or the currently viewed location if nothing is selected. + openTerminalHere->setText(i18nc("@action:inmenu Tools", "Open Terminal Here")); + openTerminalHere->setWhatsThis(xi18nc("@info:whatsthis", + "This opens terminal applications for the selected items' locations." + "To learn more about terminals use the help in the terminal application.")); + openTerminalHere->setIcon(QIcon::fromTheme(QStringLiteral("utilities-terminal"))); + actionCollection()->setDefaultShortcut(openTerminalHere, Qt::SHIFT | Qt::ALT | Qt::Key_F4); + connect(openTerminalHere, &QAction::triggered, this, &DolphinMainWindow::openTerminalHere); + +#if HAVE_TERMINAL QAction* focusTerminalPanel = actionCollection()->addAction(QStringLiteral("focus_terminal_panel")); focusTerminalPanel->setText(i18nc("@action:inmenu Tools", "Focus Terminal Panel")); focusTerminalPanel->setIcon(QIcon::fromTheme(QStringLiteral("swap-panels"))); @@ -1848,7 +1901,7 @@ void DolphinMainWindow::setupDockWidgets() infoDock->setObjectName(QStringLiteral("infoDock")); infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); -#ifdef HAVE_BALOO +#if HAVE_BALOO InformationPanel* infoPanel = new InformationPanel(infoDock); infoPanel->setCustomContextMenuActions({lockLayoutAction}); connect(infoPanel, &InformationPanel::urlActivated, this, &DolphinMainWindow::handleUrl); @@ -1872,7 +1925,7 @@ void DolphinMainWindow::setupDockWidgets() const QString panelWhatsThis = xi18nc("@info:whatsthis", "To show or " "hide panels like this go to Control|Panels " "or View|Panels."); -#ifdef HAVE_BALOO +#if HAVE_BALOO actionCollection()->action(QStringLiteral("show_information_panel")) ->setWhatsThis(xi18nc("@info:whatsthis", " This toggles the " "information panel at the right side of the " @@ -1924,7 +1977,7 @@ void DolphinMainWindow::setupDockWidgets() "This allows quick switching between any folders.") + panelWhatsThis); // Setup "Terminal" -#ifdef HAVE_TERMINAL +#if HAVE_TERMINAL if (KAuthorized::authorize(QStringLiteral("shell_access"))) { DolphinDockWidget* terminalDock = new DolphinDockWidget(i18nc("@title:window Shell terminal", "Terminal")); terminalDock->setLocked(lock); @@ -2049,7 +2102,7 @@ void DolphinMainWindow::setupDockWidgets() panelsMenu->setPopupMode(QToolButton::InstantPopup); const KActionCollection* ac = actionCollection(); panelsMenu->addAction(ac->action(QStringLiteral("show_places_panel"))); -#ifdef HAVE_BALOO +#if HAVE_BALOO panelsMenu->addAction(ac->action(QStringLiteral("show_information_panel"))); #endif panelsMenu->addAction(ac->action(QStringLiteral("show_folders_panel"))); @@ -2574,8 +2627,12 @@ void DolphinMainWindow::UndoUiInterface::jobError(KIO::Job* job) } } -bool DolphinMainWindow::isUrlOpen(const QString& url) +bool DolphinMainWindow::isUrlOpen(const QString &url) { - return m_tabWidget->isUrlOpen(QUrl::fromUserInput((url))); + return m_tabWidget->isUrlOpen(QUrl::fromUserInput(url)); } +bool DolphinMainWindow::isUrlOrParentOpen(const QString &url) +{ + return m_tabWidget->isUrlOrParentOpen(QUrl::fromUserInput(url)); +}