summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/kernel.pri6
-rw-r--r--src/gui/kernel/qaction.cpp2
-rw-r--r--src/gui/kernel/qaction.h9
-rw-r--r--src/gui/kernel/qapplication_s60.cpp14
-rw-r--r--src/gui/kernel/qsoftkeymanager.cpp260
-rw-r--r--src/gui/kernel/qsoftkeymanager_p.h95
-rw-r--r--src/gui/kernel/qwidget.cpp80
-rw-r--r--src/gui/kernel/qwidget.h3
-rw-r--r--src/gui/kernel/qwidget_p.h5
-rw-r--r--src/gui/kernel/qwidget_s60.cpp72
10 files changed, 380 insertions, 166 deletions
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index 8489817..7cde384 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -46,7 +46,8 @@ HEADERS += \
kernel/qgesture.h \
kernel/qgesture_p.h \
kernel/qstandardgestures.h \
- kernel/qstandardgestures_p.h
+ kernel/qstandardgestures_p.h \
+ kernel/qsoftkeymanager_p.h
SOURCES += \
kernel/qaction.cpp \
@@ -77,7 +78,8 @@ SOURCES += \
kernel/qwidgetaction.cpp \
kernel/qkeymapper.cpp \
kernel/qgesture.cpp \
- kernel/qstandardgestures.cpp
+ kernel/qstandardgestures.cpp \
+ kernel/qsoftkeymanager.cpp
win32 {
DEFINES += QT_NO_DIRECTDRAW
diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp
index c641281..549d07c 100644
--- a/src/gui/kernel/qaction.cpp
+++ b/src/gui/kernel/qaction.cpp
@@ -81,7 +81,7 @@ static QString qt_strippedText(QString s)
QActionPrivate::QActionPrivate() : group(0), enabled(1), forceDisabled(0),
visible(1), forceInvisible(0), checkable(0), checked(0), separator(0), fontSet(false),
- menuRole(QAction::TextHeuristicRole), softKeyRole(QAction::OptionsSoftKey),
+ menuRole(QAction::TextHeuristicRole), softKeyRole(QAction::NoSoftKey),
priority(QAction::NormalPriority), iconVisibleInMenu(-1)
{
#ifdef QT3_SUPPORT
diff --git a/src/gui/kernel/qaction.h b/src/gui/kernel/qaction.h
index 59c1765..df56d2c 100644
--- a/src/gui/kernel/qaction.h
+++ b/src/gui/kernel/qaction.h
@@ -93,10 +93,11 @@ class Q_GUI_EXPORT QAction : public QObject
public:
enum MenuRole { NoRole, TextHeuristicRole, ApplicationSpecificRole, AboutQtRole,
AboutRole, PreferencesRole, QuitRole };
- enum SoftKeyRole { OptionsSoftKey, SelectSoftKey, BackSoftKey, NextSoftKey, PreviousSoftKey,
- OkSoftKey, CancelSoftKey, EditSoftKey, ViewSoftKey, BackSpaceSoftKey,
- EndEditSoftKey, RevertEditSoftKey, DeselectSoftKey, FinishSoftKey,
- MenuSoftKey, ContextMenuSoftKey, ExitSoftKey };
+ enum SoftKeyRole {
+ NoSoftKey, OptionsSoftKey, SelectSoftKey, BackSoftKey, NextSoftKey,
+ PreviousSoftKey, OkSoftKey, CancelSoftKey, EditSoftKey, ViewSoftKey,
+ BackSpaceSoftKey, EndEditSoftKey, RevertEditSoftKey, DeselectSoftKey,
+ FinishSoftKey, MenuSoftKey, ContextMenuSoftKey, ExitSoftKey };
enum Priority { LowPriority = 0,
NormalPriority = 128,
HighPriority = 256};
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 6a381f5..a5d07fd 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -59,6 +59,7 @@
#include "private/qwindowsurface_s60_p.h"
#include "qpaintengine.h"
#include "private/qmenubar_p.h"
+#include "private/qsoftkeymanager_p.h"
#include "apgwgnam.h" // For CApaWindowGroupName
#include <MdaAudioTonePlayer.h> // For CMdaAudioToneUtility
@@ -1348,17 +1349,12 @@ void QApplication::symbianHandleCommand(int command)
exit();
break;
default:
- if (command >= SOFTKEYSTART && command <= SOFTKEYEND) {
- int index= command-SOFTKEYSTART;
- QWidget *focused = QApplication::focusWidget();
- QWidget *softKeySource = focused ? focused : QApplication::activeWindow();
- const QList<QAction*>& softKeys = softKeySource->softKeys();
- Q_ASSERT(index < softKeys.count());
- softKeys.at(index)->activate(QAction::Trigger);
- }
+ bool handled = QSoftKeyManager::handleCommand(command);
#ifdef Q_WS_S60
- else
+ if (!handled)
QMenuBarPrivate::symbianCommands(command);
+#else
+ Q_UNUSED(handled);
#endif
break;
}
diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
new file mode 100644
index 0000000..b1ebd38
--- /dev/null
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -0,0 +1,260 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qapplication.h"
+#include "qevent.h"
+#ifdef Q_WS_S60
+#include "private/qt_s60_p.h"
+#endif
+#include "private/qsoftkeymanager_p.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifdef Q_WS_S60
+static const int s60CommandStart = 6000;
+#endif
+
+QWidget *QSoftKeyManager::softKeySource = 0;
+QSoftKeyManager *QSoftKeyManager::self = 0;
+
+const char *QSoftKeyManager::standardSoftKeyText(QAction::SoftKeyRole role)
+{
+ const char *softKeyText = 0;
+ switch (role) {
+ case QAction::OptionsSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Options");
+ break;
+ case QAction::SelectSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Select");
+ break;
+ case QAction::BackSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Back");
+ break;
+ case QAction::NextSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Next");
+ break;
+ case QAction::PreviousSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Previous");
+ break;
+ case QAction::OkSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Ok");
+ break;
+ case QAction::CancelSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Cancel");
+ break;
+ case QAction::EditSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "Edit");
+ break;
+ case QAction::ViewSoftKey:
+ softKeyText = QT_TRANSLATE_NOOP("QSoftKeyManager", "View");
+ break;
+ default:
+ ;
+ };
+
+ return softKeyText;
+}
+
+QSoftKeyManager *QSoftKeyManager::instance()
+{
+ if (!QSoftKeyManager::self)
+ QSoftKeyManager::self = new QSoftKeyManager;
+
+ return self;
+}
+
+QSoftKeyManager::QSoftKeyManager() : QObject()
+{
+}
+
+QAction *QSoftKeyManager::createAction(QAction::SoftKeyRole softKeyRole, QWidget *actionWidget)
+{
+ const char* text = standardSoftKeyText(softKeyRole);
+ QAction *action = new QAction(QSoftKeyManager::tr(text), actionWidget);
+ action->setSoftKeyRole(softKeyRole);
+ return action;
+}
+
+/*! \internal
+
+ Creates a QAction and registers the 'triggered' signal to send the given key event to
+ \a actionWidget as a convenience.
+
+*/
+QAction *QSoftKeyManager::createKeyedAction(QAction::SoftKeyRole softKeyRole, Qt::Key key, QWidget *actionWidget)
+{
+ QScopedPointer<QAction> action(createAction(softKeyRole, actionWidget));
+
+ connect(action.data(), SIGNAL(triggered()), QSoftKeyManager::instance(), SLOT(sendKeyEvent()));
+
+ QSoftKeyManager::instance()->keyedActions.insert(action.data(), key);
+ return action.take();
+}
+
+void QSoftKeyManager::sendKeyEvent()
+{
+ QAction *action = qobject_cast<QAction*>(sender());
+
+ if (!action)
+ return;
+
+ Qt::Key keyToSend = keyedActions.value(action, Qt::Key_unknown);
+
+ if (keyToSend != Qt::Key_unknown)
+ QApplication::postEvent(action->parentWidget(),
+ new QKeyEvent(QEvent::KeyPress, keyToSend, Qt::NoModifier));
+}
+
+void QSoftKeyManager::updateSoftKeys(bool force)
+{
+ QList<QAction*> softKeys;
+ QWidget *source = QApplication::focusWidget();
+ do {
+ if (source) {
+ QList<QAction*> actions = source->actions();
+ for (int i = 0; i < actions.count(); ++i) {
+ if (actions.at(i)->softKeyRole() != QAction::NoSoftKey)
+ softKeys.append(actions.at(i));
+ }
+
+ QWidget *parent = source->parentWidget();
+ if (parent && softKeys.isEmpty())
+ source = parent;
+ else
+ break;
+ } else {
+ source = QApplication::activeWindow();
+ }
+ } while (source);
+
+ if (force || (source != QSoftKeyManager::softKeySource)) {
+ QSoftKeyManager::softKeySource = source;
+ QSoftKeyManager::updateSoftKeys_sys(softKeys);
+ }
+}
+
+#ifdef Q_WS_S60
+void QSoftKeyManager::updateSoftKeys_sys(const QList<QAction*> &softkeys)
+{
+
+ CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer();
+ QT_TRAP_THROWING(nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS));
+
+ int position = -1;
+ int command;
+ bool needsExitButton = true;
+
+ for (int index = 0; index < softkeys.count(); index++) {
+ const QAction* softKeyAction = softkeys.at(index);
+ switch (softKeyAction->softKeyRole()) {
+ // Positive Actions go on LSK
+ case QAction::OptionsSoftKey:
+ case QAction::MenuSoftKey:
+ case QAction::ContextMenuSoftKey:
+ command = EAknSoftkeyOptions; //Calls DynInitMenuPane in AppUI
+ position = 0;
+ break;
+ case QAction::SelectSoftKey:
+ case QAction::PreviousSoftKey:
+ case QAction::OkSoftKey:
+ case QAction::EditSoftKey:
+ case QAction::ViewSoftKey:
+ case QAction::EndEditSoftKey:
+ case QAction::FinishSoftKey:
+ command = s60CommandStart + index;
+ position = 0;
+ break;
+ // Negative Actions on the RSK
+ case QAction::BackSoftKey:
+ case QAction::NextSoftKey:
+ case QAction::CancelSoftKey:
+ case QAction::BackSpaceSoftKey:
+ case QAction::RevertEditSoftKey:
+ case QAction::DeselectSoftKey:
+ needsExitButton = false;
+ command = s60CommandStart + index;
+ position = 2;
+ break;
+ case QAction::ExitSoftKey:
+ needsExitButton = false;
+ command = EAknSoftkeyExit; //Calls HandleCommand in AppUI
+ position = 2;
+ break;
+ default:
+ break;
+ }
+
+ if (position != -1) {
+ TPtrC text = qt_QString2TPtrC(softKeyAction->text());
+ QT_TRAP_THROWING(nativeContainer->SetCommandL(position, command, text));
+ }
+ }
+
+ if (needsExitButton)
+ QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QObject::tr("Exit"))));
+
+ nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation
+}
+
+bool QSoftKeyManager::handleCommand(int command)
+{
+ if (command >= s60CommandStart && QSoftKeyManager::softKeySource) {
+ int index = command - s60CommandStart;
+ const QList<QAction*>& softKeys = QSoftKeyManager::softKeySource->actions();
+ if (index < softKeys.count()) {
+ softKeys.at(index)->activate(QAction::Trigger);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+#else
+
+void QSoftKeyManager::updateSoftKeys_sys(const QList<QAction*> &)
+{
+}
+
+#endif
+
+QT_END_NAMESPACE
+
diff --git a/src/gui/kernel/qsoftkeymanager_p.h b/src/gui/kernel/qsoftkeymanager_p.h
new file mode 100644
index 0000000..630dd9f
--- /dev/null
+++ b/src/gui/kernel/qsoftkeymanager_p.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSOFTKEYMANAGER_P_H
+#define QSOFTKEYMANAGER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include "QtGui/qaction.h"
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+class QSoftKeyManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ static void updateSoftKeys(bool force = false);
+ static QAction *createAction(QAction::SoftKeyRole standardRole, QWidget *actionWidget);
+ static QAction *createKeyedAction(QAction::SoftKeyRole standardRole, Qt::Key key, QWidget *actionWidget);
+
+#ifdef Q_WS_S60
+ static bool handleCommand(int);
+#endif
+
+private:
+ QSoftKeyManager();
+ static QSoftKeyManager *instance();
+ static const char *standardSoftKeyText(QAction::SoftKeyRole role);
+ static void updateSoftKeys_sys(const QList<QAction*> &softKeys);
+
+ static QSoftKeyManager *self;
+ static QWidget *softKeySource;
+ QHash<QAction*, Qt::Key> keyedActions;
+
+ Q_DISABLE_COPY(QSoftKeyManager)
+
+private Q_SLOTS:
+ void sendKeyEvent();
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif //QSOFTKEYMANAGER_P_H
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 4f1ab94..461834c 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -82,6 +82,7 @@
#include "private/qstyle_p.h"
#include "private/qinputcontext_p.h"
#include "qfileinfo.h"
+#include "private/qsoftkeymanager_p.h"
#if defined (Q_WS_WIN)
# include <private/qwininputcontext_p.h>
@@ -4971,13 +4972,6 @@ void QWidget::render(QPainter *painter, const QPoint &targetOffset,
d->extra->inRenderWithPainter = false;
}
-#if !defined(Q_OS_SYMBIAN)
-void QWidgetPrivate::setSoftKeys_sys(const QList<QAction*> &softkeys)
-{
- Q_UNUSED(softkeys)
-}
-#endif // !defined(Q_OS_SYMBIAN)
-
/*!
Returns a pointer to this widget's effect if it has one; otherwise 0.
@@ -7997,7 +7991,9 @@ bool QWidget::event(QEvent *event)
}
break;
case QEvent::FocusIn:
- d->setSoftKeys_sys(softKeys());
+#ifdef QT_KEYPAD_NAVIGATION
+ QSoftKeyManager::updateSoftKeys();
+#endif
focusInEvent((QFocusEvent*)event);
break;
@@ -8148,8 +8144,10 @@ bool QWidget::event(QEvent *event)
QApplication::sendEvent(w, event);
}
+#ifdef QT_KEYPAD_NAVIGATION
if (isWindow() && isActiveWindow())
- d->setSoftKeys_sys(softKeys());
+ QSoftKeyManager::updateSoftKeys();
+#endif
break; }
@@ -8258,6 +8256,9 @@ bool QWidget::event(QEvent *event)
case QEvent::ActionAdded:
case QEvent::ActionRemoved:
case QEvent::ActionChanged:
+#ifdef QT_KEYPAD_NAVIGATION
+ QSoftKeyManager::updateSoftKeys(true);
+#endif
actionEvent((QActionEvent*)event);
break;
#endif
@@ -11938,67 +11939,6 @@ void QWidget::clearMask()
setMask(QRegion());
}
-/*!
- \preliminary
- \since 4.6
-
- Returns the (possibly empty) list of this widget's softkeys.
- Returned list cannot be changed. Softkeys should be added
- and removed via method called setSoftKeys
-
- \sa setSoftKey(), setSoftKeys()
-*/
-const QList<QAction*>& QWidget::softKeys() const
-{
- Q_D(const QWidget);
- if( d->softKeys.count() > 0)
- return d->softKeys;
- if (isWindow() || !parentWidget())
- return d->softKeys;
-
- return parentWidget()->softKeys();
-}
-
-/*!
- \preliminary
- \since 4.6
-
- Sets the softkey \a softKey to this widget's list of softkeys.
- Setting 0 as softkey will clear all the existing softkeys set
- to the widget. A QWidget can have 0 or more softkeys.
-
- \sa softKeys(), setSoftKeys()
-*/
-void QWidget::setSoftKey(QAction *softKey)
-{
- Q_D(QWidget);
- qDeleteAll(d->softKeys);
- d->softKeys.clear();
- if (softKey)
- d->softKeys.append(softKey);
- if ((!QApplication::focusWidget() && this == QApplication::activeWindow())
- || QApplication::focusWidget() == this)
- d->setSoftKeys_sys(this->softKeys());
-}
-
-/*!
- Sets the list of softkeys \a softKeys to this widget's list of softkeys.
- A QWidget can have 0 or more softkeys.
-
- \sa softKeys(), setSoftKey()
-*/
-void QWidget::setSoftKeys(const QList<QAction*> &softKeys)
-{
- Q_D(QWidget);
- qDeleteAll(d->softKeys);
- d->softKeys.clear();
- d->softKeys = softKeys;
-
- if ((!QApplication::focusWidget() && this == QApplication::activeWindow())
- || QApplication::focusWidget() == this)
- d->setSoftKeys_sys(this->softKeys());
-}
-
/*! \fn const QX11Info &QWidget::x11Info() const
Returns information about the configuration of the X display used to display
the widget.
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index 8410775..7e250e2 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -564,9 +564,6 @@ public:
void removeAction(QAction *action);
QList<QAction*> actions() const;
#endif
- const QList<QAction*>& softKeys() const;
- void setSoftKey(QAction *softKey);
- void setSoftKeys(const QList<QAction*> &softKeys);
QWidget *parentWidget() const;
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 5e06c29..5a9c48c 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -85,9 +85,6 @@
#if defined(Q_OS_SYMBIAN)
class RDrawableWindow;
class CCoeControl;
-// The following 2 defines may only be needed for s60. To be seen.
-const int SOFTKEYSTART=5000;
-const int SOFTKEYEND=5004;
#endif
QT_BEGIN_NAMESPACE
@@ -263,7 +260,6 @@ public:
explicit QWidgetPrivate(int version = QObjectPrivateVersion);
~QWidgetPrivate();
- void setSoftKeys_sys(const QList<QAction*> &softkeys);
QWExtra *extraData() const;
QTLWExtra *topData() const;
QTLWExtra *maybeTopData() const;
@@ -517,7 +513,6 @@ public:
QWidget *focus_next;
QWidget *focus_prev;
QWidget *focus_child;
- QList<QAction*> softKeys;
QLayout *layout;
QRegion *needsFlush;
QPaintDevice *redirectDev;
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 3744377..4fef020 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -78,78 +78,6 @@ static bool isEqual(const QList<QAction*>& a, const QList<QAction*>& b)
return true;
}
-
-void QWidgetPrivate::setSoftKeys_sys(const QList<QAction*> &softkeys)
-{
-#ifdef Q_WS_S60
- Q_Q(QWidget);
- if (QApplication::focusWidget() && q!=QApplication::focusWidget()) {
- QList<QAction *> old = QApplication::focusWidget()->softKeys();
- if (isEqual(old, softkeys ))
- return;
- }
- CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer();
- QT_TRAP_THROWING(nativeContainer->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS));
-
- int position = -1;
- int command;
- bool needsExitButton = true;
-
- for (int index = 0; index < softkeys.count(); index++) {
- const QAction* softKeyAction = softkeys.at(index);
- switch (softKeyAction->softKeyRole()) {
- // Positive Actions go on LSK
- case QAction::OptionsSoftKey:
- case QAction::MenuSoftKey:
- case QAction::ContextMenuSoftKey:
- command = EAknSoftkeyOptions; //Calls DynInitMenuPane in AppUI
- position = 0;
- break;
- case QAction::SelectSoftKey:
- case QAction::PreviousSoftKey:
- case QAction::OkSoftKey:
- case QAction::EditSoftKey:
- case QAction::ViewSoftKey:
- case QAction::EndEditSoftKey:
- case QAction::FinishSoftKey:
- command = SOFTKEYSTART + index;
- position = 0;
- break;
- // Negative Actions on the RSK
- case QAction::BackSoftKey:
- case QAction::NextSoftKey:
- case QAction::CancelSoftKey:
- case QAction::BackSpaceSoftKey:
- case QAction::RevertEditSoftKey:
- case QAction::DeselectSoftKey:
- needsExitButton = false;
- command = SOFTKEYSTART + index;
- position = 2;
- break;
- case QAction::ExitSoftKey:
- needsExitButton = false;
- command = EAknSoftkeyExit; //Calls HandleCommand in AppUI
- position = 2;
- break;
- default:
- break;
- }
-
- if (position != -1) {
- TPtrC text = qt_QString2TPtrC(softKeyAction->text());
- QT_TRAP_THROWING(nativeContainer->SetCommandL(position, command, text));
- }
- }
-
- if (needsExitButton)
- QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QObject::tr("Exit"))));
-
- nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation
-#else
- Q_UNUSED(softkeys)
-#endif
-}
-
void QWidgetPrivate::setWSGeometry(bool /* dontShow */, const QRect & /* rect */)
{