diff options
author | Janne Anttila <janne.anttila@digia.com> | 2010-02-12 11:12:37 (GMT) |
---|---|---|
committer | Janne Anttila <janne.anttila@digia.com> | 2010-02-12 11:12:37 (GMT) |
commit | 40bc32430551202ba519c4f0a95a341ea4547fb5 (patch) | |
tree | f10bcf5728454657fb82e44ac4492bae55f7e705 /src/gui/kernel/qsoftkeymanager_s60.cpp | |
parent | 9aaf834f9c31cb91cb7dd0693709e6754d836d85 (diff) | |
download | Qt-40bc32430551202ba519c4f0a95a341ea4547fb5.zip Qt-40bc32430551202ba519c4f0a95a341ea4547fb5.tar.gz Qt-40bc32430551202ba519c4f0a95a341ea4547fb5.tar.bz2 |
Fix to S60 softkeys when no active Qt window or native widget is shown.
Softkeys need to be updated also when Qt activewindow is set to NULL,
this is needed that usecase where last Qt widget is closed works
correctly. I.e. closed widget softkeys has to be removed, and replaced
by default "Exit" softkey. Earlier only window activation or widget
focusIn event caused softkey update.
In addition IsDisplayingMenuOrDialog does not work correctly under all
circumstances. Sometimes when menu is being launched the Qt gets
focusChanged event before the menu is actually shown, but menu CBA is
already created. This is fixed by checking that we update CBA only when
AppUi CB is the current one. This assumption works as long as Qt uses
only the CBA created by S60 application framwork and does not create
other CEikButtonGroupContainer instances.
Task-number: QTBUG-6115
Reviewed-by: Sami Merila
Diffstat (limited to 'src/gui/kernel/qsoftkeymanager_s60.cpp')
-rw-r--r-- | src/gui/kernel/qsoftkeymanager_s60.cpp | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/gui/kernel/qsoftkeymanager_s60.cpp b/src/gui/kernel/qsoftkeymanager_s60.cpp index af84a8f..8ac1e31 100644 --- a/src/gui/kernel/qsoftkeymanager_s60.cpp +++ b/src/gui/kernel/qsoftkeymanager_s60.cpp @@ -66,17 +66,18 @@ QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60() cachedCbaIconSize[1] = QSize(0,0); cachedCbaIconSize[2] = QSize(0,0); cachedCbaIconSize[3] = QSize(0,0); - skipNextUpdate = false; } bool QSoftKeyManagerPrivateS60::skipCbaUpdate() { - // lets not update softkeys if + // Lets not update softkeys if // 1. We don't have application panes, i.e. cba - // 2. S60 native dialog or menu is shown - if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) || - CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog() || skipNextUpdate) { - skipNextUpdate = false; + // 2. Our CBA is not active, i.e. S60 native dialog or menu with custom CBA is shown + // Note: Cannot use IsDisplayingMenuOrDialog since CBA update can be triggered before + // menu/dialog CBA is actually displayed i.e. it is being costructed. + CEikButtonGroupContainer *appUiCba = S60->buttonGroupContainer(); + CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current(); + if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) || appUiCba != currentCba) { return true; } return false; @@ -384,9 +385,6 @@ bool QSoftKeyManagerPrivateS60::handleCommand(int command) } qt_symbian_next_menu_from_action(actionContainer); QT_TRAP_THROWING(S60->menuBar()->TryDisplayMenuBarL()); - // TODO: hack remove, it can happen that IsDisplayingMenuOrDialog return false - // in updateSoftKeys_sys, and we will override menu CBA with our own - skipNextUpdate = true; } else { Q_ASSERT(action->softKeyRole() != QAction::NoSoftKey); QWidget *actionParent = action->parentWidget(); |