summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-12-19 18:36:15 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2024-01-11 20:39:14 +0000
commitb86adfb978e1e2b38712e27f7e93d4c18916f1f2 (patch)
tree2155521a2daeb7fd13682cbed8311f01833cb964
parentcce0eee3211192ae3cbab79fd120bfa833a5caea (diff)
Qt Designer: Start where mouse cursor is in Top Level mode
Task-number: QTBUG-120236 Change-Id: I0471794c0250484cfd15772d1c6bbeab201ef4e2 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io> (cherry picked from commit b27c8730175db14abb539dc949010ba90768a6de) (cherry picked from commit ddde0ac7854740670d61ac3a08056ed29bd5a3f6) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/designer/src/designer/qdesigner_workbench.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/designer/src/designer/qdesigner_workbench.cpp b/src/designer/src/designer/qdesigner_workbench.cpp
index ed454ee49..03ce2c96c 100644
--- a/src/designer/src/designer/qdesigner_workbench.cpp
+++ b/src/designer/src/designer/qdesigner_workbench.cpp
@@ -34,6 +34,7 @@
#include <QtWidgets/qlayout.h>
#include <QtGui/qactiongroup.h>
+#include <QtGui/qcursor.h>
#include <QtGui/qevent.h>
#include <QtGui/qscreen.h>
#include <QtGui/qwindow.h>
@@ -444,6 +445,15 @@ void QDesignerWorkbench::adjustMDIFormPositions()
}
}
+static QScreen *screenUnderMouse()
+{
+ const auto &screens = QGuiApplication::screens();
+ const auto pos = QCursor::pos();
+ auto pred = [pos](const QScreen *s) { return s->geometry().contains(pos); };
+ auto it = std::find_if(screens.cbegin(), screens.cend(), pred);
+ return it != screens.cend() ? *it : QGuiApplication::primaryScreen();
+}
+
void QDesignerWorkbench::switchToTopLevelMode()
{
if (m_mode == TopLevelMode)
@@ -455,7 +465,10 @@ void QDesignerWorkbench::switchToTopLevelMode()
switchToNeutralMode();
m_mode = TopLevelMode; // Set new mode before calling screen()
- const auto *currentScreen = screen();
+ const QDesignerSettings settings(m_core);
+ const QByteArray mainWindowState = settings.mainWindowState(m_mode);
+ // Open on screen where the mouse is when no settings exist
+ const auto *currentScreen = mainWindowState.isEmpty() ? screenUnderMouse() : screen();
const QRect availableGeometry = currentScreen->availableGeometry();
const QPoint desktopOffset = availableGeometry.topLeft();
@@ -478,7 +491,6 @@ void QDesignerWorkbench::switchToTopLevelMode()
widgetBoxWrapper->setWindowTitle(MainWindowBase::mainWindowTitle());
#endif // !Q_OS_MACOS
- const QDesignerSettings settings(m_core);
m_topLevelData.toolbars = MainWindowBase::createToolBars(m_actionManager, false);
m_topLevelData.toolbarManager = new ToolBarManager(widgetBoxWrapper, widgetBoxWrapper,
m_toolbarMenu, m_actionManager,
@@ -490,7 +502,7 @@ void QDesignerWorkbench::switchToTopLevelMode()
widgetBoxWrapper->insertToolBarBreak(m_topLevelData.toolbars.at(i));
}
m_topLevelData.toolbarManager->restoreState(settings.toolBarsState(m_mode), MainWindowBase::settingsVersion());
- widgetBoxWrapper->restoreState(settings.mainWindowState(m_mode), MainWindowBase::settingsVersion());
+ widgetBoxWrapper->restoreState(mainWindowState, MainWindowBase::settingsVersion());
bool found_visible_window = false;
for (QDesignerToolWindow *tw : std::as_const(m_toolWindows)) {