#include <KLocalizedString>
#include <QDragEnterEvent>
+#include <QInputDialog>
#include <QMenu>
#include <QMimeData>
#include <QTimer>
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);
}
} 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;
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;
#include <QGridLayout>
#include <QStyle>
#include <QVariantAnimation>
+#include <quuid.h>
DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget *parent)
: QWidget(parent)
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) {
#include <QPointer>
#include <QSplitter>
#include <QUrl>
+#include <QUuid>
#include <QWidget>
+#include <quuid.h>
class DolphinNavigatorsWidgetAction;
class DolphinViewContainer;
void switchActiveView();
+ void setTitle(const QString &name);
+
+ QString title();
+
Q_SIGNALS:
void activeViewChanged(DolphinViewContainer *viewContainer);
void activeViewUrlChanged(const QUrl &url);
bool m_primaryViewActive;
bool m_splitViewEnabled;
bool m_active;
+ QString m_title;
};
class DolphinTabPageSplitterHandle : public QSplitterHandle
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);
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)));
}
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);
if (!tabPage) {
return QString();
}
+
// clang-format off
QString name;
if (tabPage->splitViewEnabled()) {
void currentTabChanged(int index);
+ void renameTab(int index, const QString &name);
+
protected:
void tabInserted(int index) override;
void tabRemoved(int index) override;