From 625599462a8ec82f0e43267d333b3ed74a4401bf Mon Sep 17 00:00:00 2001 From: ambar chakravartty Date: Mon, 27 Jan 2025 16:50:13 +0530 Subject: [PATCH] Added code for a "Rename Tab" feature. BUG: 197009 --- src/dolphintabbar.cpp | 10 ++++++++++ src/dolphintabbar.h | 1 + src/dolphintabpage.cpp | 11 +++++++++++ src/dolphintabpage.h | 7 +++++++ src/dolphintabwidget.cpp | 19 +++++++++++++++++++ src/dolphintabwidget.h | 2 ++ 6 files changed, 50 insertions(+) diff --git a/src/dolphintabbar.cpp b/src/dolphintabbar.cpp index f6af9932d..b942c4fd3 100644 --- a/src/dolphintabbar.cpp +++ b/src/dolphintabbar.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -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; diff --git a/src/dolphintabbar.h b/src/dolphintabbar.h index 4a59199be..f176fb6d2 100644 --- a/src/dolphintabbar.h +++ b/src/dolphintabbar.h @@ -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; diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp index dbc1ff147..4a061e3ec 100644 --- a/src/dolphintabpage.cpp +++ b/src/dolphintabpage.cpp @@ -13,6 +13,7 @@ #include #include #include +#include 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) { diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h index 4a8bd365a..5dafcd5dc 100644 --- a/src/dolphintabpage.h +++ b/src/dolphintabpage.h @@ -13,7 +13,9 @@ #include #include #include +#include #include +#include 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 diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index 5ad2a368c..41b2a3eb9 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -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()) { diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h index 52d3fd626..3d9ba3a51 100644 --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -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; -- 2.47.3