summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qcoreevent.h2
-rw-r--r--src/gui/kernel/qapplication.cpp3
-rw-r--r--src/gui/kernel/qsoftkeymanager.cpp52
-rw-r--r--src/gui/kernel/qsoftkeymanager_p.h7
-rw-r--r--src/gui/kernel/qwidget.cpp2
5 files changed, 41 insertions, 25 deletions
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index 11fc988..bc96918 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -283,6 +283,8 @@ public:
SymbianDeferredFocusChanged = 201, // Internal for generating asynchronous focus events on Symbian
+ UpdateSoftKeys = 202, // Internal for compressing soft key updates
+
// 512 reserved for Qt Jambi's MetaCall event
// 513 reserved for Qt Jambi's DeleteOnMainThread event
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index df4a935..774ec23 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -1160,6 +1160,7 @@ bool QApplication::compressEvent(QEvent *event, QObject *receiver, QPostEventLis
|| event->type() == QEvent::Resize
|| event->type() == QEvent::Move
|| event->type() == QEvent::LanguageChange
+ || event->type() == QEvent::UpdateSoftKeys
|| event->type() == QEvent::InputMethod)) {
for (int i = 0; i < postedEvents->size(); ++i) {
const QPostEvent &cur = postedEvents->at(i);
@@ -1177,6 +1178,8 @@ bool QApplication::compressEvent(QEvent *event, QObject *receiver, QPostEventLis
((QMoveEvent *)(cur.event))->p = ((QMoveEvent *)event)->p;
} else if (cur.event->type() == QEvent::LanguageChange) {
;
+ } else if (cur.event->type() == QEvent::UpdateSoftKeys) {
+ ;
} else if ( cur.event->type() == QEvent::InputMethod ) {
*(QInputMethodEvent *)(cur.event) = *(QInputMethodEvent *)event;
} else {
diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index a7a5223..76fb378 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -139,32 +139,40 @@ void QSoftKeyManager::sendKeyEvent()
new QKeyEvent(QEvent::KeyPress, keyToSend, Qt::NoModifier));
}
-void QSoftKeyManager::updateSoftKeys(bool force)
+void QSoftKeyManager::updateSoftKeys()
{
- 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));
- }
+ QEvent *event = new QEvent(QEvent::UpdateSoftKeys);
+ QApplication::postEvent(QSoftKeyManager::instance(), event);
+}
- QWidget *parent = source->parentWidget();
- if (parent && softKeys.isEmpty())
- source = parent;
- else
- break;
- } else {
- source = QApplication::activeWindow();
- }
- } while (source);
+bool QSoftKeyManager::event(QEvent *e)
+{
+ if (e->type() == QEvent::UpdateSoftKeys) {
+ 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);
+ QSoftKeyManager::softKeySource = source;
+ QSoftKeyManager::updateSoftKeys_sys(softKeys);
+ return true;
}
+ return false;
}
#ifdef Q_WS_S60
diff --git a/src/gui/kernel/qsoftkeymanager_p.h b/src/gui/kernel/qsoftkeymanager_p.h
index 743b4d4..229df98 100644
--- a/src/gui/kernel/qsoftkeymanager_p.h
+++ b/src/gui/kernel/qsoftkeymanager_p.h
@@ -60,7 +60,7 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
-class QSoftKeyManager : public QObject
+class Q_AUTOTEST_EXPORT QSoftKeyManager : public QObject
{
Q_OBJECT
@@ -73,7 +73,7 @@ public:
CancelSoftKey,
};
- static void updateSoftKeys(bool force = false);
+ static void updateSoftKeys();
static QAction *createAction(StandardSoftKey standardKey, QWidget *actionWidget);
static QAction *createKeyedAction(StandardSoftKey standardKey, Qt::Key key, QWidget *actionWidget);
@@ -91,6 +91,9 @@ private:
static QWidget *softKeySource;
QHash<QAction*, Qt::Key> keyedActions;
+protected:
+ bool event(QEvent *e);
+
Q_DISABLE_COPY(QSoftKeyManager)
private Q_SLOTS:
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 41d0b23..00ad430 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -8257,7 +8257,7 @@ bool QWidget::event(QEvent *event)
case QEvent::ActionRemoved:
case QEvent::ActionChanged:
#ifdef QT_SOFTKEYS_ENABLED
- QSoftKeyManager::updateSoftKeys(true);
+ QSoftKeyManager::updateSoftKeys();
#endif
actionEvent((QActionEvent*)event);
break;