]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge branch 'release/20.12'
authorNate Graham <pointedstick@zoho.com>
Mon, 25 Jan 2021 17:25:51 +0000 (10:25 -0700)
committerNate Graham <pointedstick@zoho.com>
Mon, 25 Jan 2021 17:25:51 +0000 (10:25 -0700)
1  2 
src/dolphinmainwindow.cpp

index 8816164801808ce19007ccbc2b85a394ddb0f6c1,71d3ca03339f405c9b874d684c0e0d5aa2263576..bbb809cceca42072ada8c8d830f508a3aceb672c
@@@ -134,9 -134,10 +134,9 @@@ DolphinMainWindow::DolphinMainWindow() 
      connect(undoManager, &KIO::FileUndoManager::jobRecordingFinished,
              this, &DolphinMainWindow::showCommand);
  
 -    GeneralSettings* generalSettings = GeneralSettings::self();
 -    const bool firstRun = (generalSettings->version() < 200);
 +    const bool firstRun = (GeneralSettings::version() < 200);
      if (firstRun) {
 -        generalSettings->setViewPropsTimestamp(QDateTime::currentDateTime());
 +        GeneralSettings::setViewPropsTimestamp(QDateTime::currentDateTime());
      }
  
      setAcceptDrops(true);
      connect(clipboard, &QClipboard::dataChanged,
              this, &DolphinMainWindow::updatePasteAction);
  
 -    QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
 -    showFilterBarAction->setChecked(generalSettings->filterBar());
 +    QAction* toggleFilterBarAction = actionCollection()->action(QStringLiteral("toggle_filter"));
 +    toggleFilterBarAction->setChecked(GeneralSettings::filterBar());
  
      if (firstRun) {
          menuBar()->setVisible(false);
@@@ -257,7 -258,11 +257,11 @@@ bool DolphinMainWindow::isFoldersPanelE
  
  bool DolphinMainWindow::isInformationPanelEnabled() const
  {
+ #ifdef HAVE_BALOO
      return actionCollection()->action(QStringLiteral("show_information_panel"))->isChecked();
+ #else
+     return false;
+ #endif
  }
  
  void DolphinMainWindow::openFiles(const QStringList& files, bool splitView)
@@@ -382,8 -387,8 +386,8 @@@ void DolphinMainWindow::updateHistory(
  
  void DolphinMainWindow::updateFilterBarAction(bool show)
  {
 -    QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
 -    showFilterBarAction->setChecked(show);
 +    QAction* toggleFilterBarAction = actionCollection()->action(QStringLiteral("toggle_filter"));
 +    toggleFilterBarAction->setChecked(show);
  }
  
  void DolphinMainWindow::openNewMainWindow()
  
  void DolphinMainWindow::openNewActivatedTab()
  {
 +    // keep browsers compatibility, new tab is always after last one
 +    auto openNewTabAfterLastTabConfigured = GeneralSettings::openNewTabAfterLastTab();
 +    GeneralSettings::setOpenNewTabAfterLastTab(true);
      m_tabWidget->openNewActivatedTab();
 +    GeneralSettings::setOpenNewTabAfterLastTab(openNewTabAfterLastTabConfigured);
  }
  
  void DolphinMainWindow::addToPlaces()
      }
  }
  
 -void DolphinMainWindow::openNewTab(const QUrl& url, DolphinTabWidget::TabPlacement tabPlacement)
 +void DolphinMainWindow::openNewTab(const QUrl& url)
  {
 -    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);
 +    m_tabWidget->openNewTab(url, QUrl());
  }
  
  void DolphinMainWindow::openInNewTab()
      for (const KFileItem& item : list) {
          const QUrl& url = DolphinView::openItemAsFolderUrl(item);
          if (!url.isEmpty()) {
 -            openNewTabAfterCurrentTab(url);
 +            openNewTab(url);
              tabCreated = true;
          }
      }
      // if no new tab has been created from the selection
      // open the current directory in a new tab
      if (!tabCreated) {
 -        openNewTabAfterCurrentTab(m_activeViewContainer->url());
 +        openNewTab(m_activeViewContainer->url());
      }
  }
  
