┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinmainwindow.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2008-04-13 20:20:30 +0000
committerPeter Penz <[email protected]>2008-04-13 20:20:30 +0000
commitac9e01f789110c12f536c2442a6cc92df96a0c36 (patch)
treede74440fc6a419d277441a63d033c4a492cdb4bf /src/dolphinmainwindow.cpp
parent9d394f7a4a84713a89ae34bb0716d2534029a514 (diff)
implemented functionality for closing tabs
svn path=/trunk/KDE/kdebase/apps/; revision=796587
Diffstat (limited to 'src/dolphinmainwindow.cpp')
-rw-r--r--src/dolphinmainwindow.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp
index 74d93329c..2de0f29a7 100644
--- a/src/dolphinmainwindow.cpp
+++ b/src/dolphinmainwindow.cpp
@@ -268,6 +268,7 @@ void DolphinMainWindow::openNewTab(const KUrl& url)
// Only one view is open currently and hence no tab is shown at
// all. Before creating a tab for 'url', provide a tab for the current URL.
m_tabBar->addTab(KIcon("folder"), m_activeViewContainer->url().fileName());
+ m_tabBar->blockSignals(false);
}
m_tabBar->addTab(KIcon("folder"), url.fileName());
@@ -693,6 +694,46 @@ void DolphinMainWindow::setActiveTab(int index)
viewTab.secondaryView);
}
+void DolphinMainWindow::closeTab(int index)
+{
+ Q_ASSERT(index >= 0);
+ Q_ASSERT(index < m_viewTab.count());
+ if (m_viewTab.count() == 1) {
+ // the last tab may never get closed
+ return;
+ }
+
+ if (index == m_tabIndex) {
+ // The tab that should be closed is the active tab. Activate the
+ // previous tab before closing the tab.
+ setActiveTab((index > 0) ? index - 1 : 1);
+ }
+
+ // delete tab
+ m_viewTab[index].primaryView->deleteLater();
+ if (m_viewTab[index].secondaryView != 0) {
+ m_viewTab[index].secondaryView->deleteLater();
+ }
+ m_viewTab[index].splitter->deleteLater();
+ m_viewTab.erase(m_viewTab.begin() + index);
+
+ m_tabBar->blockSignals(true);
+ m_tabBar->removeTab(index);
+
+ if (m_tabIndex > index) {
+ m_tabIndex--;
+ Q_ASSERT(m_tabIndex >= 0);
+ }
+
+ // if only one tab is left, also remove the tab entry so that
+ // closing the last tab is not possible
+ if (m_viewTab.count() == 1) {
+ m_tabBar->removeTab(0);
+ } else {
+ m_tabBar->blockSignals(false);
+ }
+}
+
void DolphinMainWindow::init()
{
DolphinSettings& settings = DolphinSettings::instance();
@@ -729,8 +770,12 @@ void DolphinMainWindow::init()
m_tabBar = new KTabBar(this);
m_tabBar->setHoverCloseButton(true);
+ m_tabBar->setHoverCloseButtonDelayed(false);
connect(m_tabBar, SIGNAL(currentChanged(int)),
this, SLOT(setActiveTab(int)));
+ connect(m_tabBar, SIGNAL(closeRequest(int)),
+ this, SLOT(closeTab(int)));
+ m_tabBar->blockSignals(true); // signals get unblocked after at least 2 tabs are open
QWidget* centralWidget = new QWidget(this);
m_centralWidgetLayout = new QVBoxLayout(centralWidget);