diff --git a/krusader/BookMan/krbookmark.h b/krusader/BookMan/krbookmark.h --- a/krusader/BookMan/krbookmark.h +++ b/krusader/BookMan/krbookmark.h @@ -26,8 +26,9 @@ // QtWidgets #include - class KActionCollection; +class ListPanelActions; + class KrBookmark: public QAction { @@ -57,12 +58,14 @@ return _children; } - static KrBookmark* getExistingBookmark(QString actionName, KActionCollection *collection); + static KrBookmark * getExistingBookmark(QString actionName, KActionCollection *collection); + // ----- special bookmarks - static KrBookmark* trash(KActionCollection *collection); - static KrBookmark* virt(KActionCollection *collection); - static KrBookmark* lan(KActionCollection *collection); - static KrBookmark* separator(); + static KrBookmark * trash(KActionCollection *collection); + static KrBookmark * virt(KActionCollection *collection); + static KrBookmark * lan(KActionCollection *collection); + static QAction * jumpBackAction(KActionCollection *collection, bool isSetter = false, ListPanelActions *sourceActions = 0); + static KrBookmark * separator(); signals: void activated(const QUrl &url); diff --git a/krusader/BookMan/krbookmark.cpp b/krusader/BookMan/krbookmark.cpp --- a/krusader/BookMan/krbookmark.cpp +++ b/krusader/BookMan/krbookmark.cpp @@ -21,6 +21,7 @@ #include "../krglobal.h" #include "../Archive/krarchandler.h" #include "../FileSystem/krtrashhandler.h" +#include "../Panel/listpanelactions.h" #include #include @@ -71,12 +72,12 @@ } } -KrBookmark* KrBookmark::getExistingBookmark(QString actionName, KActionCollection *collection) +KrBookmark * KrBookmark::getExistingBookmark(QString actionName, KActionCollection *collection) { return static_cast(collection->action(BM_NAME(actionName))); } -KrBookmark* KrBookmark::trash(KActionCollection *collection) +KrBookmark * KrBookmark::trash(KActionCollection *collection) { KrBookmark *bm = getExistingBookmark(i18n(NAME_TRASH), collection); if (!bm) @@ -86,7 +87,7 @@ return bm; } -KrBookmark* KrBookmark::virt(KActionCollection *collection) +KrBookmark * KrBookmark::virt(KActionCollection *collection) { KrBookmark *bm = getExistingBookmark(i18n(NAME_VIRTUAL), collection); if (!bm) { @@ -96,7 +97,7 @@ return bm; } -KrBookmark* KrBookmark::lan(KActionCollection *collection) +KrBookmark * KrBookmark::lan(KActionCollection *collection) { KrBookmark *bm = getExistingBookmark(i18n(NAME_LAN), collection); if (!bm) { @@ -106,7 +107,32 @@ return bm; } -KrBookmark* KrBookmark::separator() +QAction * KrBookmark::jumpBackAction(KActionCollection *collection, bool isSetter, ListPanelActions *sourceActions) +{ + auto actionName = isSetter ? QString("setJumpBack") : QString("jumpBack"); + auto action = collection->action(actionName); + if (action) { + return action; + } + + if (!sourceActions) { + return nullptr; + } + + // copy essential part of source action + auto sourceAction = isSetter ? sourceActions->actSetJumpBack : sourceActions->actJumpBack; + action = new QAction(sourceAction->icon(), sourceAction->text(), sourceAction); + action->setShortcut(sourceAction->shortcut()); + action->setShortcutContext(Qt::WidgetShortcut); + connect(action, &QAction::triggered, sourceAction, &QAction::trigger); + // ensure there are no accelerator keys coming from another menu + action->setText(KLocalizedString::removeAcceleratorMarker(action->text())); + + collection->addAction(actionName, action); + return action; +} + +KrBookmark * KrBookmark::separator() { KrBookmark *bm = new KrBookmark(""); bm->_separator = true; diff --git a/krusader/BookMan/krbookmarkhandler.cpp b/krusader/BookMan/krbookmarkhandler.cpp --- a/krusader/BookMan/krbookmarkhandler.cpp +++ b/krusader/BookMan/krbookmarkhandler.cpp @@ -434,7 +434,7 @@ // do we need to add special bookmarks? if (SPECIAL_BOOKMARKS) { - if (hasTrash || hasLan || hasVirtualFS || hasJumpback) + if (hasTrash || hasLan || hasVirtualFS) menu->addSeparator(); KrBookmark *bm; @@ -462,21 +462,23 @@ } if (hasJumpback) { - // add the jump-back button + menu->addSeparator(); + ListPanelActions *actions = _mainWindow->listPanelActions(); - if (actions) { - menu->addAction(actions->actJumpBack); - _specialBookmarks.append(actions->actJumpBack); - menu->addSeparator(); - menu->addAction(actions->actSetJumpBack); - _specialBookmarks.append(actions->actSetJumpBack); + + auto action = KrBookmark::jumpBackAction(_privateCollection, true, actions); + if (action) { + menu->addAction(action); + } + + action = KrBookmark::jumpBackAction(_privateCollection, false, actions); + if (action) { + menu->addAction(action); } } } - if (!hasJumpback) - menu->addSeparator(); - + menu->addSeparator(); menu->addAction(KrActions::actAddBookmark); _specialBookmarks.append(KrActions::actAddBookmark); QAction *bmAct = menu->addAction(krLoader->loadIcon("bookmarks", KIconLoader::Small),