From 738f41aa1728dacc2e1f94688c6f6a41c435e822 Mon Sep 17 00:00:00 2001 From: listenerri Date: Mon, 12 Nov 2018 10:42:07 +0800 Subject: [PATCH] fix: resize dock and fashion system tray recursively Change-Id: I988712e6f6081ddecf48207f9ed93096ff5598c2 --- frame/panel/mainpanel.cpp | 3 ++- frame/util/docksettings.cpp | 9 +++++++-- frame/util/docksettings.h | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/frame/panel/mainpanel.cpp b/frame/panel/mainpanel.cpp index 9e12d3611..742bd6096 100644 --- a/frame/panel/mainpanel.cpp +++ b/frame/panel/mainpanel.cpp @@ -548,7 +548,8 @@ void MainPanel::adjustItemSize() --extraDecrease; } - if (FSTrayItem) { + // 如果dock的大小已经是最大的则不再调整时尚模式托盘图标的大小,以避免递归调整dock与托盘的大小 + if (!DockSettings::Instance().isMaxSize() && FSTrayItem) { FSTrayItem->setSuggestIconSize(FSTraySuggestIconSize); } diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 1d36a3882..7ca42f0cb 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -41,6 +41,7 @@ extern const QPoint rawXPosition(const QPoint &scaledPos); DockSettings::DockSettings(QWidget *parent) : QObject(parent) , m_autoHide(true) + , m_isMaxSize(false) , m_opacity(0.4) , m_fashionSystemTraySize(QSize(0, 0)) , m_fashionModeAct(tr("Fashion Mode"), this) @@ -586,20 +587,24 @@ void DockSettings::calculateWindowConfig() const int perfectWidth = visibleItemCount * defaultWidth + PANEL_BORDER * 2 + PANEL_PADDING * 2 + PANEL_MARGIN * 2 + m_fashionSystemTraySize.width(); const int perfectHeight = visibleItemCount * defaultHeight + PANEL_BORDER * 2 + PANEL_PADDING * 2 + PANEL_MARGIN * 2 + m_fashionSystemTraySize.height(); - const int calcWidth = qMin(m_primaryRect.width() - FASHION_MODE_PADDING * 2, perfectWidth); - const int calcHeight = qMin(m_primaryRect.height() - FASHION_MODE_PADDING * 2, perfectHeight); + const int maxWidth = m_primaryRect.width() - FASHION_MODE_PADDING * 2; + const int maxHeight = m_primaryRect.height() - FASHION_MODE_PADDING * 2; + const int calcWidth = qMin(maxWidth, perfectWidth); + const int calcHeight = qMin(maxHeight, perfectHeight); switch (m_position) { case Top: case Bottom: m_mainWindowSize.setHeight(defaultHeight + PANEL_BORDER); m_mainWindowSize.setWidth(calcWidth); + m_isMaxSize = (calcWidth == maxWidth); break; case Left: case Right: m_mainWindowSize.setHeight(calcHeight); m_mainWindowSize.setWidth(defaultWidth + PANEL_BORDER); + m_isMaxSize = (calcHeight == maxHeight); break; default: diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index a1da4d8cc..cbfbc0de7 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -72,6 +72,7 @@ public: inline int expandTimeout() const { return m_dockInter->showTimeout(); } inline int narrowTimeout() const { return 100; } inline bool autoHide() const { return m_autoHide; } + inline bool isMaxSize() const { return m_isMaxSize; } inline const QRect primaryRect() const { return m_primaryRect; } inline const QRect primaryRawRect() const { return m_primaryRawRect; } inline const QRect frontendWindowRect() const { return m_frontendRect; } @@ -124,6 +125,7 @@ private: private: int m_iconSize; bool m_autoHide; + bool m_isMaxSize; int m_screenRawHeight; int m_screenRawWidth; double m_opacity;