]> cloud.milkyroute.net Git - dolphin.git/commitdiff
make CTRL+SHIFT+T reopen last closed tab
authorArjun AK <arjunak234@gmail.com>
Tue, 22 Jul 2014 12:01:49 +0000 (17:31 +0530)
committerArjun AK <arjunak234@gmail.com>
Tue, 22 Jul 2014 12:01:49 +0000 (17:31 +0530)
BUG: 336818
FEATURE: 118994

src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/dolphinrecenttabsmenu.cpp
src/dolphinrecenttabsmenu.h
src/dolphinui.rc

index b51389fd402cc23f11f85eb8404d0bccf5b2934a..d321d3b4a763e4df4d0bdd7e57cb35a0df162176 100644 (file)
@@ -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)));
index 9c7f185bce2bed6f5c8c95353571c72654a78425..6f37f42ee6ba19ed0aa756560f1b7fb1fc29a0fc 100644 (file)
@@ -468,6 +468,8 @@ private slots:
 
     void activeViewChanged();
 
+    void closedTabsCountChanged(unsigned int count);
+
 private:
     /**
      * Activates the given view, which means that
index a39f9945bf681516238af00b0b1618476ccecccb..2335f1bf48ef8df63b2fe404fe0bc1a46e6600ec 100644 (file)
@@ -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<KUrl::List>();
-        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) {
index 34d41530b6b4096d60829b2a4e6115a19c6a577d..b5acc735e57ef9d96bc1d652e2510cb58fd74ee0 100644 (file)
@@ -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);
index 52826bb43a1a7556ddca433262caaab8b0235924..f197af402e1ece48e68378e14ce654ca8e81cfa0 100644 (file)
@@ -6,6 +6,7 @@
             <Action name="new_window" />
             <Action name="new_tab" />
             <Action name="close_tab" />
+           <Action name="undo_close_tab" />
             <Separator/>
             <Action name="rename" />
             <Action name="move_to_trash" />