diff options
author | aavit <qt-info@nokia.com> | 2011-09-22 09:02:18 (GMT) |
---|---|---|
committer | aavit <qt-info@nokia.com> | 2011-09-22 09:02:18 (GMT) |
commit | 1b215938323d42276efcf8c293c5da66dca7c76a (patch) | |
tree | 059b57324eb56bc8f403dbb05bbbb447f2212f52 /src/plugins | |
parent | 128c4166ba445112ab73dd98b3e403da0489656e (diff) | |
parent | 085bd7cf2d76f9acd548120f859201b014970a72 (diff) | |
download | Qt-1b215938323d42276efcf8c293c5da66dca7c76a.zip Qt-1b215938323d42276efcf8c293c5da66dca7c76a.tar.gz Qt-1b215938323d42276efcf8c293c5da66dca7c76a.tar.bz2 |
Merge remote-tracking branch 'qt-mainline/4.8'
Conflicts:
dist/changes-4.8.0
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblemenu.cpp | 77 | ||||
-rw-r--r-- | src/plugins/accessible/widgets/qaccessiblemenu.h | 14 | ||||
-rw-r--r-- | src/plugins/bearer/symbian/symbianengine.cpp | 36 |
3 files changed, 117 insertions, 10 deletions
diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.cpp b/src/plugins/accessible/widgets/qaccessiblemenu.cpp index 1454c7c..4ae1d15 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.cpp +++ b/src/plugins/accessible/widgets/qaccessiblemenu.cpp @@ -433,6 +433,8 @@ QString QAccessibleMenuItem::actionText(int action, Text text, int child ) const switch (action) { case Press: case DefaultAction: + if (m_action->menu()) + return QMenu::tr("Open"); return QMenu::tr("Execute"); break; default: @@ -444,11 +446,41 @@ QString QAccessibleMenuItem::actionText(int action, Text text, int child ) const bool QAccessibleMenuItem::doAction(int action, int child, const QVariantList & /*params = QVariantList()*/ ) { - if ((action == Press || action == DefaultAction) && child == 0) { - m_action->trigger(); - return true; + if ((child) || ((action != DefaultAction) && (action != Press))) + return false; + + // if the action has a menu, expand/hide it + if (m_action->menu()) { + if (m_action->menu()->isVisible()) { + m_action->menu()->hide(); + return true; + } else { + if (QMenuBar *bar = qobject_cast<QMenuBar*>(owner())) { + bar->setActiveAction(m_action); + return true; + } else if (QMenu *menu = qobject_cast<QMenu*>(owner())){ + menu->setActiveAction(m_action); + return true; + } + } } - return false; + // no menu + m_action->trigger(); + return true; +} + +// action interface +int QAccessibleMenuItem::actionCount() +{ + return 1; +} + +void QAccessibleMenuItem::doAction(int actionIndex) +{ + if (actionIndex) + return; + + doAction(DefaultAction, 0); } int QAccessibleMenuItem::indexOfChild( const QAccessibleInterface * child ) const @@ -618,7 +650,7 @@ QAccessible::State QAccessibleMenuItem::state(int child ) const delete iface; } } - return s; + return s | HasInvokeExtension;; } QString QAccessibleMenuItem::text ( Text t, int child ) const @@ -654,17 +686,50 @@ QString QAccessibleMenuItem::text ( Text t, int child ) const return str; } +// action interface int QAccessibleMenuItem::userActionCount ( int /*child*/ ) const { return 0; } - QAction *QAccessibleMenuItem::action() const { return m_action; } +QString QAccessibleMenuItem::description(int) +{ + return text(QAccessible::Description, 0); +} + +QString QAccessibleMenuItem::name(int) +{ + return actionText(DefaultAction, QAccessible::Name, 0); +} + +QString QAccessibleMenuItem::localizedName(int) +{ + return text(QAccessible::Name, 0); +} + +QStringList QAccessibleMenuItem::keyBindings(int) +{ + QStringList keys; +#ifndef QT_NO_SHORTCUT + QKeySequence key = m_action->shortcut(); + if (!key.isEmpty()) { + keys.append(key.toString()); + } +#endif + return keys; +} + + +QVariant QAccessibleMenuItem::invokeMethodEx(Method, int, const QVariantList &) +{ + return QVariant(); +} + QWidget *QAccessibleMenuItem::owner() const { return m_owner; diff --git a/src/plugins/accessible/widgets/qaccessiblemenu.h b/src/plugins/accessible/widgets/qaccessiblemenu.h index 680594d..47f42cb 100644 --- a/src/plugins/accessible/widgets/qaccessiblemenu.h +++ b/src/plugins/accessible/widgets/qaccessiblemenu.h @@ -43,6 +43,7 @@ #define QACCESSIBLEMENU_H #include <QtGui/qaccessiblewidget.h> +#include <QtGui/qaccessible2.h> QT_BEGIN_NAMESPACE @@ -101,8 +102,9 @@ protected: -class QAccessibleMenuItem : public QAccessibleInterface +class QAccessibleMenuItem : public QAccessibleActionInterface, public QAccessibleInterfaceEx { + Q_ACCESSIBLE_OBJECT public: explicit QAccessibleMenuItem(QWidget *owner, QAction *w); @@ -123,9 +125,17 @@ public: virtual QString text ( Text t, int child ) const; virtual int userActionCount ( int child ) const; - QWidget *owner() const; + // action interface + virtual int actionCount(); + virtual void doAction(int actionIndex); + virtual QString description(int); + virtual QString name(int); + virtual QString localizedName(int); + virtual QStringList keyBindings(int); + virtual QVariant invokeMethodEx(Method, int, const QVariantList &); + QWidget *owner() const; protected: QAction *action() const; private: diff --git a/src/plugins/bearer/symbian/symbianengine.cpp b/src/plugins/bearer/symbian/symbianengine.cpp index fc2791a..fdfe94a 100644 --- a/src/plugins/bearer/symbian/symbianengine.cpp +++ b/src/plugins/bearer/symbian/symbianengine.cpp @@ -505,8 +505,33 @@ SymbianNetworkConfigurationPrivate *SymbianEngine::configFromConnectionMethodL( cpPriv->bearerType = QNetworkConfiguration::Bearer2G; break; case KCommDbBearerWcdma: - cpPriv->bearerType = QNetworkConfiguration::BearerWCDMA; - break; + { + //This is ambiguous, check the network status to find out what the expected connection will be + TUint mode; + TRequestStatus status; + iConnectionMonitor.GetUintAttribute(0, 0, KMobilePhoneNetworkMode, mode, status); + User::WaitForRequest(status); + if (status != KErrNone) + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; + else switch (mode) { + case EConnMonNetworkModeCdma2000: + cpPriv->bearerType = QNetworkConfiguration::BearerCDMA2000; + break; + case EConnMonNetworkModeWcdma: + case EConnMonNetworkModeTdcdma: + cpPriv->bearerType = QNetworkConfiguration::BearerWCDMA; //includes HSDPA, as this API can't detect it + break; + case EConnMonNetworkModeGsm: + case EConnMonNetworkModeAmps: + case EConnMonNetworkModeCdma95: + cpPriv->bearerType = QNetworkConfiguration::Bearer2G; //includes GPRS and EDGE, Qt API treats them both as 2G + break; + default: + cpPriv->bearerType = QNetworkConfiguration::BearerUnknown; + break; + } + break; + } case KCommDbBearerLAN: cpPriv->bearerType = QNetworkConfiguration::BearerEthernet; break; @@ -1122,6 +1147,13 @@ void SymbianEngine::EventL(const CConnMonEventBase& aEvent) } ); } + + //update bearer type for 2G/3G connections + TInt bearer; + iConnectionMonitor.GetIntAttribute(connectionId, 0, KBearerInfo, bearer, status); + User::WaitForRequest(status); + if (status == KErrNone) + updateMobileBearerToConfigs(TConnMonBearerInfo(bearer)); } else if (connectionStatus == KConfigDaemonStartingDeregistration) { TUint connectionId = realEvent->ConnectionId(); QNetworkConfigurationPrivatePointer ptr = dataByConnectionId(connectionId); |