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
This commit is contained in:
Nate Graham 2019-09-06 10:08:58 -06:00
parent b4188442d1
commit 0303df092d
2 changed files with 51 additions and 93 deletions

View file

@ -207,29 +207,22 @@ void DolphinContextMenu::openItemContextMenu()
// Insert 'Open With' entries
addOpenWithActions(fileItemActions);
// insert 'Add to Places' entry
if (!placeExists(m_fileInfo.url())) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("add_to_places")));
}
addSeparator();
// set up 'Create New' menu
DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow);
const DolphinView* view = m_mainWindow->activeViewContainer()->view();
newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown());
newFileMenu->checkUpToDate();
newFileMenu->setPopupFiles(m_fileInfo.url());
newFileMenu->setEnabled(selectedItemsProps.supportsWriting());
connect(newFileMenu, &DolphinNewFileMenu::fileCreated, newFileMenu, &DolphinNewFileMenu::deleteLater);
connect(newFileMenu, &DolphinNewFileMenu::directoryCreated, newFileMenu, &DolphinNewFileMenu::deleteLater);
DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow);
const DolphinView* view = m_mainWindow->activeViewContainer()->view();
newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown());
newFileMenu->checkUpToDate();
newFileMenu->setPopupFiles(m_fileInfo.url());
newFileMenu->setEnabled(selectedItemsProps.supportsWriting());
connect(newFileMenu, &DolphinNewFileMenu::fileCreated, newFileMenu, &DolphinNewFileMenu::deleteLater);
connect(newFileMenu, &DolphinNewFileMenu::directoryCreated, newFileMenu, &DolphinNewFileMenu::deleteLater);
QMenu* menu = newFileMenu->menu();
menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new")));
addMenu(menu);
QMenu* menu = newFileMenu->menu();
menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New"));
menu->setIcon(QIcon::fromTheme(QStringLiteral("document-new")));
addMenu(menu);
addSeparator();
addSeparator();
} else if (m_baseUrl.scheme().contains(QLatin1String("search")) || m_baseUrl.scheme().contains(QLatin1String("timeline"))) {
addOpenWithActions(fileItemActions);
@ -251,15 +244,6 @@ void DolphinContextMenu::openItemContextMenu()
this);
addAction(openParentInNewTabAction);
addSeparator();
} else if (!DolphinView::openItemAsFolderUrl(m_fileInfo).isEmpty()) {
// Insert 'Open With" entries
addOpenWithActions(fileItemActions);
// insert 'Open in new window' and 'Open in new tab' entries
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_window")));
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("open_in_new_tab")));
addSeparator();
} else {
// Insert 'Open With" entries
@ -289,6 +273,15 @@ void DolphinContextMenu::openItemContextMenu()
insertDefaultItemActions(selectedItemsProps);
// insert 'Add to Places' entry if appropriate
if (m_selectedItems.count() == 1) {
if (m_fileInfo.isDir()) {
if (!placeExists(m_fileInfo.url())) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("add_to_places")));
}
}
}
addSeparator();
fileItemActions.addServiceActionsTo(this);
@ -323,14 +316,7 @@ void DolphinContextMenu::openItemContextMenu()
void DolphinContextMenu::openViewportContextMenu()
{
// setup 'Create New' menu
KNewFileMenu* newFileMenu = m_mainWindow->newFileMenu();
const DolphinView* view = m_mainWindow->activeViewContainer()->view();
newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown());
newFileMenu->checkUpToDate();
newFileMenu->setPopupFiles(m_baseUrl);
addMenu(newFileMenu->menu());
addSeparator();
// Insert 'Open With' entries
KFileItem baseItem = view->rootItem();
@ -349,20 +335,20 @@ void DolphinContextMenu::openViewportContextMenu()
addOpenWithActions(fileItemActions);
}
// Insert 'New Window' and 'New Tab' entries. Don't use "open_in_new_window" and
// "open_in_new_tab" here, as the current selection should get ignored.
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("file_new")));
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("new_tab")));
// Insert 'Add to Places' entry if exactly one item is selected
if (!placeExists(m_mainWindow->activeViewContainer()->url())) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("add_to_places")));
}
addSeparator();
// Set up and insert 'Create New' menu
KNewFileMenu* newFileMenu = m_mainWindow->newFileMenu();
newFileMenu->setViewShowsHiddenFiles(view->hiddenFilesShown());
newFileMenu->checkUpToDate();
newFileMenu->setPopupFiles(m_baseUrl);
addMenu(newFileMenu->menu());
QAction* pasteAction = createPasteAction();
addAction(pasteAction);
// Insert 'Add to Places' entry if it's not already in the places panel
if (!placeExists(m_mainWindow->activeViewContainer()->url())) {
addAction(m_mainWindow->actionCollection()->action(QStringLiteral("add_to_places")));
}
addSeparator();
// Insert 'Sort By' and 'View Mode'
@ -379,6 +365,8 @@ void DolphinContextMenu::openViewportContextMenu()
addCustomActions();
addSeparator();
QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
addAction(propertiesAction);

