]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Added code for a "Rename Tab" feature.
authorambar chakravartty <chakravarttyambar@gmail.com>
Mon, 27 Jan 2025 11:20:13 +0000 (16:50 +0530)
committerMéven Car <meven@kde.org>
Thu, 6 Feb 2025 14:32:35 +0000 (14:32 +0000)
BUG: 197009

src/dolphintabbar.cpp
src/dolphintabbar.h
src/dolphintabpage.cpp
src/dolphintabpage.h
src/dolphintabwidget.cpp
src/dolphintabwidget.h

index f6af9932da2f4df3a15da0884a84a3484748a3e2..b942c4fd354fbad50b593f4e2ae34df5b1eca307 100644 (file)
@@ -9,6 +9,7 @@
 #include <KLocalizedString>
 
 #include <QDragEnterEvent>
+#include <QInputDialog>
 #include <QMenu>
 #include <QMimeData>
 #include <QTimer>
@@ -157,6 +158,8 @@ void DolphinTabBar::contextMenuEvent(QContextMenuEvent *event)
         QAction *closeOtherTabsAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-close-other")), i18nc("@action:inmenu", "Close Other Tabs"));
         QAction *closeTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-close")), i18nc("@action:inmenu", "Close Tab"));
 
+        QAction *renameTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-rename")), i18nc("@action:inmenu", "Rename Tab"));
+
         QAction *selectedAction = menu.exec(event->globalPos());
         if (selectedAction == newTabAction) {
             Q_EMIT openNewActivatedTab(index);
@@ -172,6 +175,13 @@ void DolphinTabBar::contextMenuEvent(QContextMenuEvent *event)
             }
         } else if (selectedAction == closeTabAction) {
             Q_EMIT tabCloseRequested(index);
+        } else if (selectedAction == renameTabAction) {
+            bool renamed = false;
+            const QString tabNewName = QInputDialog::getText(this, i18n("Rename Tab"), i18n("New tab name:"), QLineEdit::Normal, tabText(index), &renamed);
+
+            if (renamed) {
+                Q_EMIT tabRenamed(index, tabNewName);
+            }
         }
 
         return;
index 4a59199bee1ab4fe6827460c1740668e201ac407..f176fb6d285fcdb48c62bcec9bab51f674cc6ab9 100644 (file)
@@ -21,6 +21,7 @@ Q_SIGNALS:
     void tabDragMoveEvent(int index, QDragMoveEvent *event);
     void tabDropEvent(int index, QDropEvent *event);
     void tabDetachRequested(int index);
+    void tabRenamed(int index, const QString &name);
 
 protected:
     void dragEnterEvent(QDragEnterEvent *event) override;
index dbc1ff147ebb4baf81a2bb21a6a2256122b202d0..4a061e3ec4d23bc1f2c905d6b72c85150bb0e082 100644 (file)
@@ -13,6 +13,7 @@
 #include <QGridLayout>
 #include <QStyle>
 #include <QVariantAnimation>
+#include <quuid.h>
 
 DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget *parent)
     : QWidget(parent)
@@ -342,6 +343,16 @@ void DolphinTabPage::setActive(bool active)
     activeViewContainer()->setActive(active);
 }
 
+void DolphinTabPage::setTitle(const QString &name)
+{
+    m_title = QString(name);
+}
+
+QString DolphinTabPage::title()
+{
+    return m_title;
+}
+
 void DolphinTabPage::slotAnimationFinished()
 {
     for (int i = 0; i < m_splitter->count(); ++i) {
index 4a8bd365a56a14bdf5042441fbabfb6e4034b047..5dafcd5dc528d205e6914af383e4871708463556 100644 (file)
@@ -13,7 +13,9 @@
 #include <QPointer>
 #include <QSplitter>
 #include <QUrl>
+#include <QUuid>
 #include <QWidget>
+#include <quuid.h>
 
 class DolphinNavigatorsWidgetAction;
 class DolphinViewContainer;
@@ -140,6 +142,10 @@ public:
 
     void switchActiveView();
 
+    void setTitle(const QString &name);
+
+    QString title();
+
 Q_SIGNALS:
     void activeViewChanged(DolphinViewContainer *viewContainer);
     void activeViewUrlChanged(const QUrl &url);
@@ -201,6 +207,7 @@ private:
     bool m_primaryViewActive;
     bool m_splitViewEnabled;
     bool m_active;
+    QString m_title;
 };
 
 class DolphinTabPageSplitterHandle : public QSplitterHandle
index 5ad2a368cad7630b7f17fcbdb3eba23d4714f57d..41b2a3eb9bb9abc481d337791f15b4f6bad171a6 100644 (file)
@@ -38,6 +38,7 @@ DolphinTabWidget::DolphinTabWidget(DolphinNavigatorsWidgetAction *navigatorsWidg
     connect(tabBar, &DolphinTabBar::tabDragMoveEvent, this, &DolphinTabWidget::tabDragMoveEvent);
     connect(tabBar, &DolphinTabBar::tabDropEvent, this, &DolphinTabWidget::tabDropEvent);
     connect(tabBar, &DolphinTabBar::tabDetachRequested, this, &DolphinTabWidget::detachTab);
+    connect(tabBar, &DolphinTabBar::tabRenamed, this, &DolphinTabWidget::renameTab);
 
     setTabBar(tabBar);
     setDocumentMode(true);
@@ -122,6 +123,13 @@ void DolphinTabWidget::refreshViews()
 void DolphinTabWidget::updateTabName(int index)
 {
     Q_ASSERT(index >= 0);
+
+    if (!tabPageAt(index)->title().isEmpty()) {
+        QString name = tabPageAt(index)->title();
+        tabBar()->setTabText(index, name);
+        return;
+    }
+
     tabBar()->setTabText(index, tabName(tabPageAt(index)));
 }
 
@@ -472,6 +480,16 @@ void DolphinTabWidget::currentTabChanged(int index)
     m_lastViewedTab = tabPage;
 }
 
+void DolphinTabWidget::renameTab(int index, const QString &name)
+{
+    if (name.isEmpty()) {
+        updateTabName(index);
+    } else {
+        tabPageAt(index)->setTitle(name);
+        tabBar()->setTabText(index, name);
+    }
+}
+
 void DolphinTabWidget::tabInserted(int index)
 {
     QTabWidget::tabInserted(index);
@@ -506,6 +524,7 @@ QString DolphinTabWidget::tabName(DolphinTabPage *tabPage) const
     if (!tabPage) {
         return QString();
     }
+
     // clang-format off
     QString name;
     if (tabPage->splitViewEnabled()) {
index 52d3fd626889ad4ab7f14633522b0e24fe5cfc84..3d9ba3a51e8feb84753d3e6d7146f0dcec45f1c4 100644 (file)
@@ -229,6 +229,8 @@ private Q_SLOTS:
 
     void currentTabChanged(int index);
 
+    void renameTab(int index, const QString &name);
+
 protected:
     void tabInserted(int index) override;
     void tabRemoved(int index) override;