@@@ -749,7 -760,7 +753,7 @@@ void DolphinMainWindow::slotBackForward
  {
      if (action) {
          const KUrlNavigator *urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
 -        openNewTabAfterCurrentTab(urlNavigator->locationUrl(action->data().value<int>()));
 +        openNewTab(urlNavigator->locationUrl(action->data().value<int>()));
      }
  }
  
@@@ -801,7 -812,7 +805,7 @@@ void DolphinMainWindow::invertSelection
  void DolphinMainWindow::toggleSplitView()
  {
      DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
 -    tabPage->setSplitViewEnabled(!tabPage->splitViewEnabled());
 +    tabPage->setSplitViewEnabled(!tabPage->splitViewEnabled(), WithAnimation);
  
      updateViewActions();
  }
  void DolphinMainWindow::toggleSplitStash()
  {
      DolphinTabPage* tabPage = m_tabWidget->currentTabPage();
 -    tabPage->setSplitViewEnabled(false);
 -    tabPage->setSplitViewEnabled(true, QUrl("stash:/"));
 +    tabPage->setSplitViewEnabled(false, WithAnimation);
 +    tabPage->setSplitViewEnabled(true, WithAnimation, QUrl("stash:/"));
  }
  
  void DolphinMainWindow::reloadView()
