diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -930,6 +930,7 @@ oldViewContainer->disconnect(this); oldViewContainer->view()->disconnect(this); oldViewContainer->urlNavigator()->disconnect(this); + oldViewContainer->setActive(false); } connectViewSignals(viewContainer); diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h --- a/src/dolphintabpage.h +++ b/src/dolphintabpage.h @@ -129,6 +129,12 @@ */ void restoreStateV1(const QByteArray& state); + /** + * Notify tab page is active or not + * + */ + void setActive(bool active); + signals: void activeViewChanged(DolphinViewContainer* viewContainer); void activeViewUrlChanged(const QUrl& url); @@ -165,6 +171,7 @@ bool m_primaryViewActive; bool m_splitViewEnabled; + bool m_active; }; #endif // DOLPHIN_TAB_PAGE_H diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp --- a/src/dolphintabpage.cpp +++ b/src/dolphintabpage.cpp @@ -28,7 +28,8 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget* parent) : QWidget(parent), m_primaryViewActive(true), - m_splitViewEnabled(false) + m_splitViewEnabled(false), + m_active(true) { QVBoxLayout* layout = new QVBoxLayout(this); layout->setSpacing(0); @@ -286,17 +287,30 @@ m_splitter->restoreState(splitterState); } +void DolphinTabPage::setActive(bool active) +{ + if (active) { + m_active = active; + } else { + // we should bypass changing active view in split mode + m_active = !m_splitViewEnabled; + } + activeViewContainer()->setActive(active); +} + void DolphinTabPage::slotViewActivated() { const DolphinView* oldActiveView = activeViewContainer()->view(); // Set the view, which was active before, to inactive - // and update the active view type. - if (m_splitViewEnabled) { - activeViewContainer()->setActive(false); - m_primaryViewActive = !m_primaryViewActive; - } else { - m_primaryViewActive = true; + // and update the active view type, if tab is active + if (m_active) { + if (m_splitViewEnabled) { + activeViewContainer()->setActive(false); + m_primaryViewActive = !m_primaryViewActive; + } else { + m_primaryViewActive = true; + } } const DolphinView* newActiveView = activeViewContainer()->view(); diff --git a/src/dolphintabwidget.h b/src/dolphintabwidget.h --- a/src/dolphintabwidget.h +++ b/src/dolphintabwidget.h @@ -186,8 +186,6 @@ private: /** Caches the (negated) places panel visibility */ bool m_placesSelectorVisible; - - int m_previousTab; }; #endif diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -33,7 +33,7 @@ DolphinTabWidget::DolphinTabWidget(QWidget* parent) : QTabWidget(parent), m_placesSelectorVisible(true), - m_previousTab(-1) + m_previousTab(0) { connect(this, &DolphinTabWidget::tabCloseRequested, this, static_cast(&DolphinTabWidget::closeTab)); @@ -304,15 +304,15 @@ void DolphinTabWidget::currentTabChanged(int index) { - DolphinViewContainer* viewContainer = tabPageAt(index)->activeViewContainer(); - viewContainer->setActive(true); + // we should notify tabPage to take care of its content + if (DolphinTabPage* tabPage = tabPageAt(m_previousTab)) { + tabPage->setActive(false); + } + DolphinTabPage* tabPage = tabPageAt(index); + DolphinViewContainer* viewContainer = tabPage->activeViewContainer(); emit activeViewChanged(viewContainer); emit currentUrlChanged(viewContainer->url()); - viewContainer->view()->setFocus(); - - if (tabPageAt(m_previousTab)) { - tabPageAt(m_previousTab)->activeViewContainer()->setActive(false); - } + tabPage->setActive(true); m_previousTab = index; } diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -239,12 +239,6 @@ void setNameFilter(const QString& nameFilter); /** - * Marks the view container as active - * (see DolphinViewContainer::setActive()). - */ - void activate(); - - /** * Is invoked if the signal urlAboutToBeChanged() from the URL navigator * is emitted. Tries to save the view-state. */ diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -71,7 +71,7 @@ m_urlNavigator = new KUrlNavigator(new KFilePlacesModel(this), url, this); connect(m_urlNavigator, &KUrlNavigator::activated, - this, &DolphinViewContainer::activate); + this, &DolphinViewContainer::requestFocus); connect(m_urlNavigator->editor(), &KUrlComboBox::completionModeChanged, this, &DolphinViewContainer::saveUrlCompletionMode); @@ -84,7 +84,7 @@ m_searchBox = new DolphinSearchBox(this); m_searchBox->hide(); - connect(m_searchBox, &DolphinSearchBox::activated, this, &DolphinViewContainer::activate); + connect(m_searchBox, &DolphinSearchBox::activated, this, &DolphinViewContainer::requestFocus); connect(m_searchBox, &DolphinSearchBox::closeRequest, this, &DolphinViewContainer::closeSearchBox); connect(m_searchBox, &DolphinSearchBox::searchRequest, this, &DolphinViewContainer::startSearching); connect(m_searchBox, &DolphinSearchBox::returnPressed, this, &DolphinViewContainer::requestFocus); @@ -127,7 +127,7 @@ connect(m_view, &DolphinView::urlIsFileError, this, &DolphinViewContainer::slotUrlIsFileError); connect(m_view, &DolphinView::activated, - this, &DolphinViewContainer::activate); + this, &DolphinViewContainer::requestFocus); connect(m_urlNavigator, &KUrlNavigator::urlAboutToBeChanged, this, &DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged); @@ -538,11 +538,6 @@ delayedStatusBarUpdate(); } -void DolphinViewContainer::activate() -{ - setActive(true); -} - void DolphinViewContainer::slotUrlNavigatorLocationAboutToBeChanged(const QUrl&) { saveViewState(); @@ -611,7 +606,12 @@ void DolphinViewContainer::requestFocus() { - m_view->setFocus(); + if (m_searchBox->isVisible()) { + m_searchBox->setFocus(); + } else { + m_view->setFocus(); + m_urlNavigator->setActive(true); + } } void DolphinViewContainer::saveUrlCompletionMode(KCompletion::CompletionMode completion)