+ // setup 'Settings' menu
+ KToggleAction* showMenuBar = KStandardAction::showMenubar(0, 0, actionCollection());
+ connect(showMenuBar, &KToggleAction::triggered, // Fixes #286822
+ this, &DolphinMainWindow::toggleShowMenuBar, Qt::QueuedConnection);
+ KStandardAction::preferences(this, SLOT(editSettings()), actionCollection());
+
+ // not in menu actions
+ QList<QKeySequence> nextTabKeys = KStandardShortcut::tabNext();
+ nextTabKeys.append(QKeySequence(Qt::CTRL | Qt::Key_Tab));
+
+ QList<QKeySequence> prevTabKeys = KStandardShortcut::tabPrev();
+ prevTabKeys.append(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Tab));
+
+ QAction* activateNextTab = actionCollection()->addAction("activate_next_tab");
+ activateNextTab->setIconText(i18nc("@action:inmenu", "Next Tab"));
+ activateNextTab->setText(i18nc("@action:inmenu", "Activate Next Tab"));
+ activateNextTab->setEnabled(false);
+ connect(activateNextTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activateNextTab);
+ actionCollection()->setDefaultShortcuts(activateNextTab, QApplication::isRightToLeft() ? prevTabKeys : nextTabKeys);
+
+ QAction* activatePrevTab = actionCollection()->addAction("activate_prev_tab");
+ activatePrevTab->setIconText(i18nc("@action:inmenu", "Previous Tab"));
+ activatePrevTab->setText(i18nc("@action:inmenu", "Activate Previous Tab"));
+ activatePrevTab->setEnabled(false);
+ connect(activatePrevTab, &QAction::triggered, m_tabWidget, &DolphinTabWidget::activatePrevTab);
+ actionCollection()->setDefaultShortcuts(activatePrevTab, QApplication::isRightToLeft() ? nextTabKeys : prevTabKeys);
+
+ // for context menu
+ QAction* openInNewTab = actionCollection()->addAction("open_in_new_tab");
+ openInNewTab->setText(i18nc("@action:inmenu", "Open in New Tab"));
+ openInNewTab->setIcon(QIcon::fromTheme("tab-new"));
+ connect(openInNewTab, &QAction::triggered, this, &DolphinMainWindow::openInNewTab);
+
+ QAction* openInNewTabs = actionCollection()->addAction("open_in_new_tabs");
+ openInNewTabs->setText(i18nc("@action:inmenu", "Open in New Tabs"));
+ openInNewTabs->setIcon(QIcon::fromTheme("tab-new"));
+ connect(openInNewTabs, &QAction::triggered, this, &DolphinMainWindow::openInNewTab);
+
+ QAction* openInNewWindow = actionCollection()->addAction("open_in_new_window");
+ openInNewWindow->setText(i18nc("@action:inmenu", "Open in New Window"));
+ openInNewWindow->setIcon(QIcon::fromTheme("window-new"));
+ connect(openInNewWindow, &QAction::triggered, this, &DolphinMainWindow::openInNewWindow);
+}
+
+void DolphinMainWindow::setupDockWidgets()
+{
+ const bool lock = GeneralSettings::lockPanels();
+
+ KDualAction* lockLayoutAction = actionCollection()->add<KDualAction>("lock_panels");
+ lockLayoutAction->setActiveText(i18nc("@action:inmenu Panels", "Unlock Panels"));
+ lockLayoutAction->setActiveIcon(QIcon::fromTheme("object-unlocked"));
+ lockLayoutAction->setInactiveText(i18nc("@action:inmenu Panels", "Lock Panels"));
+ lockLayoutAction->setInactiveIcon(QIcon::fromTheme("object-locked"));
+ lockLayoutAction->setActive(lock);
+ connect(lockLayoutAction, &KDualAction::triggered, this, &DolphinMainWindow::togglePanelLockState);
+
+ // Setup "Information"
+ DolphinDockWidget* infoDock = new DolphinDockWidget(i18nc("@title:window", "Information"));
+ infoDock->setLocked(lock);
+ infoDock->setObjectName("infoDock");
+ infoDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ InformationPanel* infoPanel = new InformationPanel(infoDock);
+ infoPanel->setCustomContextMenuActions({lockLayoutAction});
+ connect(infoPanel, &InformationPanel::urlActivated, this, &DolphinMainWindow::handleUrl);
+ infoDock->setWidget(infoPanel);
+
+ QAction* infoAction = infoDock->toggleViewAction();
+ createPanelAction(QIcon::fromTheme("dialog-information"), Qt::Key_F11, infoAction, "show_information_panel");
+
+ addDockWidget(Qt::RightDockWidgetArea, infoDock);
+ connect(this, &DolphinMainWindow::urlChanged,
+ infoPanel, &InformationPanel::setUrl);
+ connect(this, &DolphinMainWindow::selectionChanged,
+ infoPanel, &InformationPanel::setSelection);
+ connect(this, &DolphinMainWindow::requestItemInfo,
+ infoPanel, &InformationPanel::requestDelayedItemInfo);
+
+ // Setup "Folders"
+ DolphinDockWidget* foldersDock = new DolphinDockWidget(i18nc("@title:window", "Folders"));
+ foldersDock->setLocked(lock);
+ foldersDock->setObjectName("foldersDock");
+ foldersDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ FoldersPanel* foldersPanel = new FoldersPanel(foldersDock);
+ foldersPanel->setCustomContextMenuActions({lockLayoutAction});
+ foldersDock->setWidget(foldersPanel);
+
+ QAction* foldersAction = foldersDock->toggleViewAction();
+ createPanelAction(QIcon::fromTheme("folder"), Qt::Key_F7, foldersAction, "show_folders_panel");
+
+ addDockWidget(Qt::LeftDockWidgetArea, foldersDock);
+ connect(this, &DolphinMainWindow::urlChanged,
+ foldersPanel, &FoldersPanel::setUrl);
+ connect(foldersPanel, &FoldersPanel::folderActivated,
+ this, &DolphinMainWindow::changeUrl);
+ connect(foldersPanel, &FoldersPanel::folderMiddleClicked,
+ this, &DolphinMainWindow::openNewTab);
+ connect(foldersPanel, &FoldersPanel::errorMessage,
+ this, &DolphinMainWindow::showErrorMessage);
+
+ // Setup "Terminal"
+#ifndef Q_OS_WIN
+ DolphinDockWidget* terminalDock = new DolphinDockWidget(i18nc("@title:window Shell terminal", "Terminal"));
+ terminalDock->setLocked(lock);
+ terminalDock->setObjectName("terminalDock");
+ terminalDock->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
+ TerminalPanel* terminalPanel = new TerminalPanel(terminalDock);
+ terminalPanel->setCustomContextMenuActions({lockLayoutAction});
+ terminalDock->setWidget(terminalPanel);
+
+ connect(terminalPanel, &TerminalPanel::hideTerminalPanel, terminalDock, &DolphinDockWidget::hide);
+ connect(terminalPanel, &TerminalPanel::changeUrl, this, &DolphinMainWindow::slotTerminalDirectoryChanged);
+ connect(terminalDock, &DolphinDockWidget::visibilityChanged,
+ terminalPanel, &TerminalPanel::dockVisibilityChanged);
+
+ QAction* terminalAction = terminalDock->toggleViewAction();
+ createPanelAction(QIcon::fromTheme("utilities-terminal"), Qt::Key_F4, terminalAction, "show_terminal_panel");
+
+ addDockWidget(Qt::BottomDockWidgetArea, terminalDock);
+ connect(this, &DolphinMainWindow::urlChanged,
+ terminalPanel, &TerminalPanel::setUrl);
+#endif
+
+ if (GeneralSettings::version() < 200) {
+ infoDock->hide();
+ foldersDock->hide();
+#ifndef Q_OS_WIN
+ terminalDock->hide();
+#endif
+ }
+
+ // Setup "Places"
+ DolphinDockWidget* placesDock = new DolphinDockWidget(i18nc("@title:window", "Places"));
+ placesDock->setLocked(lock);
+ placesDock->setObjectName("placesDock");
+ placesDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+
+ PlacesPanel* placesPanel = new PlacesPanel(placesDock);
+ placesPanel->setCustomContextMenuActions({lockLayoutAction});
+ placesDock->setWidget(placesPanel);
+
+ QAction* placesAction = placesDock->toggleViewAction();
+ createPanelAction(QIcon::fromTheme("bookmarks"), Qt::Key_F9, placesAction, "show_places_panel");
+
+ addDockWidget(Qt::LeftDockWidgetArea, placesDock);
+ connect(placesPanel, &PlacesPanel::placeActivated,
+ this, &DolphinMainWindow::slotPlaceActivated);
+ connect(placesPanel, SIGNAL(placeMiddleClicked(QUrl)),
+ this, SLOT(openNewTab(QUrl)));
+ connect(placesPanel, &PlacesPanel::errorMessage,
+ this, &DolphinMainWindow::showErrorMessage);
+ connect(this, &DolphinMainWindow::urlChanged,
+ placesPanel, &PlacesPanel::setUrl);
+ connect(placesDock, &DolphinDockWidget::visibilityChanged,
+ m_tabWidget, &DolphinTabWidget::slotPlacesPanelVisibilityChanged);
+ connect(this, &DolphinMainWindow::settingsChanged,
+ placesPanel, &PlacesPanel::readSettings);
+
+ m_tabWidget->slotPlacesPanelVisibilityChanged(placesPanel->isVisible());
+
+ // Add actions into the "Panels" menu
+ KActionMenu* panelsMenu = new KActionMenu(i18nc("@action:inmenu View", "Panels"), this);
+ actionCollection()->addAction("panels", panelsMenu);
+ panelsMenu->setDelayed(false);
+ const KActionCollection* ac = actionCollection();
+ panelsMenu->addAction(ac->action("show_places_panel"));
+ panelsMenu->addAction(ac->action("show_information_panel"));
+ panelsMenu->addAction(ac->action("show_folders_panel"));
+#ifndef Q_OS_WIN
+ panelsMenu->addAction(ac->action("show_terminal_panel"));
+#endif
+ panelsMenu->addSeparator();
+ panelsMenu->addAction(lockLayoutAction);