diff --git a/frame/popupwindow.cpp b/frame/popupwindow.cpp index 2d746a5e4..f89b7340e 100644 --- a/frame/popupwindow.cpp +++ b/frame/popupwindow.cpp @@ -14,9 +14,25 @@ void PopupWindow::mouseReleaseEvent(QMouseEvent *event) { QQuickWindowQmlImpl::mouseReleaseEvent(event); auto rect = geometry(); - if (!rect.contains(event->globalPosition().toPoint())) { + if (!m_dragging && !rect.contains(event->globalPosition().toPoint()) && type() == Qt::Popup) { close(); } + m_dragging = false; + m_pressing = false; +} + +void PopupWindow::mousePressEvent(QMouseEvent *event) +{ + m_pressing = true; + return QQuickWindowQmlImpl::mousePressEvent(event); +} + +void PopupWindow::mouseMoveEvent(QMouseEvent *event) +{ + if (m_pressing) { + m_dragging = true; + } + return QQuickWindowQmlImpl::mouseMoveEvent(event); } DS_END_NAMESPACE diff --git a/frame/popupwindow.h b/frame/popupwindow.h index 3e68bebf2..d9eb1f451 100644 --- a/frame/popupwindow.h +++ b/frame/popupwindow.h @@ -19,5 +19,11 @@ class PopupWindow : public QQuickWindowQmlImpl protected: void mouseReleaseEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + +private: + bool m_dragging; + bool m_pressing; }; DS_END_NAMESPACE