diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 6d8aceb7b..d029520c5 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -209,34 +209,40 @@ const QRect DockSettings::primaryRect() const return rect; } -const QRect DockSettings::currentRect() +const QRect DockSettings::currentRect(const bool beNarrow) { QRect rect; QString currentScrName; - if (m_isMouseMoveCause) { - rect = m_mouseCauseDockScreen->rect(); - currentScrName = m_mouseCauseDockScreen->name(); - } else { - bool positionAllowed = false; - QList monitors = m_monitors.keys(); - for (Monitor *monitor : monitors) { - switch (m_position) { - case Top: positionAllowed = monitor->dockPosition().topDock; break; - case Right: positionAllowed = monitor->dockPosition().rightDock; break; - case Bottom: positionAllowed = monitor->dockPosition().bottomDock; break; - case Left: positionAllowed = monitor->dockPosition().leftDock; break; - } - if (positionAllowed) { - rect = monitor->rect(); - currentScrName = monitor->name(); - if (monitor->isPrimary()) - break; + if (!beNarrow) { + if (m_isMouseMoveCause) { + rect = m_mouseCauseDockScreen->rect(); + currentScrName = m_mouseCauseDockScreen->name(); + } else { + bool positionAllowed = false; + QList monitors = m_monitors.keys(); + for (Monitor *monitor : monitors) { + switch (m_position) { + case Top: positionAllowed = monitor->dockPosition().topDock; break; + case Right: positionAllowed = monitor->dockPosition().rightDock; break; + case Bottom: positionAllowed = monitor->dockPosition().bottomDock; break; + case Left: positionAllowed = monitor->dockPosition().leftDock; break; + } + if (positionAllowed) { + rect = monitor->rect(); + currentScrName = monitor->name(); + if (monitor->isPrimary()) + break; + } } } + + m_currentScreen = currentScrName; + m_currentRawRect = rect; + + } else { + rect = m_currentRawRect; } - m_currentScreen = currentScrName; - m_currentRawRect = rect; qreal scale = qApp->primaryScreen()->devicePixelRatio(); rect.setWidth(std::round(qreal(rect.width()) / scale)); rect.setHeight(std::round(qreal(rect.height()) / scale)); @@ -256,7 +262,7 @@ const int DockSettings::dockMargin() const // return m_mainWindowSize; //} -const QRect DockSettings::windowRect(const Position position, const bool hide) +const QRect DockSettings::windowRect(const Position position, const bool hide, const bool beNarrow) { QSize size = m_mainWindowSize; if (hide) { @@ -268,7 +274,8 @@ const QRect DockSettings::windowRect(const Position position, const bool hide) } } - const QRect primaryRect = this->currentRect(); + + const QRect primaryRect = this->currentRect(beNarrow); const int offsetX = (primaryRect.width() - size.width()) / 2; const int offsetY = (primaryRect.height() - size.height()) / 2; int margin = hide ? 0 : this->dockMargin(); diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index 3666261cb..e34b5e046 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -57,7 +57,7 @@ public: inline int narrowTimeout() const { return 100; } inline bool autoHide() const { return m_autoHide; } const QRect primaryRect() const; - const QRect currentRect(); + const QRect currentRect(const bool beNarrow = false); const QList monitorsRect() const; inline const QRect primaryRawRect() const { return m_primaryRawRect; } inline const QRect currentRawRect() const { return m_currentRawRect; } @@ -67,7 +67,7 @@ public: const int dockMargin() const; // const QSize panelSize() const; - const QRect windowRect(const Position position, const bool hide = false); + const QRect windowRect(const Position position, const bool hide = false, const bool beNarrow = false); qreal dockRatio() const; void showDockSettingsMenu(); diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 7dc004d4d..7755a3615 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -231,7 +231,7 @@ MainWindow::MainWindow(QWidget *parent) // dock的宽度或高度 int val = value.toInt(); // dock隐藏后的rect - const QRect windowRect = m_settings->windowRect(m_dockPosition, false); + const QRect windowRect = m_settings->windowRect(m_dockPosition, false, true); const int margin = m_settings->dockMargin(); if (!m_mouseCauseDock) {