From 3bc60c59bf967425afb9b2ef891b5c701a4f1f86 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 21 Sep 2009 14:40:53 +0200 Subject: Ensure that the menu only shows when clicking on the menu button In Qt 3 clicking on the toolbutton would not popup the menu, only when clicking on the arrow for the menu popup would this appear if the toolbutton had MenuPopup mode set. When a Q3ActionGroup is used and added to a toolbar then it will give a toolbutton with such a button. This patch fixes the behaviour so that only clicking on the arrow button will cause the menu to appear in this mode. Reviewed-by: Thierry --- tests/auto/q3toolbar/tst_q3toolbar.cpp | 54 ++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'tests/auto/q3toolbar') diff --git a/tests/auto/q3toolbar/tst_q3toolbar.cpp b/tests/auto/q3toolbar/tst_q3toolbar.cpp index 56b24f0772..a291f3ca56 100644 --- a/tests/auto/q3toolbar/tst_q3toolbar.cpp +++ b/tests/auto/q3toolbar/tst_q3toolbar.cpp @@ -46,6 +46,8 @@ #include #include #include +#include +#include //TESTED_CLASS= //TESTED_FILES= @@ -70,6 +72,7 @@ public slots: private slots: void toggled(); + void actionGroupPopup(); // task-specific tests below me void task182657(); @@ -134,6 +137,57 @@ void tst_Q3ToolBar::toggled() } +class MenuEventFilter : public QObject +{ +public: + MenuEventFilter(QObject *parent = 0) : QObject(parent), menuShown(false) {} + bool wasMenuShown() const { return menuShown; } + void setMenuShown(bool b) { menuShown = b; } +protected: + bool eventFilter(QObject *o, QEvent *e) + { + if (e->type() == QEvent::Show) { + menuShown = true; + QTimer::singleShot(0, o, SLOT(hide())); + } + return false; + } +private: + bool menuShown; +}; + +void tst_Q3ToolBar::actionGroupPopup() +{ + Q3ActionGroup* ag = new Q3ActionGroup(testWidget); + ag->setText("Group"); + ag->setUsesDropDown(true); + ag->setExclusive(false); + Q3Action *a = new Q3Action(QIcon(), "ActionA", QKeySequence(), ag); + a->setToggleAction(true); + Q3Action *b = new Q3Action(QIcon(), "ActionB", QKeySequence(), ag); + b->setToggleAction(true); + ag->addTo(testWidget); + QTest::qWait(100); +#ifndef NOFINDCHILDRENMETHOD + QList list = testWidget->findChildren(); +#else + QList list = qFindChildren(testWidget, QString()); +#endif + QToolButton *tb = 0; + for (int i=0;imenu()) { + tb = list.at(i); + break; + } + } + MenuEventFilter mef; + tb->menu()->installEventFilter(&mef); + QTest::mouseClick(tb, Qt::LeftButton, 0, QPoint(5,5)); + QVERIFY(!mef.wasMenuShown()); + QTest::mouseClick(tb, Qt::LeftButton, 0, QPoint(tb->rect().right() - 5, tb->rect().bottom() - 5)); + QVERIFY(mef.wasMenuShown()); +} + class Q3MainWindow_task182657 : public Q3MainWindow { Q3ToolBar *toolbar; -- cgit v1.2.3