summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2019-03-27 14:14:33 +0200
committerMahmoud Badri <mahmoud.badri@qt.io>2019-03-27 12:21:43 +0000
commitf8e83aa8e13e0e9febd1c8e9ef5379b1ccc95665 (patch)
tree3c4d25d680e9fe934fbafb0ab812203e3305ec32
parent68f3054eb8a0867114574085c22d13818986cf8a (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.cpp11
-rw-r--r--src/Authoring/Studio/Application/FilterVariantsDlg.h4
-rw-r--r--src/Authoring/Studio/MainFrm.cpp3
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