@@@ -840,15 -851,6 +844,15 @@@ void DolphinMainWindow::showFilterBar(
      m_activeViewContainer->setFilterBarVisible(true);
  }
  
 +void DolphinMainWindow::toggleFilterBar()
 +{
 +    const bool checked = !m_activeViewContainer->isFilterBarVisible();
 +    m_activeViewContainer->setFilterBarVisible(checked);
 +
 +    QAction* toggleFilterBarAction = actionCollection()->action(QStringLiteral("toggle_filter"));
 +    toggleFilterBarAction->setChecked(checked);
 +}
 +
  void DolphinMainWindow::toggleEditLocation()
  {
      clearStatusBar();
@@@ -928,25 -930,25 +932,25 @@@ void DolphinMainWindow::goBackInNewTab(
  {
      const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
      const int index = urlNavigator->historyIndex() + 1;
 -    openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
 +    openNewTab(urlNavigator->locationUrl(index));
  }
  
  void DolphinMainWindow::goForwardInNewTab()
  {
      const KUrlNavigator* urlNavigator = activeViewContainer()->urlNavigatorInternalWithHistory();
      const int index = urlNavigator->historyIndex() - 1;
 -    openNewTabAfterCurrentTab(urlNavigator->locationUrl(index));
 +    openNewTab(urlNavigator->locationUrl(index));
  }
  
  void DolphinMainWindow::goUpInNewTab()
  {
      const QUrl currentUrl = activeViewContainer()->urlNavigator()->locationUrl();
 -    openNewTabAfterCurrentTab(KIO::upUrl(currentUrl));
 +    openNewTab(KIO::upUrl(currentUrl));
  }
  
  void DolphinMainWindow::goHomeInNewTab()
  {
 -    openNewTabAfterCurrentTab(Dolphin::homeUrl());
 +    openNewTab(Dolphin::homeUrl());
  }
  
  void DolphinMainWindow::compareFiles()
@@@ -1063,7 -1065,7 +1067,7 @@@ void DolphinMainWindow::editSettings(
          container->view()->writeSettings();
  
          const QUrl url = container->url();
 -        DolphinSettingsDialog* settingsDialog = new DolphinSettingsDialog(url, this);
 +        DolphinSettingsDialog* settingsDialog = new DolphinSettingsDialog(url, this, actionCollection());
          connect(settingsDialog, &DolphinSettingsDialog::settingsChanged, this, &DolphinMainWindow::refreshViews);
          connect(settingsDialog, &DolphinSettingsDialog::settingsChanged,
                  &DolphinUrlNavigatorsController::slotReadSettings);
@@@ -1133,7 -1135,7 +1137,7 @@@ void DolphinMainWindow::openContextMenu
          break;
  
      case DolphinContextMenu::OpenParentFolderInNewTab:
 -        openNewTabAfterLastTab(KIO::upUrl(item.url()));
 +        openNewTab(KIO::upUrl(item.url()));
          break;
  
      case DolphinContextMenu::None:
@@@ -1373,7 -1375,7 +1377,7 @@@ void DolphinMainWindow::setupActions(
          "<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."));
 -    actionCollection()->setDefaultShortcuts(newTab, {Qt::CTRL + Qt::Key_T, Qt::CTRL + Qt::SHIFT + Qt::Key_N});
 +    actionCollection()->setDefaultShortcuts(newTab, {Qt::CTRL | Qt::Key_T, Qt::CTRL | Qt::SHIFT | Qt::Key_N});
      connect(newTab, &QAction::triggered, this, &DolphinMainWindow::openNewActivatedTab);
  
      QAction* addToPlaces = actionCollection()->addAction(QStringLiteral("add_to_places"));
          "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 );
 +    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"));
          "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 );
 +    actionCollection()->setDefaultShortcut(moveToOtherViewAction, Qt::SHIFT | Qt::Key_F6 );
      connect(moveToOtherViewAction, &QAction::triggered, m_tabWidget, &DolphinTabWidget::moveToInactiveSplitView);
  
 +    QAction* showFilterBar = actionCollection()->addAction(QStringLiteral("show_filter_bar"));
 +    showFilterBar->setText(i18nc("@action:inmenu Tools", "Filter..."));
 +    showFilterBar->setToolTip(i18nc("@info:tooltip", "Toggle Filter Bar"));
 +    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."));
 +    showFilterBar->setIcon(QIcon::fromTheme(QStringLiteral("view-filter")));
 +    actionCollection()->setDefaultShortcuts(showFilterBar, {Qt::CTRL | Qt::Key_I, Qt::Key_Slash});
 +    connect(showFilterBar, &QAction::triggered, this, &DolphinMainWindow::showFilterBar);
 +
 +    // toggle_filter acts as a copy of the main showFilterBar to be used mainly
 +    // in the toolbar, with no default shortcut attached, to avoid messing with
 +    // existing workflows (filter bar always open and Ctrl-I to focus)
 +    QAction *toggleFilter = actionCollection()->addAction(QStringLiteral("toggle_filter"));
 +    toggleFilter->setText(i18nc("@action:inmenu", "Toggle Filter Bar"));
 +    toggleFilter->setIconText(i18nc("@action:intoolbar", "Filter"));
 +    toggleFilter->setIcon(showFilterBar->icon());
 +    toggleFilter->setToolTip(showFilterBar->toolTip());
 +    toggleFilter->setWhatsThis(showFilterBar->whatsThis());
 +    toggleFilter->setCheckable(true);
 +    connect(toggleFilter, &QAction::triggered, this, &DolphinMainWindow::toggleFilterBar);
 +
      QAction *searchAction = KStandardAction::find(this, &DolphinMainWindow::find, actionCollection());
      searchAction->setText(i18n("Search..."));
      searchAction->setToolTip(i18nc("@info:tooltip", "Search for files and folders"));
      invertSelection->setWhatsThis(xi18nc("@info:whatsthis invert", "This selects all "
          "objects that you have currently <emphasis>not</emphasis> selected instead."));
      invertSelection->setIcon(QIcon::fromTheme(QStringLiteral("edit-select-invert")));
 -    actionCollection()->setDefaultShortcut(invertSelection, Qt::CTRL + Qt::SHIFT + Qt::Key_A);
 +    actionCollection()->setDefaultShortcut(invertSelection, Qt::CTRL | Qt::SHIFT | Qt::Key_A);
      connect(invertSelection, &QAction::triggered, this, &DolphinMainWindow::invertSelection);
  
      // setup 'View' menu
      connect(split, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView);
  
      QAction* stashSplit = actionCollection()->addAction(QStringLiteral("split_stash"));
 -    actionCollection()->setDefaultShortcut(stashSplit, Qt::CTRL + Qt::Key_S);
 +    actionCollection()->setDefaultShortcut(stashSplit, Qt::CTRL | Qt::Key_S);
      stashSplit->setText(i18nc("@action:intoolbar Stash", "Stash"));
      stashSplit->setToolTip(i18nc("@info", "Opens the stash virtual directory in a split window"));
      stashSplit->setIcon(QIcon::fromTheme(QStringLiteral("folder-stash")));
      stashSplit->setCheckable(false);
 -    stashSplit->setVisible(KProtocolInfo::isKnownProtocol("stash"));
 +    stashSplit->setVisible(QDBusConnection::sessionBus().interface()->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
      connect(stashSplit, &QAction::triggered, this, &DolphinMainWindow::toggleSplitStash);
  
      KStandardAction::redisplay(this, &DolphinMainWindow::reloadView, actionCollection());
      replaceLocation->setWhatsThis(xi18nc("@info:whatsthis",
          "This switches to editing the location and selects it "
          "so you can quickly enter a different location."));
 -    actionCollection()->setDefaultShortcut(replaceLocation, Qt::CTRL + Qt::Key_L);
 +    actionCollection()->setDefaultShortcut(replaceLocation, Qt::CTRL | Qt::Key_L);
      connect(replaceLocation, &QAction::triggered, this, &DolphinMainWindow::replaceLocation);
  
      // setup 'Go' menu
      undoCloseTab->setText(i18nc("@action:inmenu File", "Undo close tab"));
      undoCloseTab->setWhatsThis(i18nc("@info:whatsthis undo close tab",
          "This returns you to the previously closed tab."));
 -    actionCollection()->setDefaultShortcut(undoCloseTab, Qt::CTRL + Qt::SHIFT + Qt::Key_T);
 +    actionCollection()->setDefaultShortcut(undoCloseTab, Qt::CTRL | Qt::SHIFT | Qt::Key_T);
      undoCloseTab->setIcon(QIcon::fromTheme(QStringLiteral("edit-undo")));
      undoCloseTab->setEnabled(false);
      connect(undoCloseTab, &QAction::triggered, recentTabsMenu, &DolphinRecentTabsMenu::undoCloseTab);
          "including folders that contain personal application data."));
  
      // setup 'Tools' menu
 -    QAction* showFilterBar = actionCollection()->addAction(QStringLiteral("show_filter_bar"));
 -    showFilterBar->setText(i18nc("@action:inmenu Tools", "Show Filter Bar"));
 -    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."));
 -    showFilterBar->setIcon(QIcon::fromTheme(QStringLiteral("view-filter")));
 -    actionCollection()->setDefaultShortcuts(showFilterBar, {Qt::CTRL + Qt::Key_I, Qt::Key_Slash});
 -    connect(showFilterBar, &QAction::triggered, this, &DolphinMainWindow::showFilterBar);
 -
      QAction* compareFiles = actionCollection()->addAction(QStringLiteral("compare_files"));
      compareFiles->setText(i18nc("@action:inmenu Tools", "Compare Files"));
      compareFiles->setIcon(QIcon::fromTheme(QStringLiteral("kompare")));
          "<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);
 +    actionCollection()->setDefaultShortcut(openPreferredSearchTool, Qt::CTRL | Qt::SHIFT | Qt::Key_F);
      connect(openPreferredSearchTool, &QAction::triggered, this, &DolphinMainWindow::openPreferredSearchTool);
  
      if (KAuthorized::authorize(QStringLiteral("shell_access"))) {
          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>"));
 -        openTerminal->setIcon(QIcon::fromTheme(QStringLiteral("dialog-scripts")));
 -        actionCollection()->setDefaultShortcut(openTerminal, Qt::SHIFT + Qt::Key_F4);
 +        openTerminal->setIcon(QIcon::fromTheme(QStringLiteral("utilities-terminal")));
 +        actionCollection()->setDefaultShortcut(openTerminal, Qt::SHIFT | Qt::Key_F4);
          connect(openTerminal, &QAction::triggered, this, &DolphinMainWindow::openTerminal);
  
  #ifdef 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")));
 -        actionCollection()->setDefaultShortcut(focusTerminalPanel, Qt::CTRL + Qt::SHIFT + Qt::Key_F4);
 +        actionCollection()->setDefaultShortcut(focusTerminalPanel, Qt::CTRL | Qt::SHIFT | Qt::Key_F4);
          connect(focusTerminalPanel, &QAction::triggered, this, &DolphinMainWindow::focusTerminalPanel);
  #endif
      }
  
      // not in menu actions
      QList<QKeySequence> nextTabKeys = KStandardShortcut::tabNext();
 -    nextTabKeys.append(QKeySequence(Qt::CTRL + Qt::Key_Tab));
 +    nextTabKeys.append(QKeySequence(Qt::CTRL | Qt::Key_Tab));
  
      QList<QKeySequence> prevTabKeys = KStandardShortcut::tabPrev();
 -    prevTabKeys.append(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_Tab));
 +    prevTabKeys.append(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Tab));
  
      for (int i = 0; i < MaxActivateTabShortcuts; ++i) {
          QAction* activateTab = actionCollection()->addAction(QStringLiteral("activate_tab_%1").arg(i));
      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);
 +    actionCollection()->setDefaultShortcut(activateLastTab, Qt::ALT | Qt::Key_0);
  
      QAction* activateNextTab = actionCollection()->addAction(QStringLiteral("activate_next_tab"));
      activateNextTab->setIconText(i18nc("@action:inmenu", "Next Tab"));
