diff --git a/frame/util/dockpopupwindow.cpp b/frame/util/dockpopupwindow.cpp index 36d187b02..5675eba52 100644 --- a/frame/util/dockpopupwindow.cpp +++ b/frame/util/dockpopupwindow.cpp @@ -36,7 +36,8 @@ DWIDGET_USE_NAMESPACE DockPopupWindow::DockPopupWindow(QWidget *parent) : DArrowRectangle(ArrowBottom, parent), m_model(false), - m_regionInter(new DRegionMonitor(this)) + m_regionInter(new DRegionMonitor(this)), + m_enableMouseRelease(true) { setMargin(0); m_wmHelper = DWindowManagerHelper::instance(); @@ -94,15 +95,26 @@ void DockPopupWindow::show(const QPoint &pos, const bool model) if (m_model) { m_regionInter->registerRegion(); } + blockButtonRelease(); } void DockPopupWindow::show(const int x, const int y) { m_lastPoint = QPoint(x, y); + blockButtonRelease(); DArrowRectangle::show(x, y); } +void DockPopupWindow::blockButtonRelease() +{ + // 短暂的不处理鼠标release事件,防止出现刚显示又被隐藏的情况 + m_enableMouseRelease = false; + QTimer::singleShot(10, this, [this] { + m_enableMouseRelease = true; + }); +} + void DockPopupWindow::hide() { if (m_regionInter->registered()) @@ -153,6 +165,9 @@ void DockPopupWindow::onGlobMouseRelease(const QPoint &mousePos, const int flag) { Q_ASSERT(m_model); + if (!m_enableMouseRelease) + return; + if (!((flag == DRegionMonitor::WatchedFlags::Button_Left) || (flag == DRegionMonitor::WatchedFlags::Button_Right))) { return; diff --git a/frame/util/dockpopupwindow.h b/frame/util/dockpopupwindow.h index 81465abea..ca63f505e 100644 --- a/frame/util/dockpopupwindow.h +++ b/frame/util/dockpopupwindow.h @@ -58,6 +58,7 @@ protected: void showEvent(QShowEvent *e); void enterEvent(QEvent *e); bool eventFilter(QObject *o, QEvent *e); + void blockButtonRelease(); private slots: void onGlobMouseRelease(const QPoint &mousePos, const int flag); @@ -70,6 +71,7 @@ private: DRegionMonitor *m_regionInter; DWindowManagerHelper *m_wmHelper; + bool m_enableMouseRelease; }; #endif // DOCKPOPUPWINDOW_H