diff --git a/pqAbstractActivateEventPlayer.cxx b/pqAbstractActivateEventPlayer.cxx index b0f7964a249adc4502d44694c2c332a79b1428db..29ac1d300266f36da22dc05050eb7d252b93898a 100644 --- a/pqAbstractActivateEventPlayer.cxx +++ b/pqAbstractActivateEventPlayer.cxx @@ -57,52 +57,21 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, if (QMenuBar* const menu_bar = qobject_cast(Object)) { - QMenu* sub_menu = menu_bar->findChild(Arguments); - if (sub_menu) + QAction* action = findAction(menu_bar, Arguments); + if (action) { - QAction* action = 0; - foreach (QAction* cur_action, menu_bar->actions()) - { - if (cur_action->menu() == sub_menu) - { - action = cur_action; - break; - } - } - if (action) - { - menu_bar->setActiveAction(action); - return true; - } + menu_bar->setActiveAction(action); + return true; } + + qCritical() << "couldn't find action " << Arguments; Error = true; return true; } if(QMenu* const object = qobject_cast(Object)) { - - QAction* action = NULL; - QList actions = object->actions(); - for(int j = 0; j != actions.size() && !action; ++j) - { - if(actions[j]->objectName() == Arguments) - { - action = actions[j]; - } - } - - // fall back to the text of the action - if(!action) - { - for(int j = 0; j != actions.size() && !action; ++j) - { - if(actions[j]->text() == Arguments) - { - action = actions[j]; - } - } - } + QAction* action = findAction(object, Arguments); if(!action) { @@ -182,3 +151,59 @@ bool pqAbstractActivateEventPlayer::playEvent(QObject* Object, Error = true; return true; } + +QAction* pqAbstractActivateEventPlayer::findAction(QMenuBar* p, const QString& name) +{ + QList actions = p->actions(); + QAction* action = NULL; + foreach(QAction* a, actions) + { + if(a->menu()->objectName() == name) + { + action = a; + break; + } + } + + if(!action) + { + foreach(QAction* a, actions) + { + if(a->text() == name) + { + action = a; + break; + } + } + } + + return action; +} + +QAction* pqAbstractActivateEventPlayer::findAction(QMenu* p, const QString& name) +{ + QList actions = p->actions(); + QAction* action = NULL; + foreach(QAction* a, actions) + { + if(a->objectName() == name) + { + action = a; + break; + } + } + + if(!action) + { + foreach(QAction* a, actions) + { + if(a->text() == name) + { + action = a; + break; + } + } + } + + return action; +} diff --git a/pqAbstractActivateEventPlayer.h b/pqAbstractActivateEventPlayer.h index 03f51cacc1aa79200fe17ffdeb66170df942750a..7cb7b4e20eb0d1b07426bf4df412242b3e78b76f 100644 --- a/pqAbstractActivateEventPlayer.h +++ b/pqAbstractActivateEventPlayer.h @@ -34,13 +34,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define _pqAbstractActivateEventPlayer_h #include "pqWidgetEventPlayer.h" +class QAction; +class QMenuBar; +class QMenu; /** Concrete implementation of pqWidgetEventPlayer that handles playback of "activate" events for buttons and menus. \sa pqEventPlayer */ -class pqAbstractActivateEventPlayer : +class QTTESTING_EXPORT pqAbstractActivateEventPlayer : public pqWidgetEventPlayer { public: @@ -49,6 +52,10 @@ public: bool playEvent(QObject* Object, const QString& Command, const QString& Arguments, bool& Error); private: + + QAction* findAction(QMenu* p, const QString& name); + QAction* findAction(QMenuBar* p, const QString& name); + pqAbstractActivateEventPlayer(const pqAbstractActivateEventPlayer&); pqAbstractActivateEventPlayer& operator=(const pqAbstractActivateEventPlayer&); }; diff --git a/pqMenuEventTranslator.cxx b/pqMenuEventTranslator.cxx index 6cf4ae426decf3724f388af98862ffaaa019c111..affd8d899e4590dd92b097d7ef0973cd4f12408f 100644 --- a/pqMenuEventTranslator.cxx +++ b/pqMenuEventTranslator.cxx @@ -66,6 +66,10 @@ bool pqMenuEventTranslator::translateEvent(QObject* Object, QEvent* Event, if (action && action->menu()) { QString which = action->menu()->objectName(); + if(which.isEmpty()) + { + which = action->text(); + } emit recordEvent(menubar, "activate", which); } }