diff options
author | Iikka Eklund <iikka.eklund@digia.com> | 2014-04-02 07:36:48 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-02 07:36:48 +0200 |
commit | d6f58e5e17d58c640fc7779652008fda0d66f41d (patch) | |
tree | d50d27e260c9eaf4bc2bcb4480b8a069a3aed857 /tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | |
parent | 83de197a57ff6c3e5bbad26bd871981285384fcb (diff) | |
parent | 0ab63b035a649dc1982c867cd37d466d249004b9 (diff) |
Merge "Merge remote-tracking branch 'origin/stable' into dev" into refs/staging/dev
Diffstat (limited to 'tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp')
-rw-r--r-- | tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp | 41 |
1 files changed, 31 insertions, 10 deletions
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index d3f6c2db00..5b178903cf 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -3065,21 +3065,30 @@ void tst_QGraphicsProxyWidget::createProxyForChildWidget() delete boxProxy; } -class ContextMenuWidget : public QWidget +class ContextMenuWidget : public QLabel { Q_OBJECT public: ContextMenuWidget() - : embeddedPopup(false), - gotContextMenuEvent(false) + : QLabel(QStringLiteral("ContextMenuWidget")) + , embeddedPopup(false) + , gotContextMenuEvent(false) + , m_embeddedPopupSet(false) + , m_timer(0) { } bool embeddedPopup; bool gotContextMenuEvent; protected: bool event(QEvent *event) { - if (event->type() == QEvent::ContextMenu) - QTimer::singleShot(0, this, SLOT(checkMenu())); + if (event->type() == QEvent::ContextMenu) { + if (!m_timer) { + m_timer = new QTimer(this); + m_timer->setInterval(10); + connect(m_timer, SIGNAL(timeout()), this, SLOT(checkMenu())); + m_timer->start(); + } + } return QWidget::event(event); } void contextMenuEvent(QContextMenuEvent *) @@ -3090,10 +3099,19 @@ protected: private slots: void checkMenu() { - if (this->findChild<QMenu *>()) - embeddedPopup = true; + QMenu *menu = findChild<QMenu *>(); + if (!m_embeddedPopupSet) { + m_embeddedPopupSet = true; + embeddedPopup = menu != 0; + } + if (menu && menu->isVisible()) + menu->hide(); hide(); } + +private: + bool m_embeddedPopupSet; + QTimer *m_timer; }; void tst_QGraphicsProxyWidget::actionsContextMenu_data() @@ -3120,8 +3138,11 @@ void tst_QGraphicsProxyWidget::actionsContextMenu() widget->setContextMenuPolicy(Qt::ActionsContextMenu); } QGraphicsScene scene; - + QGraphicsProxyWidget *proxyWidget = scene.addWidget(widget); QGraphicsView view(&scene); + view.setWindowTitle(QStringLiteral("actionsContextMenu")); + view.resize(200, 200); + view.move(QGuiApplication::primaryScreen()->geometry().center() - QPoint(100, 100)); view.show(); QApplication::setActiveWindow(&view); QVERIFY(QTest::qWaitForWindowActive(&view)); @@ -3129,9 +3150,9 @@ void tst_QGraphicsProxyWidget::actionsContextMenu() QTRY_VERIFY(view.hasFocus()); if (hasFocus) - scene.addWidget(widget)->setFocus(); + proxyWidget->setFocus(); else - scene.addWidget(widget)->clearFocus(); + proxyWidget->clearFocus(); QApplication::processEvents(); |