// 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());
// hide current tab content
m_viewTab[m_tabIndex].isPrimaryViewActive = m_viewTab[m_tabIndex].primaryView->isActive();
QSplitter* splitter = m_viewTab[m_tabIndex].splitter;
- m_centralWidgetLayout->removeWidget(splitter);
splitter->hide();
+ m_centralWidgetLayout->removeWidget(splitter);
// show active tab content
m_tabIndex = index;
ViewTab& viewTab = m_viewTab[index];
m_centralWidgetLayout->addWidget(viewTab.splitter);
- viewTab.splitter->show();
viewTab.primaryView->show();
if (viewTab.secondaryView != 0) {
viewTab.secondaryView->show();
}
+ viewTab.splitter->show();
setActiveViewContainer(viewTab.isPrimaryViewActive ? viewTab.primaryView :
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();
m_actionHandler->setCurrentView(view);
m_tabBar = new KTabBar(this);
- m_tabBar->setHoverCloseButton(true);
+ m_tabBar->setCloseButtonEnabled(true);
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);