X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/f01a61b76c8588a4df2054ab70e9a746a74f7817..d3839617:/src/dolphintabpage.cpp diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp index a90e8e7f0..771bbe9cd 100644 --- a/src/dolphintabpage.cpp +++ b/src/dolphintabpage.cpp @@ -12,7 +12,6 @@ #include "global.h" #include -#include #include #include #include @@ -28,7 +27,7 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, layout->setSpacing(0); layout->setContentsMargins(0, 0, 0, 0); - m_splitter = new QSplitter(Qt::Horizontal, this); + m_splitter = new DolphinTabPageSplitter(Qt::Horizontal, this); m_splitter->setChildrenCollapsible(false); connect(m_splitter, &QSplitter::splitterMoved, this, &DolphinTabPage::splitterMoved); @@ -43,7 +42,6 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, this, &DolphinTabPage::slotViewUrlRedirection); m_splitter->addWidget(m_primaryViewContainer); - m_primaryViewContainer->installEventFilter(this); m_primaryViewContainer->show(); if (secondaryUrl.isValid() || GeneralSettings::splitView()) { @@ -53,7 +51,6 @@ DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, const QUrl& url = secondaryUrl.isValid() ? secondaryUrl : primaryUrl; m_secondaryViewContainer = createViewContainer(url); m_splitter->addWidget(m_secondaryViewContainer); - m_secondaryViewContainer->installEventFilter(this); m_secondaryViewContainer->show(); } @@ -98,9 +95,10 @@ void DolphinTabPage::setSplitViewEnabled(bool enabled, Animated animated, const } m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator); m_navigatorsWidget->setSecondaryNavigatorVisible(true); + m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, + m_secondaryViewContainer); m_splitter->addWidget(m_secondaryViewContainer); - m_secondaryViewContainer->installEventFilter(this); m_secondaryViewContainer->setActive(true); if (animated == WithAnimation) { @@ -141,6 +139,7 @@ void DolphinTabPage::setSplitViewEnabled(bool enabled, Animated animated, const } } m_primaryViewContainer->setActive(true); + m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, nullptr); if (animated == WithoutAnimation) { view->close(); @@ -201,7 +200,8 @@ void DolphinTabPage::connectNavigators(DolphinNavigatorsWidgetAction *navigators auto secondaryNavigator = navigatorsWidget->secondaryUrlNavigator(); m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator); } - resizeNavigators(); + m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer, + m_secondaryViewContainer); } void DolphinTabPage::disconnectNavigators() @@ -213,15 +213,6 @@ void DolphinTabPage::disconnectNavigators() } } -bool DolphinTabPage::eventFilter(QObject *watched, QEvent *event) -{ - if (event->type() == QEvent::Resize && m_navigatorsWidget) { - resizeNavigators(); - return false; - } - return QWidget::eventFilter(watched, event); -} - void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction* navigatorsWidget) { QGridLayout *gridLayout = static_cast(layout()); @@ -235,22 +226,6 @@ void DolphinTabPage::insertNavigatorsWidget(DolphinNavigatorsWidgetAction* navig } } - -void DolphinTabPage::resizeNavigators() const -{ - if (!m_secondaryViewContainer) { - m_navigatorsWidget->followViewContainerGeometry( - m_primaryViewContainer->mapToGlobal(QPoint(0,0)).x(), - m_primaryViewContainer->width()); - } else { - m_navigatorsWidget->followViewContainersGeometry( - m_primaryViewContainer->mapToGlobal(QPoint(0,0)).x(), - m_primaryViewContainer->width(), - m_secondaryViewContainer->mapToGlobal(QPoint(0,0)).x(), - m_secondaryViewContainer->width()); - } -} - void DolphinTabPage::markUrlsAsSelected(const QList& urls) { m_primaryViewContainer->view()->markUrlsAsSelected(urls); @@ -352,48 +327,6 @@ void DolphinTabPage::restoreState(const QByteArray& state) m_splitter->restoreState(splitterState); } -void DolphinTabPage::restoreStateV1(const QByteArray& state) -{ - if (state.isEmpty()) { - return; - } - - QByteArray sd = state; - QDataStream stream(&sd, QIODevice::ReadOnly); - - bool isSplitViewEnabled = false; - stream >> isSplitViewEnabled; - setSplitViewEnabled(isSplitViewEnabled, WithoutAnimation); - - QUrl primaryUrl; - stream >> primaryUrl; - m_primaryViewContainer->setUrl(primaryUrl); - bool primaryUrlEditable; - stream >> primaryUrlEditable; - m_primaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(primaryUrlEditable); - - if (isSplitViewEnabled) { - QUrl secondaryUrl; - stream >> secondaryUrl; - m_secondaryViewContainer->setUrl(secondaryUrl); - bool secondaryUrlEditable; - stream >> secondaryUrlEditable; - m_secondaryViewContainer->urlNavigatorInternalWithHistory()->setUrlEditable(secondaryUrlEditable); - } - - stream >> m_primaryViewActive; - if (m_primaryViewActive) { - m_primaryViewContainer->setActive(true); - } else { - Q_ASSERT(m_splitViewEnabled); - m_secondaryViewContainer->setActive(true); - } - - QByteArray splitterState; - stream >> splitterState; - m_splitter->restoreState(splitterState); -} - void DolphinTabPage::setActive(bool active) { if (active) { @@ -571,3 +504,47 @@ void DolphinTabPage::startExpandViewAnimation(DolphinViewContainer *expandingCon } m_expandViewAnimation->start(QAbstractAnimation::DeleteWhenStopped); } + +DolphinTabPageSplitterHandle::DolphinTabPageSplitterHandle(Qt::Orientation orientation, QSplitter *parent) + : QSplitterHandle(orientation, parent) + , m_mouseReleaseWasReceived(false) +{} + +bool DolphinTabPageSplitterHandle::event(QEvent *event) +{ + switch (event->type()) { + case QEvent::MouseButtonPress: + m_mouseReleaseWasReceived = false; + break; + case QEvent::MouseButtonRelease: + if (m_mouseReleaseWasReceived) { + resetSplitterSizes(); + } + m_mouseReleaseWasReceived = !m_mouseReleaseWasReceived; + break; + case QEvent::MouseButtonDblClick: + m_mouseReleaseWasReceived = false; + resetSplitterSizes(); + break; + default: + break; + } + + return QSplitterHandle::event(event); +} + +void DolphinTabPageSplitterHandle::resetSplitterSizes() +{ + QList splitterSizes = splitter()->sizes(); + std::fill(splitterSizes.begin(), splitterSizes.end(), 0); + splitter()->setSizes(splitterSizes); +} + +DolphinTabPageSplitter::DolphinTabPageSplitter(Qt::Orientation orientation, QWidget *parent) + : QSplitter(orientation, parent) +{} + +QSplitterHandle* DolphinTabPageSplitter::createHandle() +{ + return new DolphinTabPageSplitterHandle(orientation(), this); +}