┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphintabpage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/dolphintabpage.cpp')
-rw-r--r--src/dolphintabpage.cpp50
1 files changed, 46 insertions, 4 deletions
diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp
index ca47130c0..7187162a4 100644
--- a/src/dolphintabpage.cpp
+++ b/src/dolphintabpage.cpp
@@ -38,8 +38,8 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl,
m_splitter = new DolphinTabPageSplitter(Qt::Horizontal, this);
m_splitter->setChildrenCollapsible(false);
connect(m_splitter, &QSplitter::splitterMoved, this, &DolphinTabPage::splitterMoved);
- layout->addWidget(m_splitter, 1, 0);
- layout->setRowStretch(1, 1);
+ layout->addWidget(m_splitter, 2, 0, 1, 2);
+ layout->setRowStretch(2, 1);
// Create a new primary view
m_primaryViewContainer = createViewContainer(primaryUrl);
@@ -60,7 +60,13 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl,
m_secondaryViewContainer->show();
}
+ // DolphinView::setActive(true) calls setFocus() then emits activated().
+ // activated() is connected to slotViewActivated() which toggles
+ // m_primaryViewActive — correct for user-initiated pane switches, but
+ // wrong here during construction. Disconnect to prevent the spurious toggle.
+ disconnectViewActivatedSignals();
m_primaryViewContainer->setActive(true);
+ connectViewActivatedSignals();
}
bool DolphinTabPage::primaryViewActive() const
@@ -259,6 +265,8 @@ void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction *navig
// We set a row minimum height, so the height does not visibly change whenever
// navigatorsWidget is inserted which happens every time the current tab is changed.
gridLayout->setRowMinimumHeight(0, navigatorsWidget->primaryUrlNavigator()->height());
+ gridLayout->setRowMinimumHeight(1, 1);
+
gridLayout->addWidget(navigatorsWidget->requestWidget(this), 0, 0);
if (!m_navigatorSeparator) {
m_navigatorSeparator = std::make_unique<QFrame>(this);
@@ -266,7 +274,7 @@ void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction *navig
m_navigatorSeparator->setFrameStyle(QFrame::HLine);
m_navigatorSeparator->setFixedHeight(1);
m_navigatorSeparator->setContentsMargins(0, 0, 0, 0);
- gridLayout->addWidget(m_navigatorSeparator.get(), 1, 0, 0, -1);
+ gridLayout->addWidget(m_navigatorSeparator.get(), 1, 0);
}
}
@@ -364,12 +372,22 @@ void DolphinTabPage::restoreState(const QByteArray &state)
}
stream >> m_primaryViewActive;
+ // DolphinView::setActive(true) calls setFocus() then emits activated().
+ // activated() is connected to slotViewActivated() which toggles
+ // m_primaryViewActive — correct for user-initiated pane switches, but
+ // wrong here during session restore. Disconnect to prevent the spurious toggle.
+ disconnectViewActivatedSignals();
if (m_primaryViewActive) {
+ if (m_splitViewEnabled) {
+ m_secondaryViewContainer->setActive(false);
+ }
m_primaryViewContainer->setActive(true);
} else {
Q_ASSERT(m_splitViewEnabled);
+ m_primaryViewContainer->setActive(false);
m_secondaryViewContainer->setActive(true);
}
+ connectViewActivatedSignals();
QByteArray splitterState;
stream >> splitterState;
@@ -393,8 +411,16 @@ void DolphinTabPage::setActive(bool active)
// we should bypass changing active view in split mode
m_active = !m_splitViewEnabled;
}
- // we want view to fire activated when goes from false to true
+ // DolphinView::setActive(true) calls setFocus() then emits activated().
+ // activated() is connected to slotViewActivated() which toggles
+ // m_primaryViewActive — correct for user-initiated pane switches, but
+ // wrong here during tab switch. Disconnect to prevent the spurious toggle.
+ disconnectViewActivatedSignals();
+ if (active && m_splitViewEnabled) {
+ inactiveViewContainer()->setActive(false);
+ }
activeViewContainer()->setActive(active);
+ connectViewActivatedSignals();
}
void DolphinTabPage::setCustomLabel(const QString &label)
@@ -518,6 +544,22 @@ void DolphinTabPage::switchActiveView()
}
}
+void DolphinTabPage::connectViewActivatedSignals()
+{
+ connect(m_primaryViewContainer->view(), &DolphinView::activated, this, &DolphinTabPage::slotViewActivated);
+ if (m_secondaryViewContainer) {
+ connect(m_secondaryViewContainer->view(), &DolphinView::activated, this, &DolphinTabPage::slotViewActivated);
+ }
+}
+
+void DolphinTabPage::disconnectViewActivatedSignals()
+{
+ disconnect(m_primaryViewContainer->view(), &DolphinView::activated, this, &DolphinTabPage::slotViewActivated);
+ if (m_secondaryViewContainer) {
+ disconnect(m_secondaryViewContainer->view(), &DolphinView::activated, this, &DolphinTabPage::slotViewActivated);
+ }
+}
+
DolphinViewContainer *DolphinTabPage::createViewContainer(const QUrl &url) const
{
DolphinViewContainer *container = new DolphinViewContainer(url, m_splitter);