From 516a7063e5e747b7d4f5f24cb4bea7d1259f6390 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 3 Nov 2019 04:22:15 +0100 Subject: [PATCH] [UI] avoid "jumping around" if window was resized * resizing in frameless is subject of QSizeGrip in the status bar * also make sure resize grip is always aligned to the right QSizePolicy::MinimumExpanding * the last point still still happens (resize button centered) for an unknown reason --- src/blackgui/enableforframelesswindow.cpp | 13 ++++++++++++- src/blackgui/enableforframelesswindow.h | 2 ++ src/blackgui/managedstatusbar.cpp | 4 ++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/blackgui/enableforframelesswindow.cpp b/src/blackgui/enableforframelesswindow.cpp index b4cfd8501..a9fda4230 100644 --- a/src/blackgui/enableforframelesswindow.cpp +++ b/src/blackgui/enableforframelesswindow.cpp @@ -213,8 +213,19 @@ namespace BlackGui bool CEnableForFramelessWindow::handleMouseMoveEvent(QMouseEvent *event) { Q_ASSERT(m_widget); - if (m_windowMode == WindowFrameless && event->buttons() & Qt::LeftButton && !m_framelessDragPosition.isNull()) + if (m_windowMode == WindowFrameless && event->buttons() == Qt::LeftButton && !m_framelessDragPosition.isNull()) { + const QSize s = m_widget->size(); + const bool changedSize = (m_moveSize != s); + + // avoid "jumping around" if window was resized + // resizing in frameless is subject of QSizeGrip in the status bar + if (changedSize) + { + m_moveSize = s; + return false; + } + m_widget->move(event->globalPos() - m_framelessDragPosition); event->accept(); return true; diff --git a/src/blackgui/enableforframelesswindow.h b/src/blackgui/enableforframelesswindow.h index 639ecf6b5..0e2bc3c19 100644 --- a/src/blackgui/enableforframelesswindow.h +++ b/src/blackgui/enableforframelesswindow.h @@ -16,6 +16,7 @@ #include #include #include +#include #include class QEvent; @@ -88,6 +89,7 @@ namespace BlackGui protected: QPoint m_framelessDragPosition; //!< position, if moving is handled with frameless window + QSize m_moveSize; //!< size when moved (in frameless window) QPushButton *m_framelessCloseButton = nullptr; //!< close button WindowMode m_windowMode = WindowNormal; //!< Window mode, \sa WindowMode WindowMode m_originalWindowMode = WindowNormal; //!< mode when initialized diff --git a/src/blackgui/managedstatusbar.cpp b/src/blackgui/managedstatusbar.cpp index a5dc250ea..c954299ae 100644 --- a/src/blackgui/managedstatusbar.cpp +++ b/src/blackgui/managedstatusbar.cpp @@ -45,7 +45,7 @@ namespace BlackGui m_ownedStatusBar = statusBar ? false : true; m_statusBar = statusBar ? statusBar : new QStatusBar(); if (m_statusBar->objectName().isEmpty()) { m_statusBar->setObjectName("sb_ManagedStatusBar"); } - if (m_ownedStatusBar) { m_statusBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);} + // if (m_ownedStatusBar) { m_statusBar->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);} m_statusBarIcon = new QLabel(m_statusBar); m_statusBarIcon->setObjectName(QString("lbl_StatusBarIcon").append(m_statusBar->objectName())); @@ -67,7 +67,7 @@ namespace BlackGui if (m_ownedStatusBar) { // self created status bar - QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); + QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(m_statusBar->sizePolicy().hasHeightForWidth());