View file

@ -994,18 +994,15 @@ void DolphinMainWindow::updateControlMenu()
KActionCollection* ac = actionCollection();
// Add "Create New" menu
menu->addMenu(m_newFileMenu->menu());
addActionToMenu(ac->action(QStringLiteral("file_new")), menu);
addActionToMenu(ac->action(QStringLiteral("new_tab")), menu);
addActionToMenu(ac->action(QStringLiteral("closed_tabs")), menu);
menu->addSeparator();
// Overwrite Find action to Search action
QAction *searchAction = ac->action(KStandardAction::name(KStandardAction::Find));
searchAction->setText(i18n("Search..."));
// Add "Edit" actions
bool added = addActionToMenu(ac->action(KStandardAction::name(KStandardAction::Undo)), menu) |
addActionToMenu(searchAction, menu) |
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::SelectAll)), menu) |
addActionToMenu(ac->action(QStringLiteral("invert_selection")), menu);
@ -1021,62 +1018,35 @@ void DolphinMainWindow::updateControlMenu()
menu->addSeparator();
}
added = addActionToMenu(ac->action(QStringLiteral("sort")), menu) |
addActionToMenu(ac->action(QStringLiteral("view_mode")), menu) |
addActionToMenu(ac->action(QStringLiteral("additional_info")), menu) |
addActionToMenu(ac->action(QStringLiteral("show_preview")), menu) |
added = addActionToMenu(ac->action(QStringLiteral("show_preview")), menu) |
addActionToMenu(ac->action(QStringLiteral("show_in_groups")), menu) |
addActionToMenu(ac->action(QStringLiteral("show_hidden_files")), menu);
if (added) {
menu->addSeparator();
}
added = addActionToMenu(ac->action(QStringLiteral("split_view")), menu) |
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::Redisplay)), menu) |
addActionToMenu(ac->action(QStringLiteral("show_hidden_files")), menu) |
addActionToMenu(ac->action(QStringLiteral("additional_info")), menu) |
addActionToMenu(ac->action(QStringLiteral("view_properties")), menu);
if (added) {
menu->addSeparator();
}
addActionToMenu(ac->action(QStringLiteral("panels")), menu);
QMenu* locationBarMenu = new QMenu(i18nc("@action:inmenu", "Location Bar"), menu);
locationBarMenu->addAction(ac->action(QStringLiteral("editable_location")));
locationBarMenu->addAction(ac->action(QStringLiteral("replace_location")));
menu->addMenu(locationBarMenu);
// Add a curated assortment of items from the "Tools" menu
addActionToMenu(ac->action(QStringLiteral("show_filter_bar")), menu);
addActionToMenu(ac->action(QStringLiteral("open_terminal")), menu);
menu->addSeparator();
// Add "Go" menu
QMenu* goMenu = new QMenu(i18nc("@action:inmenu", "Go"), menu);
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Back)));
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Forward)));
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Up)));
goMenu->addAction(ac->action(KStandardAction::name(KStandardAction::Home)));
goMenu->addAction(ac->action(QStringLiteral("closed_tabs")));
KActionMenu *bookmarkMenu = new KActionMenu(i18nc("@title:menu", "&Bookmarks"), goMenu);
m_bookmarkHandler->fillControlMenu(bookmarkMenu->menu(), ac);
goMenu->addAction(bookmarkMenu);
menu->addMenu(goMenu);
// Add "Tool" menu
QMenu* toolsMenu = new QMenu(i18nc("@action:inmenu", "Tools"), menu);
toolsMenu->addAction(ac->action(QStringLiteral("show_filter_bar")));
toolsMenu->addAction(ac->action(QStringLiteral("compare_files")));
toolsMenu->addAction(ac->action(QStringLiteral("open_terminal")));
toolsMenu->addAction(ac->action(QStringLiteral("change_remote_encoding")));
menu->addMenu(toolsMenu);
// Add "Show Panels" menu
addActionToMenu(ac->action(QStringLiteral("panels")), menu);
// 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);
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ShowMenubar)), menu);
// Add "Help" menu
menu->addMenu(m_helpMenu->menu());
menu->addSeparator();
addActionToMenu(ac->action(KStandardAction::name(KStandardAction::ShowMenubar)), menu);
auto helpMenu = m_helpMenu->menu();
helpMenu->setIcon(QIcon::fromTheme(QStringLiteral("system-help")));
menu->addMenu(helpMenu);
}
void DolphinMainWindow::updateToolBar()