┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMéven Car <[email protected]>2025-10-28 09:45:26 +0000
committerMéven Car <[email protected]>2025-10-28 09:45:26 +0000
commit71bdbb87dde6ea6255b687af255ead75691d95c5 (patch)
tree03d39eb79975dec3be3c5404b319abd16704317b /src
parent9073a953f3c536b7cf22369a87163a32a3467b1b (diff)
dolphintabpage: when enabling split view without animation reset sizes
of the splitter. So the previous size of a pontential leftover closed state does not apply initially. BUG: 510915
Diffstat (limited to 'src')
-rw-r--r--src/dolphintabpage.cpp163
-rw-r--r--src/dolphintabpage.h2
2 files changed, 83 insertions, 82 deletions
diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp
index 35c244c9e..9df1c77b3 100644
--- a/src/dolphintabpage.cpp
+++ b/src/dolphintabpage.cpp
@@ -15,6 +15,14 @@
#include <QStyle>
#include <QVariantAnimation>
+namespace
+{
+void resetSplitterSizes(QSplitter *splitter)
+{
+ splitter->setSizes({0, 0});
+}
+}
+
DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget *parent)
: QWidget(parent)
, m_expandingContainer{nullptr}
@@ -66,90 +74,92 @@ bool DolphinTabPage::splitViewEnabled() const
void DolphinTabPage::setSplitViewEnabled(bool enabled, Animated animated, const QUrl &secondaryUrl)
{
- if (m_splitViewEnabled != enabled) {
- m_splitViewEnabled = enabled;
- if (animated == WithAnimation
- && (style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this) < 1 || GlobalConfig::animationDurationFactor() <= 0.0)) {
- animated = WithoutAnimation;
- }
- if (m_expandViewAnimation) {
- m_expandViewAnimation->stop(); // deletes because of QAbstractAnimation::DeleteWhenStopped.
- if (animated == WithoutAnimation) {
- slotAnimationFinished();
- }
+ if (m_splitViewEnabled == enabled) {
+ return;
+ }
+
+ m_splitViewEnabled = enabled;
+ if (animated == WithAnimation
+ && (style()->styleHint(QStyle::SH_Widget_Animation_Duration, nullptr, this) < 1 || GlobalConfig::animationDurationFactor() <= 0.0)) {
+ animated = WithoutAnimation;
+ }
+ if (m_expandViewAnimation) {
+ m_expandViewAnimation->stop(); // deletes because of QAbstractAnimation::DeleteWhenStopped.
+ if (animated == WithoutAnimation) {
+ slotAnimationFinished();
}
+ }
- if (enabled) {
- QList<int> splitterSizes = m_splitter->sizes();
- const QUrl &url = (secondaryUrl.isEmpty()) ? m_primaryViewContainer->url() : secondaryUrl;
- m_secondaryViewContainer = createViewContainer(url);
+ if (enabled) {
+ QList<int> splitterSizes = m_splitter->sizes();
+ const QUrl &url = (secondaryUrl.isEmpty()) ? m_primaryViewContainer->url() : secondaryUrl;
+ m_secondaryViewContainer = createViewContainer(url);
- auto secondaryNavigator = m_navigatorsWidget->secondaryUrlNavigator();
- if (!secondaryNavigator) {
- m_navigatorsWidget->createSecondaryUrlNavigator();
- secondaryNavigator = m_navigatorsWidget->secondaryUrlNavigator();
- }
- m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
- connect(m_secondaryViewContainer->view(), &DolphinView::redirection, this, &DolphinTabPage::slotViewUrlRedirection);
- m_navigatorsWidget->setSecondaryNavigatorVisible(true);
- m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, m_secondaryViewContainer);
+ auto secondaryNavigator = m_navigatorsWidget->secondaryUrlNavigator();
+ if (!secondaryNavigator) {
+ m_navigatorsWidget->createSecondaryUrlNavigator();
+ secondaryNavigator = m_navigatorsWidget->secondaryUrlNavigator();
+ }
+ m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
+ connect(m_secondaryViewContainer->view(), &DolphinView::redirection, this, &DolphinTabPage::slotViewUrlRedirection);
+ m_navigatorsWidget->setSecondaryNavigatorVisible(true);
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, m_secondaryViewContainer);
- m_splitter->addWidget(m_secondaryViewContainer);
- m_secondaryViewContainer->setActive(true);
+ m_splitter->addWidget(m_secondaryViewContainer);
+ m_secondaryViewContainer->setActive(true);
- if (animated == WithAnimation) {
- m_secondaryViewContainer->setMinimumWidth(1);
- splitterSizes.append(1);
- m_splitter->setSizes(splitterSizes);
- startExpandViewAnimation(m_secondaryViewContainer);
- }
- m_secondaryViewContainer->show();
+ if (animated == WithAnimation) {
+ m_secondaryViewContainer->setMinimumWidth(1);
+ splitterSizes.append(1);
+ m_splitter->setSizes(splitterSizes);
+ startExpandViewAnimation(m_secondaryViewContainer);
} else {
- m_navigatorsWidget->setSecondaryNavigatorVisible(false);
- m_secondaryViewContainer->disconnectUrlNavigator();
- disconnect(m_secondaryViewContainer->view(), &DolphinView::redirection, this, &DolphinTabPage::slotViewUrlRedirection);
+ resetSplitterSizes(m_splitter);
+ }
+ m_secondaryViewContainer->show();
+ } else {
+ m_navigatorsWidget->setSecondaryNavigatorVisible(false);
+ m_secondaryViewContainer->disconnectUrlNavigator();
+ disconnect(m_secondaryViewContainer->view(), &DolphinView::redirection, this, &DolphinTabPage::slotViewUrlRedirection);
- DolphinViewContainer *view;
- if (GeneralSettings::closeActiveSplitView()) {
- view = activeViewContainer();
- if (m_primaryViewActive) {
- m_primaryViewContainer->disconnectUrlNavigator();
- m_secondaryViewContainer->connectUrlNavigator(m_navigatorsWidget->primaryUrlNavigator());
+ DolphinViewContainer *view;
- // If the primary view is active, we have to swap the pointers
- // because the secondary view will be the new primary view.
- std::swap(m_primaryViewContainer, m_secondaryViewContainer);
- m_primaryViewActive = false;
- }
- } else {
- view = m_primaryViewActive ? m_secondaryViewContainer : m_primaryViewContainer;
- if (!m_primaryViewActive) {
- m_primaryViewContainer->disconnectUrlNavigator();
- m_secondaryViewContainer->connectUrlNavigator(m_navigatorsWidget->primaryUrlNavigator());
+ auto swapActiveView = [this]() {
+ m_primaryViewContainer->disconnectUrlNavigator();
+ m_secondaryViewContainer->connectUrlNavigator(m_navigatorsWidget->primaryUrlNavigator());
- // If the secondary view is active, we have to swap the pointers
- // because the secondary view will be the new primary view.
- std::swap(m_primaryViewContainer, m_secondaryViewContainer);
- m_primaryViewActive = true;
- }
+ // If the primary view is active, we have to swap the pointers
+ // because the secondary view will be the new primary view.
+ std::swap(m_primaryViewContainer, m_secondaryViewContainer);
+ m_primaryViewActive = !m_primaryViewActive;
+ };
+ if (GeneralSettings::closeActiveSplitView()) {
+ view = activeViewContainer();
+ if (m_primaryViewActive) {
+ swapActiveView();
}
- m_primaryViewContainer->setActive(true);
- m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, nullptr);
-
- if (animated == WithoutAnimation) {
- view->close();
- view->deleteLater();
- } else {
- // Kill it but keep it as a zombie for the closing animation.
- m_secondaryViewContainer = nullptr;
- view->blockSignals(true);
- view->view()->blockSignals(true);
- view->setDisabled(true);
- startExpandViewAnimation(m_primaryViewContainer);
+ } else {
+ view = m_primaryViewActive ? m_secondaryViewContainer : m_primaryViewContainer;
+ if (!m_primaryViewActive) {
+ swapActiveView();
}
+ }
+ m_primaryViewContainer->setActive(true);
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, nullptr);
- m_primaryViewContainer->slotSplitTabDisabled();
+ if (animated == WithoutAnimation) {
+ view->close();
+ view->deleteLater();
+ } else {
+ // Kill it but keep it as a zombie for the closing animation.
+ m_secondaryViewContainer = nullptr;
+ view->blockSignals(true);
+ view->view()->blockSignals(true);
+ view->setDisabled(true);
+ startExpandViewAnimation(m_primaryViewContainer);
}
+
+ m_primaryViewContainer->slotSplitTabDisabled();
}
}
@@ -538,13 +548,13 @@ bool DolphinTabPageSplitterHandle::event(QEvent *event)
break;
case QEvent::MouseButtonRelease:
if (m_mouseReleaseWasReceived) {
- resetSplitterSizes();
+ resetSplitterSizes(splitter());
}
m_mouseReleaseWasReceived = !m_mouseReleaseWasReceived;
break;
case QEvent::MouseButtonDblClick:
m_mouseReleaseWasReceived = false;
- resetSplitterSizes();
+ resetSplitterSizes(splitter());
break;
default:
break;
@@ -553,13 +563,6 @@ bool DolphinTabPageSplitterHandle::event(QEvent *event)
return QSplitterHandle::event(event);
}
-void DolphinTabPageSplitterHandle::resetSplitterSizes()
-{
- QList<int> splitterSizes = splitter()->sizes();
- std::fill(splitterSizes.begin(), splitterSizes.end(), 0);
- splitter()->setSizes(splitterSizes);
-}
-
DolphinTabPageSplitter::DolphinTabPageSplitter(Qt::Orientation orientation, QWidget *parent)
: QSplitter(orientation, parent)
{
diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h
index 0c788d115..1abc05670 100644
--- a/src/dolphintabpage.h
+++ b/src/dolphintabpage.h
@@ -230,8 +230,6 @@ protected:
bool event(QEvent *event) override;
private:
- void resetSplitterSizes();
-
// Sometimes QSplitterHandle doesn't receive MouseButtonDblClick event.
// We can detect that MouseButtonDblClick event should have been
// received if we receive two MouseButtonRelease events in a row.