diff --git a/src/dolphintabbar.h b/src/dolphintabbar.h --- a/src/dolphintabbar.h +++ b/src/dolphintabbar.h @@ -33,6 +33,7 @@ void openNewActivatedTab(int index); void tabDropEvent(int index, QDropEvent* event); void tabDetachRequested(int index); + void tabRenamed(int index, QString &name); protected: void dragEnterEvent(QDragEnterEvent* event) override; diff --git a/src/dolphintabbar.cpp b/src/dolphintabbar.cpp --- a/src/dolphintabbar.cpp +++ b/src/dolphintabbar.cpp @@ -20,11 +20,14 @@ #include "dolphintabbar.h" #include +#include #include #include #include #include +#include +#include DolphinTabBar::DolphinTabBar(QWidget* parent) : QTabBar(parent), @@ -138,6 +141,7 @@ // Tab context menu QMenu menu(this); + QAction* renameTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("edit-rename")), i18nc("@action:inmenu", "Rename Tab")); QAction* newTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-new")), i18nc("@action:inmenu", "New Tab")); QAction* detachTabAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-detach")), i18nc("@action:inmenu", "Detach Tab")); QAction* closeOtherTabsAction = menu.addAction(QIcon::fromTheme(QStringLiteral("tab-close-other")), i18nc("@action:inmenu", "Close Other Tabs")); @@ -158,6 +162,14 @@ } } else if (selectedAction == closeTabAction) { emit tabCloseRequested(index); + } else if (selectedAction == renameTabAction) { + bool result=false; + QString newTabName = QInputDialog::getText(this, + i18n("Rename tab"), i18n("New tab name"), QLineEdit::Normal, tabText(index), &result + ); + if (result && newTabName != tabText(index)) { + emit tabRenamed(index, newTabName); + } } return; diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -22,6 +22,7 @@ #include #include +#include class DolphinViewContainer; class DolphinTabPage; @@ -172,6 +173,7 @@ * the recent tabs menu. */ void restoreClosedTab(const QByteArray& state); + private slots: /** @@ -199,6 +201,8 @@ void tabUrlChanged(const QUrl& url); void currentTabChanged(int index); + + void renameTab(int index, QString& name); protected: void tabInserted(int index) override; @@ -216,6 +220,7 @@ bool m_placesSelectorVisible; int m_lastViewedTab; + QMap m_tabNames; }; #endif diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -30,11 +30,13 @@ #include #include +#include DolphinTabWidget::DolphinTabWidget(QWidget* parent) : QTabWidget(parent), m_placesSelectorVisible(true), - m_lastViewedTab(0) + m_lastViewedTab(0), + m_tabNames() { connect(this, &DolphinTabWidget::tabCloseRequested, this, static_cast(&DolphinTabWidget::closeTab)); @@ -48,6 +50,7 @@ this, &DolphinTabWidget::tabDropEvent); connect(tabBar, &DolphinTabBar::tabDetachRequested, this, &DolphinTabWidget::detachTab); + connect(tabBar, &DolphinTabBar::tabRenamed, this, &DolphinTabWidget::renameTab); tabBar->hide(); setTabBar(tabBar); @@ -116,7 +119,11 @@ { const int tabCount = count(); for (int i = 0; i < tabCount; ++i) { - tabBar()->setTabText(i, tabName(tabPageAt(i))); + if (m_tabNames.contains(i)) { + tabBar()->setTabText(i, m_tabNames.value(i)); + } else { + tabBar()->setTabText(i, tabName(tabPageAt(i))); + } tabPageAt(i)->refreshViews(); } } @@ -269,6 +276,17 @@ currentTabPage()->restoreState(state); } +void DolphinTabWidget::renameTab(int index, QString& name) { + if (name.isEmpty()) { + m_tabNames.remove(index); + tabBar()->setTabText(index, tabName(tabPageAt(index))); + } + else { + tabBar()->setTabText(index, name); + m_tabNames.insert(index, name); + } +} + void DolphinTabWidget::detachTab(int index) { Q_ASSERT(index >= 0); @@ -307,7 +325,9 @@ { const int index = indexOf(qobject_cast(sender())); if (index >= 0) { - tabBar()->setTabText(index, tabName(tabPageAt(index))); + if (!m_tabNames.contains(index)) { + tabBar()->setTabText(index, tabName(tabPageAt(index))); + } tabBar()->setTabIcon(index, QIcon::fromTheme(KIO::iconNameForUrl(url))); // Emit the currentUrlChanged signal if the url of the current tab has been changed.