dolphin/0001-Update-cached-viewContainer-geometry-every-time-they.patch
Christophe Giboudeaux a034c72c62 Accepting request 866684 from home:luca_b:branches:KDE:Applications
- Add upstream patch to properly show the network button in the
  URL navigator (kde#431626):
  - 0001-Show-button-to-open-knetattach-inline-with-URL-nav-o.patch
- Refreshed patches:
  - 0001-Update-cached-viewContainer-geometry-every-time-they.patch

OBS-URL: https://build.opensuse.org/request/show/866684
OBS-URL: https://build.opensuse.org/package/show/KDE:Applications/dolphin?expand=0&rev=241
2021-01-26 15:53:28 +00:00

203 lines
8.3 KiB
Diff

From 5c5198981e64a7ed5c60e24b43a043bac18d8a93 Mon Sep 17 00:00:00 2001
From: Felix Ernst <fe.a.ernst@gmail.com>
Date: Fri, 27 Nov 2020 18:44:48 +0100
Subject: [PATCH] Update cached viewContainer geometry every time they are used
---
src/dolphinnavigatorswidgetaction.cpp | 62 ++++++++++++++++-----------
src/dolphinnavigatorswidgetaction.h | 18 +++++---
src/dolphintabpage.cpp | 26 ++++-------
3 files changed, 57 insertions(+), 49 deletions(-)
Index: dolphin-20.12.1/src/dolphinnavigatorswidgetaction.cpp
===================================================================
--- dolphin-20.12.1.orig/src/dolphinnavigatorswidgetaction.cpp 2021-01-25 23:18:02.080476301 +0100
+++ dolphin-20.12.1/src/dolphinnavigatorswidgetaction.cpp 2021-01-25 23:18:14.684426507 +0100
@@ -57,31 +57,12 @@
updateText();
}
-void DolphinNavigatorsWidgetAction::followViewContainerGeometry(
- int globalXOfPrimary, int widthOfPrimary)
+void DolphinNavigatorsWidgetAction::followViewContainersGeometry(QWidget *primaryViewContainer,
+ QWidget *secondaryViewContainer)
{
- followViewContainersGeometry(globalXOfPrimary, widthOfPrimary, INT_MIN, INT_MIN);
-}
-
-void DolphinNavigatorsWidgetAction::followViewContainersGeometry(
- int globalXOfPrimary, int widthOfPrimary,
- int globalXOfSecondary, int widthOfSecondary)
-{
- if (QApplication::layoutDirection() == Qt::LeftToRight) {
- m_globalXOfSplitter = m_splitter->mapToGlobal(QPoint(0,0)).x();
- m_globalXOfPrimary = globalXOfPrimary;
- m_globalXOfSecondary = globalXOfSecondary;
- } else {
- // When the direction is reversed, globalX does not change.
- // For the adjustSpacing() code to work we need globalX to measure from right to left
- // and to measure up to the rightmost point of a widget instead of the leftmost.
- m_globalXOfSplitter = (-1) * (m_splitter->mapToGlobal(QPoint(0,0)).x() + m_splitter->width());
- m_globalXOfPrimary = (-1) * (globalXOfPrimary + widthOfPrimary);
- m_globalXOfSecondary = (globalXOfSecondary == INT_MIN) ? INT_MIN :
- (-1) * (globalXOfSecondary + widthOfSecondary);
- }
- m_widthOfPrimary = widthOfPrimary;
- m_widthOfSecondary = widthOfSecondary;
+ Q_CHECK_PTR(primaryViewContainer);
+ m_primaryViewContainer = primaryViewContainer;
+ m_secondaryViewContainer = secondaryViewContainer;
adjustSpacing();
}
@@ -143,6 +124,7 @@
void DolphinNavigatorsWidgetAction::adjustSpacing()
{
+ updateCachedViewGeometry();
Q_ASSERT(m_globalXOfSplitter != INT_MIN);
Q_ASSERT(m_globalXOfPrimary != INT_MIN);
Q_ASSERT(m_widthOfPrimary != INT_MIN);
@@ -323,6 +305,38 @@
#endif
}
+void DolphinNavigatorsWidgetAction::updateCachedViewGeometry()
+{
+ Q_ASSERT(m_primaryViewContainer);
+ m_widthOfPrimary = m_primaryViewContainer->width();
+ if (m_secondaryViewContainer) {
+ m_widthOfSecondary = m_secondaryViewContainer->width();
+ } else {
+ m_widthOfSecondary = INT_MIN;
+ }
+
+ const int globalXOfSplitter = m_splitter->mapToGlobal(QPoint(0,0)).x();
+ const int globalXOfPrimary = m_primaryViewContainer->mapToGlobal(QPoint(0,0)).x();
+ int globalXOfSecondary = INT_MIN;
+ if (m_secondaryViewContainer) {
+ globalXOfSecondary = m_secondaryViewContainer->mapToGlobal(QPoint(0,0)).x();
+ }
+
+ if (QApplication::layoutDirection() == Qt::LeftToRight) {
+ m_globalXOfSplitter = globalXOfSplitter;
+ m_globalXOfPrimary = globalXOfPrimary;
+ m_globalXOfSecondary = globalXOfSecondary;
+ } else {
+ // When the direction is reversed, globalX does not change.
+ // For the adjustSpacing() code to work we need globalX to measure from right to left
+ // and to measure up to the rightmost point of a widget instead of the leftmost.
+ m_globalXOfSplitter = (-1) * (globalXOfSplitter + m_splitter->width());
+ m_globalXOfPrimary = (-1) * (globalXOfPrimary + m_widthOfPrimary);
+ m_globalXOfSecondary = (globalXOfSecondary == INT_MIN) ? INT_MIN :
+ (-1) * (globalXOfSecondary + m_widthOfSecondary);
+ }
+}
+
void DolphinNavigatorsWidgetAction::updateText()
{
const int urlNavigatorsAmount = m_splitter->count() > 1 && m_splitter->widget(1)->isVisible() ?
Index: dolphin-20.12.1/src/dolphinnavigatorswidgetaction.h
===================================================================
--- dolphin-20.12.1.orig/src/dolphinnavigatorswidgetaction.h 2021-01-25 23:18:02.080476301 +0100
+++ dolphin-20.12.1/src/dolphinnavigatorswidgetaction.h 2021-01-25 23:18:46.064299606 +0100
@@ -11,6 +11,7 @@
#include "dolphinurlnavigator.h"
#include <kio_version.h>
+#include <QPointer>
#include <QSplitter>
#include <QTimer>
#include <QWidgetAction>
@@ -55,16 +56,11 @@
void createSecondaryUrlNavigator();
/**
- * Notify the primary UrlNavigator of changes in geometry of the ViewContainer it tries to be
- * aligned with. Only call this method if there is no secondary UrlNavigator.
- */
- void followViewContainerGeometry(int globalXOfPrimary, int widthOfPrimary);
- /**
* Notify this widget of changes in geometry of the ViewContainers it tries to be
* aligned with.
*/
- void followViewContainersGeometry(int globalXOfPrimary, int widthOfPrimary,
- int globalXOfSecondary, int widthOfSecondary);
+ void followViewContainersGeometry(QWidget *primaryViewContainer,
+ QWidget *secondaryViewContainer = nullptr);
bool isInToolbar() const;
@@ -159,12 +155,20 @@
*/
QWidget *spacing(Side side, Position position) const;
+ void updateCachedViewGeometry();
+
/**
* Sets this action's text depending on the amount of visible UrlNavigators.
*/
void updateText();
/**
+ * The viewContainers are only remembered for the adjustSpacing calculations.
+ */
+ QPointer<const QWidget> m_primaryViewContainer;
+ QPointer<const QWidget> m_secondaryViewContainer;
+
+ /**
* The defaultWidget() of this QWidgetAction.
*/
std::unique_ptr<QSplitter> m_splitter;
Index: dolphin-20.12.1/src/dolphintabpage.cpp
===================================================================
--- dolphin-20.12.1.orig/src/dolphintabpage.cpp 2021-01-02 14:42:54.000000000 +0100
+++ dolphin-20.12.1/src/dolphintabpage.cpp 2021-01-25 23:18:14.684426507 +0100
@@ -167,7 +167,8 @@
auto secondaryNavigator = navigatorsWidget->secondaryUrlNavigator();
m_secondaryViewContainer->connectUrlNavigator(secondaryNavigator);
}
- resizeNavigators();
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer,
+ m_secondaryViewContainer);
}
void DolphinTabPage::disconnectNavigators()
@@ -182,7 +183,12 @@
bool DolphinTabPage::eventFilter(QObject *watched, QEvent *event)
{
if (event->type() == QEvent::Resize && m_navigatorsWidget) {
- resizeNavigators();
+ if (!m_splitViewEnabled) {
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer);
+ } else {
+ m_navigatorsWidget->followViewContainersGeometry(m_primaryViewContainer,
+ m_secondaryViewContainer);
+ }
return false;
}
return QWidget::eventFilter(watched, event);
@@ -201,22 +207,6 @@
}
}
-
-void DolphinTabPage::resizeNavigators() const
-{
- if (!m_splitViewEnabled) {
- 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<QUrl>& urls)
{
m_primaryViewContainer->view()->markUrlsAsSelected(urls);