]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphintabwidget.cpp
Unify window and tab title
[dolphin.git] / src / dolphintabwidget.cpp
index 94b7a0144ccb2540b36787a5a256b9a11243e90b..600974f561ce8272d2fbb7065fc61e398a609a8b 100644 (file)
 #include "dolphintabpage.h"
 #include "dolphinviewcontainer.h"
 
-#include <QApplication>
-#include <QDropEvent>
 #include <KConfigGroup>
+#include <KRun>
 #include <KShell>
 #include <kio/global.h>
-#include <KRun>
+
+#include <QApplication>
+#include <QDropEvent>
 
 DolphinTabWidget::DolphinTabWidget(QWidget* parent) :
     QTabWidget(parent),
     m_placesSelectorVisible(true),
-    m_previousTab(0)
+    m_lastViewedTab(0)
 {
     connect(this, &DolphinTabWidget::tabCloseRequested,
             this, static_cast<void (DolphinTabWidget::*)(int)>(&DolphinTabWidget::closeTab));
@@ -60,6 +61,18 @@ DolphinTabPage* DolphinTabWidget::currentTabPage() const
     return tabPageAt(currentIndex());
 }
 
+DolphinTabPage* DolphinTabWidget::nextTabPage() const
+{
+    const int index = currentIndex() + 1;
+    return tabPageAt(index < count() ? index : 0);
+}
+
+DolphinTabPage* DolphinTabWidget::prevTabPage() const
+{
+    const int index = currentIndex() - 1;
+    return tabPageAt(index >= 0 ? index : (count() - 1));
+}
+
 DolphinTabPage* DolphinTabWidget::tabPageAt(const int index) const
 {
     return static_cast<DolphinTabPage*>(widget(index));
@@ -103,6 +116,7 @@ void DolphinTabWidget::refreshViews()
 {
     const int tabCount = count();
     for (int i = 0; i < tabCount; ++i) {
+        tabBar()->setTabText(i, tabName());
         tabPageAt(i)->refreshViews();
     }
 }
@@ -147,7 +161,7 @@ void DolphinTabWidget::openNewTab(const QUrl& primaryUrl, const QUrl& secondaryU
             this, &DolphinTabWidget::activeViewChanged);
     connect(tabPage, &DolphinTabPage::activeViewUrlChanged,
             this, &DolphinTabWidget::tabUrlChanged);
-    addTab(tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName(primaryUrl));
+    addTab(tabPage, QIcon::fromTheme(KIO::iconNameForUrl(primaryUrl)), tabName());
 
     if (focusWidget) {
         // The DolphinViewContainer grabbed the keyboard focus. As the tab is opened
@@ -284,7 +298,7 @@ void DolphinTabWidget::tabDropEvent(int index, QDropEvent* event)
 {
     if (index >= 0) {
         DolphinView* view = tabPageAt(index)->activeViewContainer()->view();
-        view->dropUrls(view->url(), event);
+        view->dropUrls(view->url(), event, view);
     }
 }
 
@@ -292,7 +306,7 @@ void DolphinTabWidget::tabUrlChanged(const QUrl& url)
 {
     const int index = indexOf(qobject_cast<QWidget*>(sender()));
     if (index >= 0) {
-        tabBar()->setTabText(index, tabName(url));
+        tabBar()->setTabText(index, tabName());
         tabBar()->setTabIcon(index, QIcon::fromTheme(KIO::iconNameForUrl(url)));
 
         // Emit the currentUrlChanged signal if the url of the current tab has been changed.
@@ -304,8 +318,8 @@ void DolphinTabWidget::tabUrlChanged(const QUrl& url)
 
 void DolphinTabWidget::currentTabChanged(int index)
 {
-    // previous tab deactivation
-    if (DolphinTabPage* tabPage = tabPageAt(m_previousTab)) {
+    // last-viewed tab deactivation
+    if (DolphinTabPage* tabPage = tabPageAt(m_lastViewedTab)) {
         tabPage->setActive(false);
     }
     DolphinTabPage* tabPage = tabPageAt(index);
@@ -313,7 +327,7 @@ void DolphinTabWidget::currentTabChanged(int index)
     emit activeViewChanged(viewContainer);
     emit currentUrlChanged(viewContainer->url());
     tabPage->setActive(true);
-    m_previousTab = index;
+    m_lastViewedTab = index;
 }
 
 void DolphinTabWidget::tabInserted(int index)
@@ -340,20 +354,13 @@ void DolphinTabWidget::tabRemoved(int index)
     emit tabCountChanged(count());
 }
 
-QString DolphinTabWidget::tabName(const QUrl& url) const
+QString DolphinTabWidget::tabName() const
 {
-    QString name;
-    if (url == QUrl(QStringLiteral("file:///"))) {
-        name = '/';
-    } else {
-        name = url.adjusted(QUrl::StripTrailingSlash).fileName();
-        if (name.isEmpty()) {
-            name = url.scheme();
-        } else {
-            // Make sure that a '&' inside the directory name is displayed correctly
-            // and not misinterpreted as a keyboard shortcut in QTabBar::setTabText()
-            name.replace('&', QLatin1String("&&"));
-        }
+    if (currentTabPage() == nullptr) {
+        return QString();
     }
-    return name;
+    QString name = currentTabPage()->activeViewContainer()->getCaption();
+    // Make sure that a '&' inside the directory name is displayed correctly
+    // and not misinterpreted as a keyboard shortcut in QTabBar::setTabText()
+    return name.replace('&', QLatin1String("&&"));
 }