diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-03-27 14:14:33 +0200 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2019-03-27 12:21:43 +0000 |
commit | f8e83aa8e13e0e9febd1c8e9ef5379b1ccc95665 (patch) | |
tree | 3c4d25d680e9fe934fbafb0ab812203e3305ec32 | |
parent | 68f3054eb8a0867114574085c22d13818986cf8a (diff) |
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 <miikka.heikkinen@qt.io>
-rw-r--r-- | src/Authoring/Studio/Application/FilterVariantsDlg.cpp | 11 | ||||
-rw-r--r-- | src/Authoring/Studio/Application/FilterVariantsDlg.h | 4 | ||||
-rw-r--r-- | 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 <QtCore/qtimer.h> #include <QtQml/qqmlcontext.h> -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 |