@@@ -1822,7 -1811,7 +1826,7 @@@ void DolphinMainWindow::setupDockWidget
      connect(foldersPanel, &FoldersPanel::folderActivated,
              this, &DolphinMainWindow::changeUrl);
      connect(foldersPanel, &FoldersPanel::folderMiddleClicked,
 -            this, &DolphinMainWindow::openNewTabAfterCurrentTab);
 +            this, &DolphinMainWindow::openNewTab);
      connect(foldersPanel, &FoldersPanel::errorMessage,
              this, &DolphinMainWindow::showErrorMessage);
  
      placesDock->setWidget(m_placesPanel);
  
      QAction *placesAction = placesDock->toggleViewAction();
 -    createPanelAction(QIcon::fromTheme(QStringLiteral("bookmarks")), Qt::Key_F9, placesAction, QStringLiteral("show_places_panel"));
 +    createPanelAction(QIcon::fromTheme(QStringLiteral("compass")), Qt::Key_F9, placesAction, QStringLiteral("show_places_panel"));
  
      addDockWidget(Qt::LeftDockWidgetArea, placesDock);
      connect(m_placesPanel, &PlacesPanel::placeActivated,
              this, &DolphinMainWindow::slotPlaceActivated);
      connect(m_placesPanel, &PlacesPanel::placeMiddleClicked,
 -            this, &DolphinMainWindow::openNewTabAfterCurrentTab);
 +            this, &DolphinMainWindow::openNewTab);
      connect(m_placesPanel, &PlacesPanel::errorMessage,
              this, &DolphinMainWindow::showErrorMessage);
      connect(this, &DolphinMainWindow::urlChanged,
@@@ -2047,8 -2036,8 +2051,8 @@@ void DolphinMainWindow::updateViewActio
  {
      m_actionHandler->updateViewActions();
  
 -    QAction* showFilterBarAction = actionCollection()->action(QStringLiteral("show_filter_bar"));
 -    showFilterBarAction->setChecked(m_activeViewContainer->isFilterBarVisible());
 +    QAction* toggleFilterBarAction = actionCollection()->action(QStringLiteral("toggle_filter"));
 +    toggleFilterBarAction->setChecked(m_activeViewContainer->isFilterBarVisible());
  
      updateSplitAction();
  }
@@@ -2137,7 -2126,7 +2141,7 @@@ void DolphinMainWindow::refreshViews(
          // The startup settings have been changed by the user (see bug #254947).
          // Synchronize the split-view setting with the active view:
          const bool splitView = GeneralSettings::splitView();
 -        m_tabWidget->currentTabPage()->setSplitViewEnabled(splitView);
 +        m_tabWidget->currentTabPage()->setSplitViewEnabled(splitView, WithAnimation);
          updateSplitAction();
          updateWindowTitle();
      }
@@@ -2200,7 -2189,7 +2204,7 @@@ void DolphinMainWindow::connectViewSign
      connect(navigator, &KUrlNavigator::editableStateChanged,
              this, &DolphinMainWindow::slotEditableStateChanged);
      connect(navigator, &KUrlNavigator::tabRequested,
 -            this, &DolphinMainWindow::openNewTabAfterLastTab);
 +            this, &DolphinMainWindow::openNewTab);
  
      disconnect(m_updateHistoryConnection);
      m_updateHistoryConnection = connect(