From f8e83aa8e13e0e9febd1c8e9ef5379b1ccc95665 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Wed, 27 Mar 2019 14:14:33 +0200 Subject: Fix variants filter dialog close issue Only close the variants filter dialog upon loosing focus if the tool bar variants filter button is not under the mouse. Task-number: QT3DS-3227 Change-Id: Ie90b76e5e0183f82bde18d93e484d822ec536732 Reviewed-by: Miikka Heikkinen --- src/Authoring/Studio/Application/FilterVariantsDlg.cpp | 11 ++++++++--- src/Authoring/Studio/Application/FilterVariantsDlg.h | 4 +++- src/Authoring/Studio/MainFrm.cpp | 3 ++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/Authoring/Studio/Application/FilterVariantsDlg.cpp b/src/Authoring/Studio/Application/FilterVariantsDlg.cpp index d6a47b6d..8a451e9a 100644 --- a/src/Authoring/Studio/Application/FilterVariantsDlg.cpp +++ b/src/Authoring/Studio/Application/FilterVariantsDlg.cpp @@ -34,11 +34,13 @@ #include #include -FilterVariantsDlg::FilterVariantsDlg(QWidget *parent, QAction *action, int actionSize) +FilterVariantsDlg::FilterVariantsDlg(QWidget *parent, QAction *action, int actionSize, + QWidget *actionWidget) : QQuickWidget(parent) , m_model(new FilterVariantsModel(m_variantsFilter, this)) , m_action(action) , m_actionSize(actionSize) + , m_actionWidget(actionWidget) { setWindowTitle(tr("Filter variants")); QTimer::singleShot(0, this, &FilterVariantsDlg::initialize); @@ -90,8 +92,11 @@ void FilterVariantsDlg::showEvent(QShowEvent *event) void FilterVariantsDlg::focusOutEvent(QFocusEvent *e) { QQuickWidget::focusOutEvent(e); - m_action->setChecked(false); - QTimer::singleShot(0, this, &QQuickWidget::close); + + if (!m_actionWidget->underMouse()) { + m_action->setChecked(false); + QTimer::singleShot(0, this, &QQuickWidget::close); + } } void FilterVariantsDlg::keyPressEvent(QKeyEvent *e) diff --git a/src/Authoring/Studio/Application/FilterVariantsDlg.h b/src/Authoring/Studio/Application/FilterVariantsDlg.h index 3de1c294..cc7eab1e 100644 --- a/src/Authoring/Studio/Application/FilterVariantsDlg.h +++ b/src/Authoring/Studio/Application/FilterVariantsDlg.h @@ -40,7 +40,8 @@ class FilterVariantsDlg : public QQuickWidget Q_OBJECT public: - explicit FilterVariantsDlg(QWidget *parent, QAction *action, int actionSize); + explicit FilterVariantsDlg(QWidget *parent, QAction *action, int actionSize, + QWidget *actionWidget); Q_INVOKABLE int actionSize() const; @@ -61,6 +62,7 @@ private: FilterVariantsModel *m_model = nullptr; QAction *m_action = nullptr; int m_actionSize = 0; // width/height of the action icon + QWidget *m_actionWidget = nullptr; }; #endif // FILTER_VARIANTS_DLG_H diff --git a/src/Authoring/Studio/MainFrm.cpp b/src/Authoring/Studio/MainFrm.cpp index 2e76d9d7..348cd351 100644 --- a/src/Authoring/Studio/MainFrm.cpp +++ b/src/Authoring/Studio/MainFrm.cpp @@ -340,8 +340,9 @@ void CMainFrame::OnCreate() // correctly QTimer::singleShot(0, this, [&] { QRect actionGeom = m_ui->m_PlaybackToolbar->actionGeometry(m_ui->actionFilterVariants); + auto *actionWidget = m_ui->m_PlaybackToolbar->widgetForAction(m_ui->actionFilterVariants); m_filterVariantsDlg.reset(new FilterVariantsDlg(this, m_ui->actionFilterVariants, - actionGeom.width())); + actionGeom.width(), actionWidget)); }); // Create the view manager -- cgit v1.2.3