- QActionGroup* sortGroup = new QActionGroup(this);
- sortGroup->addAction(sortByName);
- sortGroup->addAction(sortBySize);
- sortGroup->addAction(sortByDate);
- sortGroup->addAction(sortByPermissions);
- sortGroup->addAction(sortByOwner);
- sortGroup->addAction(sortByGroup);
- sortGroup->addAction(sortByType);
- sortGroup->addAction(sortByRating);
- sortGroup->addAction(sortByTags);
-
- KToggleAction* sortDescending = actionCollection()->add<KToggleAction>("descending");
- sortDescending->setText(i18n("Descending"));
- connect(sortDescending, SIGNAL(triggered()), this, SLOT(toggleSortOrder()));
-
- KToggleAction* showInGroups = actionCollection()->add<KToggleAction>("show_in_groups");
- showInGroups->setText(i18n("Show in Groups"));
- connect(showInGroups, SIGNAL(triggered()), this, SLOT(toggleSortCategorization()));
-
- KToggleAction* clearInfo = actionCollection()->add<KToggleAction>("clear_info");
- clearInfo->setText(i18n("No Information"));
- connect(clearInfo, SIGNAL(triggered()), this, SLOT(clearInfo()));
-
- KToggleAction* showMimeInfo = actionCollection()->add<KToggleAction>("show_mime_info");
- showMimeInfo->setText(i18n("Type"));
- connect(showMimeInfo, SIGNAL(triggered()), this, SLOT(showMimeInfo()));
-
- KToggleAction* showSizeInfo = actionCollection()->add<KToggleAction>("show_size_info");
- showSizeInfo->setText(i18n("Size"));
- connect(showSizeInfo, SIGNAL(triggered()), this, SLOT(showSizeInfo()));
-
- KToggleAction* showDateInfo = actionCollection()->add<KToggleAction>("show_date_info");
- showDateInfo->setText(i18n("Date"));
- connect(showDateInfo, SIGNAL(triggered()), this, SLOT(showDateInfo()));
-
- QActionGroup* infoGroup = new QActionGroup(this);
- infoGroup->addAction(clearInfo);
- infoGroup->addAction(showMimeInfo);
- infoGroup->addAction(showSizeInfo);
- infoGroup->addAction(showDateInfo);
-
- KToggleAction* showPreview = actionCollection()->add<KToggleAction>("show_preview");
- showPreview->setText(i18n("Preview"));
- showPreview->setIcon(KIcon("fileview-preview"));
- connect(showPreview, SIGNAL(triggered()), this, SLOT(togglePreview()));
-
- KToggleAction* showHiddenFiles = actionCollection()->add<KToggleAction>("show_hidden_files");
- showHiddenFiles->setText(i18n("Show Hidden Files"));
- showHiddenFiles->setShortcut(Qt::ALT | Qt::Key_Period);
- connect(showHiddenFiles, SIGNAL(triggered()), this, SLOT(toggleShowHiddenFiles()));
-
- QAction* split = actionCollection()->addAction("split_view");
- split->setShortcut(Qt::Key_F10);
- updateSplitAction(false);
- connect(split, SIGNAL(triggered()), this, SLOT(toggleSplitView()));
-
- QAction* reload = actionCollection()->addAction("reload");
- reload->setText(i18n("Reload"));
- reload->setShortcut(Qt::Key_F5);
- reload->setIcon(KIcon("view-refresh"));
- connect(reload, SIGNAL(triggered()), this, SLOT(reloadView()));
-
- QAction* stop = actionCollection()->addAction("stop");
- stop->setText(i18n("Stop"));
- stop->setIcon(KIcon("process-stop"));
- connect(stop, SIGNAL(triggered()), this, SLOT(stopLoading()));
-
- // TODO: the URL navigator must emit a signal if the editable state has been
- // changed, so that the corresponding showFullLocation action is updated. Also
- // the naming "Show full Location" is currently confusing...
- KToggleAction* showFullLocation = actionCollection()->add<KToggleAction>("editable_location");
- showFullLocation->setText(i18n("Show Full Location"));
- showFullLocation->setShortcut(Qt::CTRL | Qt::Key_L);
- connect(showFullLocation, SIGNAL(triggered()), this, SLOT(toggleEditLocation()));
-
- QAction* editLocation = actionCollection()->addAction("edit_location");
- editLocation->setText(i18n("Edit Location"));
- editLocation->setShortcut(Qt::Key_F6);
- connect(editLocation, SIGNAL(triggered()), this, SLOT(editLocation()));
-
- QAction* adjustViewProps = actionCollection()->addAction("view_properties");
- adjustViewProps->setText(i18n("Adjust View Properties..."));
- connect(adjustViewProps, SIGNAL(triggered()), this, SLOT(adjustViewProperties()));
+void DolphinMainWindow::setupActions()
+{
+ auto hamburgerMenuAction = KStandardAction::hamburgerMenu(nullptr, nullptr, actionCollection());
+
+ // setup 'File' menu
+ m_newFileMenu = new DolphinNewFileMenu(nullptr, nullptr, this);
+ actionCollection()->addAction(QStringLiteral("new_menu"), m_newFileMenu);
+ QMenu *menu = m_newFileMenu->menu();
+ menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
+ menu->setIcon(QIcon::fromTheme(QStringLiteral("list-add")));
+ m_newFileMenu->setPopupMode(QToolButton::InstantPopup);
+ connect(menu, &QMenu::aboutToShow, this, &DolphinMainWindow::updateNewMenu);
+
+ QAction *newWindow = KStandardAction::openNew(this, &DolphinMainWindow::openNewMainWindow, actionCollection());
+ newWindow->setText(i18nc("@action:inmenu File", "New &Window"));
+ newWindow->setToolTip(i18nc("@info", "Open a new Dolphin window"));
+ newWindow->setWhatsThis(xi18nc("@info:whatsthis",
+ "This opens a new "
+ "window just like this one with the current location."
+ "<nl/>You can drag and drop items between windows."));
+ newWindow->setIcon(QIcon::fromTheme(QStringLiteral("window-new")));
+
+ QAction *newTab = actionCollection()->addAction(QStringLiteral("new_tab"));
+ newTab->setIcon(QIcon::fromTheme(QStringLiteral("tab-new")));
+ newTab->setText(i18nc("@action:inmenu File", "New Tab"));
+ newTab->setWhatsThis(xi18nc("@info:whatsthis",
+ "This opens a new "
+ "<emphasis>Tab</emphasis> with the current location."
+ "<nl/>Tabs allow you to quickly switch between multiple locations and views within this window. "
+ "You can drag and drop items between tabs."));
+ actionCollection()->setDefaultShortcut(newTab, Qt::CTRL | Qt::Key_T);
+ connect(newTab, &QAction::triggered, this, &DolphinMainWindow::openNewActivatedTab);
+
+ QAction *addToPlaces = actionCollection()->addAction(QStringLiteral("add_to_places"));
+ addToPlaces->setIcon(QIcon::fromTheme(QStringLiteral("bookmark-new")));
+ addToPlaces->setText(i18nc("@action:inmenu Add current folder to places", "Add to Places"));
+ addToPlaces->setWhatsThis(xi18nc("@info:whatsthis",
+ "This adds the selected folder "
+ "to the Places panel."));
+ connect(addToPlaces, &QAction::triggered, this, &DolphinMainWindow::addToPlaces);
+
+ QAction *closeTab = KStandardAction::close(m_tabWidget, QOverload<>::of(&DolphinTabWidget::closeTab), actionCollection());
+ closeTab->setText(i18nc("@action:inmenu File", "Close Tab"));
+ closeTab->setToolTip(i18nc("@info", "Close Tab"));
+ closeTab->setWhatsThis(i18nc("@info:whatsthis",
+ "This closes the "
+ "currently viewed tab. If no more tabs are left, this closes "
+ "the whole window instead."));
+
+ QAction *quitAction = KStandardAction::quit(this, &DolphinMainWindow::quit, actionCollection());
+ quitAction->setWhatsThis(i18nc("@info:whatsthis quit", "This closes this window."));
+
+ // setup 'Edit' menu
+ KStandardAction::undo(this, &DolphinMainWindow::undo, actionCollection());
+
+ // 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());
+ m_actionTextHelper->registerTextWhenNothingIsSelected(cutAction, i18nc("@action", "Cut…"));
+ 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());
+ m_actionTextHelper->registerTextWhenNothingIsSelected(copyAction, i18nc("@action", "Copy…"));
+ 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);
+ QAction *paste = KStandardAction::paste(this, &DolphinMainWindow::paste, actionCollection());
+ // 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"));
+ 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);
+
+ QAction *copyToOtherViewAction = actionCollection()->addAction(QStringLiteral("copy_to_inactive_split_view"));
+ copyToOtherViewAction->setText(i18nc("@action:inmenu", "Copy to Other View"));
+ m_actionTextHelper->registerTextWhenNothingIsSelected(copyToOtherViewAction, i18nc("@action:inmenu", "Copy to Other View…"));
+ copyToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Copy",
+ "This copies the selected items from "
+ "the view in focus to the other view. "
+ "(Only available while in Split View mode.)"));
+ copyToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-copy")));
+ copyToOtherViewAction->setIconText(i18nc("@action:inmenu Edit", "Copy to Other View"));
+ actionCollection()->setDefaultShortcut(copyToOtherViewAction, Qt::SHIFT | Qt::Key_F5);
+ connect(copyToOtherViewAction, &QAction::triggered, this, &DolphinMainWindow::copyToInactiveSplitView);
+
+ QAction *moveToOtherViewAction = actionCollection()->addAction(QStringLiteral("move_to_inactive_split_view"));
+ moveToOtherViewAction->setText(i18nc("@action:inmenu", "Move to Other View"));
+ m_actionTextHelper->registerTextWhenNothingIsSelected(moveToOtherViewAction, i18nc("@action:inmenu", "Move to Other View…"));
+ moveToOtherViewAction->setWhatsThis(xi18nc("@info:whatsthis Move",
+ "This moves the selected items from "
+ "the view in focus to the other view. "
+ "(Only available while in Split View mode.)"));
+ moveToOtherViewAction->setIcon(QIcon::fromTheme(QStringLiteral("edit-cut")));
+ moveToOtherViewAction->setIconText(i18nc("@action:inmenu Edit", "Move to Other View"));
+ actionCollection()->setDefaultShortcut(moveToOtherViewAction, Qt::SHIFT | Qt::Key_F6);
+ connect(moveToOtherViewAction, &QAction::triggered, this, &DolphinMainWindow::moveToInactiveSplitView);
+
+ QAction *showFilterBar = actionCollection()->addAction(QStringLiteral("show_filter_bar"));
+ showFilterBar->setText(i18nc("@action:inmenu Tools", "Filter…"));
+ showFilterBar->setToolTip(i18nc("@info:tooltip", "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 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"));
+ searchAction->setWhatsThis(xi18nc("@info:whatsthis find",
+ "<para>This helps you "
+ "find files and folders by opening a <emphasis>search bar</emphasis>. "
+ "There you can enter search terms and specify settings to find the "
+ "items you are looking for.</para>"));
+
+ // 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);
+ connect(toggleSearchAction, &QAction::triggered, this, [this](bool checked) {
+ if (checked) {
+ find();
+ } else {
+ m_activeViewContainer->setSearchBarVisible(false);
+ }
+ });
+
+ QAction *toggleSelectionModeAction = actionCollection()->addAction(QStringLiteral("toggle_selection_mode"));
+ // i18n: This action toggles a selection mode.
+ toggleSelectionModeAction->setText(i18nc("@action:inmenu", "Select Files and Folders"));
+ // i18n: Opens a selection mode for selecting files/folders.
+ // The text is kept so unspecific because it will be shown on the toolbar where space is at a premium.
+ toggleSelectionModeAction->setIconText(i18nc("@action:intoolbar", "Select"));
+ toggleSelectionModeAction->setWhatsThis(xi18nc(
+ "@info:whatsthis",
+ "<para>This application only knows which files or folders should be acted on if they are"
+ " <emphasis>selected</emphasis> first. Press this to toggle a <emphasis>Selection Mode</emphasis> which makes selecting and deselecting as easy as "
+ "pressing an item once.</para><para>While in this mode, a quick access bar at the bottom shows available actions for the currently selected items."
+ "</para>"));
+ toggleSelectionModeAction->setIcon(QIcon::fromTheme(QStringLiteral("quickwizard")));
+ toggleSelectionModeAction->setCheckable(true);
+ actionCollection()->setDefaultShortcut(toggleSelectionModeAction, Qt::Key_Space);
+ connect(toggleSelectionModeAction, &QAction::triggered, this, &DolphinMainWindow::toggleSelectionMode);
+
+ // A special version of the toggleSelectionModeAction for the toolbar that also contains a menu
+ // with the selectAllAction and invertSelectionAction.
+ auto *toggleSelectionModeToolBarAction =
+ new KToolBarPopupAction(toggleSelectionModeAction->icon(), toggleSelectionModeAction->iconText(), actionCollection());
+ toggleSelectionModeToolBarAction->setToolTip(toggleSelectionModeAction->text());
+ toggleSelectionModeToolBarAction->setWhatsThis(toggleSelectionModeAction->whatsThis());
+ actionCollection()->addAction(QStringLiteral("toggle_selection_mode_tool_bar"), toggleSelectionModeToolBarAction);
+ toggleSelectionModeToolBarAction->setCheckable(true);
+ toggleSelectionModeToolBarAction->setPopupMode(KToolBarPopupAction::DelayedPopup);
+ connect(toggleSelectionModeToolBarAction, &QAction::triggered, toggleSelectionModeAction, &QAction::trigger);
+ connect(toggleSelectionModeAction, &QAction::toggled, toggleSelectionModeToolBarAction, &QAction::setChecked);
+
+ QAction *selectAllAction = KStandardAction::selectAll(this, &DolphinMainWindow::selectAll, actionCollection());
+ selectAllAction->setWhatsThis(xi18nc("@info:whatsthis",
+ "This selects all "
+ "files and folders in the current location."));
+
+ QAction *invertSelection = actionCollection()->addAction(QStringLiteral("invert_selection"));
+ invertSelection->setText(i18nc("@action:inmenu Edit", "Invert Selection"));
+ invertSelection->setWhatsThis(xi18nc("@info:whatsthis invert",
+ "This selects all "
+ "items 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);
+ connect(invertSelection, &QAction::triggered, this, &DolphinMainWindow::invertSelection);
+
+ QMenu *toggleSelectionModeActionMenu = new QMenu(this);
+ toggleSelectionModeActionMenu->addAction(selectAllAction);
+ toggleSelectionModeActionMenu->addAction(invertSelection);
+ toggleSelectionModeToolBarAction->setMenu(toggleSelectionModeActionMenu);
+
+ // setup 'View' menu
+ // (note that most of it is set up in DolphinViewActionHandler)
+
+ Admin::WorkerIntegration::createActAsAdminAction(actionCollection(), this);
+
+ m_splitViewAction = actionCollection()->add<KActionMenu>(QStringLiteral("split_view"));
+ m_splitViewMenuAction = actionCollection()->addAction(QStringLiteral("split_view_menu"));
+
+ m_splitViewAction->setWhatsThis(xi18nc("@info:whatsthis split",
+ "<para>This presents "
+ "a second view side-by-side with the current view, so you can see "
+ "the contents of two folders at once and easily move items between "
+ "them.</para><para>The view that is not \"in focus\" will be dimmed. "
+ "</para>Click this button again to close one of the views."));
+ m_splitViewMenuAction->setWhatsThis(m_splitViewAction->whatsThis());
+
+ // only set it for the menu version
+ actionCollection()->setDefaultShortcut(m_splitViewMenuAction, Qt::Key_F3);
+
+ connect(m_splitViewAction, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView);
+ connect(m_splitViewMenuAction, &QAction::triggered, this, &DolphinMainWindow::toggleSplitView);
+
+ QAction *popoutSplit = actionCollection()->addAction(QStringLiteral("popout_split_view"));
+ popoutSplit->setWhatsThis(xi18nc("@info:whatsthis",
+ "If the view has been split, this will pop the view in focus "
+ "out into a new window."));
+ popoutSplit->setIcon(QIcon::fromTheme(QStringLiteral("window-new")));
+ actionCollection()->setDefaultShortcut(popoutSplit, Qt::SHIFT | Qt::Key_F3);
+ connect(popoutSplit, &QAction::triggered, this, &DolphinMainWindow::popoutSplitView);
+
+ QAction *stashSplit = actionCollection()->addAction(QStringLiteral("split_stash"));
+ 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);
+ QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
+ stashSplit->setVisible(sessionInterface && sessionInterface->isServiceRegistered(QStringLiteral("org.kde.kio.StashNotifier")));
+ connect(stashSplit, &QAction::triggered, this, &DolphinMainWindow::toggleSplitStash);
+
+ QAction *redisplay = KStandardAction::redisplay(this, &DolphinMainWindow::reloadView, actionCollection());
+ redisplay->setToolTip(i18nc("@info:tooltip", "Refresh view"));
+ redisplay->setWhatsThis(xi18nc("@info:whatsthis refresh",
+ "<para>This refreshes "
+ "the folder view.</para>"
+ "<para>If the contents of this folder have changed, refreshing will re-scan this folder "
+ "and show you a newly-updated view of the files and folders contained here.</para>"
+ "<para>If the view is split, this refreshes the one that is currently in focus.</para>"));
+
+ QAction *stop = actionCollection()->addAction(QStringLiteral("stop"));
+ stop->setText(i18nc("@action:inmenu View", "Stop"));
+ stop->setToolTip(i18nc("@info", "Stop loading"));
+ stop->setWhatsThis(i18nc("@info", "This stops the loading of the contents of the current folder."));
+ stop->setIcon(QIcon::fromTheme(QStringLiteral("process-stop")));
+ connect(stop, &QAction::triggered, this, &DolphinMainWindow::stopLoading);
+
+ KToggleAction *editableLocation = actionCollection()->add<KToggleAction>(QStringLiteral("editable_location"));
+ editableLocation->setText(i18nc("@action:inmenu Navigation Bar", "Editable Location"));
+ 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."));
+ actionCollection()->setDefaultShortcut(editableLocation, Qt::Key_F6);
+ connect(editableLocation, &KToggleAction::triggered, this, &DolphinMainWindow::toggleEditLocation);
+
+ QAction *replaceLocation = actionCollection()->addAction(QStringLiteral("replace_location"));
+ replaceLocation->setText(i18nc("@action:inmenu Navigation Bar", "Replace Location"));
+ // 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."));
+ actionCollection()->setDefaultShortcuts(replaceLocation, {Qt::CTRL | Qt::Key_L, Qt::ALT | Qt::Key_D});
+ connect(replaceLocation, &QAction::triggered, this, &DolphinMainWindow::replaceLocation);