From 9a6950657215f2195001795e21785d276fb20744 Mon Sep 17 00:00:00 2001 From: Arjun AK Date: Tue, 22 Jul 2014 17:31:49 +0530 Subject: [PATCH] make CTRL+SHIFT+T reopen last closed tab BUG: 336818 FEATURE: 118994 --- src/dolphinmainwindow.cpp | 14 ++++++++++++++ src/dolphinmainwindow.h | 2 ++ src/dolphinrecenttabsmenu.cpp | 16 ++++++++++++---- src/dolphinrecenttabsmenu.h | 2 ++ src/dolphinui.rc | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index b51389fd4..d321d3b4a 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -1220,6 +1220,11 @@ void DolphinMainWindow::activeViewChanged() setActiveViewContainer(tabPage->activeViewContainer()); } +void DolphinMainWindow::closedTabsCountChanged(unsigned int count) +{ + actionCollection()->action("undo_close_tab")->setEnabled(count > 0); +} + void DolphinMainWindow::setActiveViewContainer(DolphinViewContainer* viewContainer) { Q_ASSERT(viewContainer); @@ -1350,6 +1355,15 @@ void DolphinMainWindow::setupActions() recentTabsMenu, SLOT(rememberClosedTab(KUrl,KUrl))); connect(recentTabsMenu, SIGNAL(restoreClosedTab(KUrl,KUrl)), this, SLOT(openNewActivatedTab(KUrl,KUrl))); + connect(recentTabsMenu, SIGNAL(closedTabsCountChanged(uint)), + this, SLOT(closedTabsCountChanged(uint))); + + KAction* undoCloseTab = actionCollection()->addAction("undo_close_tab"); + undoCloseTab->setText(i18nc("@action:inmenu File", "Undo close tab")); + undoCloseTab->setShortcut(Qt::CTRL | Qt::SHIFT | Qt::Key_T); + undoCloseTab->setIcon(KIcon("edit-undo")); + undoCloseTab->setEnabled(false); + connect(undoCloseTab, SIGNAL(triggered()), recentTabsMenu, SLOT(undoCloseTab())); KAction* forwardAction = KStandardAction::forward(this, SLOT(goForward()), actionCollection()); connect(forwardAction, SIGNAL(triggered(Qt::MouseButtons,Qt::KeyboardModifiers)), this, SLOT(goForward(Qt::MouseButtons))); diff --git a/src/dolphinmainwindow.h b/src/dolphinmainwindow.h index 9c7f185bc..6f37f42ee 100644 --- a/src/dolphinmainwindow.h +++ b/src/dolphinmainwindow.h @@ -468,6 +468,8 @@ private slots: void activeViewChanged(); + void closedTabsCountChanged(unsigned int count); + private: /** * Activates the given view, which means that diff --git a/src/dolphinrecenttabsmenu.cpp b/src/dolphinrecenttabsmenu.cpp index a39f9945b..2335f1bf4 100644 --- a/src/dolphinrecenttabsmenu.cpp +++ b/src/dolphinrecenttabsmenu.cpp @@ -60,7 +60,7 @@ void DolphinRecentTabsMenu::rememberClosedTab(const KUrl& primaryUrl, const KUrl } else { insertAction(menu()->actions().at(2), action); } - + emit closedTabsCountChanged(menu()->actions().size() - 2); // Assure that only up to 6 closed tabs are shown in the menu. // 8 because of clear action + separator + 6 closed tabs if (menu()->actions().size() > 8) { @@ -70,6 +70,12 @@ void DolphinRecentTabsMenu::rememberClosedTab(const KUrl& primaryUrl, const KUrl KAcceleratorManager::manage(menu()); } +void DolphinRecentTabsMenu::undoCloseTab() +{ + Q_ASSERT(menu()->actions().size() > 2); + handleAction(menu()->actions().at(2)); +} + void DolphinRecentTabsMenu::handleAction(QAction* action) { if (action == m_clearListAction) { @@ -80,14 +86,16 @@ void DolphinRecentTabsMenu::handleAction(QAction* action) for (int i = 2; i < count; ++i) { removeAction(actions.at(i)); } + emit closedTabsCountChanged(0); } else { const KUrl::List urls = action->data().value(); - if (urls.count() == 2) { - emit restoreClosedTab(urls.first(), urls.last()); - } removeAction(action); delete action; action = 0; + if (urls.count() == 2) { + emit restoreClosedTab(urls.first(), urls.last()); + } + emit closedTabsCountChanged(menu()->actions().size() - 2); } if (menu()->actions().count() <= 2) { diff --git a/src/dolphinrecenttabsmenu.h b/src/dolphinrecenttabsmenu.h index 34d41530b..b5acc735e 100644 --- a/src/dolphinrecenttabsmenu.h +++ b/src/dolphinrecenttabsmenu.h @@ -35,9 +35,11 @@ public: public slots: void rememberClosedTab(const KUrl& primaryUrl, const KUrl& secondaryUrl); + void undoCloseTab(); signals: void restoreClosedTab(const KUrl& primaryUrl, const KUrl& secondaryUrl); + void closedTabsCountChanged(unsigned int count); private slots: void handleAction(QAction* action); diff --git a/src/dolphinui.rc b/src/dolphinui.rc index 52826bb43..f197af402 100644 --- a/src/dolphinui.rc +++ b/src/dolphinui.rc @@ -6,6 +6,7 @@ +