Changeset 651 for trunk/src/gui/kernel/qsoftkeymanager.cpp
- Timestamp:
- Mar 8, 2010, 12:52:58 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.6.2 (added) merged: 650 /branches/vendor/nokia/qt/current merged: 649 /branches/vendor/nokia/qt/4.6.1 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/kernel/qsoftkeymanager.cpp
r561 r651 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 20 09Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 20 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation ([email protected]) … … 42 42 #include "qapplication.h" 43 43 #include "qevent.h" 44 #ifdef Q_WS_S60 45 #include "qstyle.h" 46 #include "private/qt_s60_p.h" 47 #endif 44 #include "qbitmap.h" 48 45 #include "private/qsoftkeymanager_p.h" 49 46 #include "private/qobject_p.h" 47 48 49 50 51 50 52 51 53 #ifndef QT_NO_SOFTKEYMANAGER 52 54 QT_BEGIN_NAMESPACE 53 55 54 #ifdef Q_WS_S6055 static const int s60CommandStart = 6000;56 #endif57 58 class QSoftKeyManagerPrivate : public QObjectPrivate59 {60 Q_DECLARE_PUBLIC(QSoftKeyManager)61 62 public:63 static void updateSoftKeys_sys(const QList<QAction*> &softKeys);64 65 private:66 QHash<QAction*, Qt::Key> keyedActions;67 static QSoftKeyManager *self;68 static QWidget *softKeySource;69 };70 71 QWidget *QSoftKeyManagerPrivate::softKeySource = 0;72 56 QSoftKeyManager *QSoftKeyManagerPrivate::self = 0; 73 57 … … 106 90 } 107 91 108 QSoftKeyManager::QSoftKeyManager() : QObject(*(new QSoftKeyManagerPrivate), 0) 92 QSoftKeyManager::QSoftKeyManager() : 93 #ifdef Q_WS_S60 94 QObject(*(new QSoftKeyManagerPrivateS60), 0) 95 #else 96 QObject(*(new QSoftKeyManagerPrivate), 0) 97 #endif 109 98 { 110 99 } … … 116 105 QAction::SoftKeyRole softKeyRole = QAction::NoSoftKey; 117 106 switch (standardKey) { 107 108 118 109 case OkSoftKey: 119 110 case SelectSoftKey: 120 111 case DoneSoftKey: 121 case MenuSoftKey:122 112 softKeyRole = QAction::PositiveSoftKey; 123 113 break; … … 148 138 } 149 139 150 void QSoftKeyManager::cleanupHash(QObject *obj)140 void QSoftKeyManager::cleanupHash(QObjectobj) 151 141 { 152 142 Q_D(QSoftKeyManager); … … 176 166 } 177 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 178 226 bool QSoftKeyManager::event(QEvent *e) 179 227 { 180 228 #ifndef QT_NO_ACTION 181 if (e->type() == QEvent::UpdateSoftKeys) { 182 QList<QAction*> softKeys; 183 QWidget *source = QApplication::focusWidget(); 184 do { 185 if (source) { 186 QList<QAction*> actions = source->actions(); 187 for (int i = 0; i < actions.count(); ++i) { 188 if (actions.at(i)->softKeyRole() != QAction::NoSoftKey) 189 softKeys.append(actions.at(i)); 190 } 191 192 QWidget *parent = source->parentWidget(); 193 if (parent && softKeys.isEmpty() && !source->isWindow()) 194 source = parent; 195 else 196 break; 197 } else { 198 source = QApplication::activeWindow(); 199 } 200 } while (source); 201 202 QSoftKeyManagerPrivate::softKeySource = source; 203 QSoftKeyManagerPrivate::updateSoftKeys_sys(softKeys); 204 return true; 205 } 229 if (e->type() == QEvent::UpdateSoftKeys) 230 return handleUpdateSoftKeys(); 206 231 #endif //QT_NO_ACTION 207 232 return false; … … 209 234 210 235 #ifdef Q_WS_S60 211 void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys)212 {213 // lets not update softkeys if s60 native dialog or menu is shown214 if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes)215 || CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog())216 return;217 218 CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer();219 nativeContainer->DrawableWindow()->SetOrdinalPosition(0);220 nativeContainer->DrawableWindow()->SetPointerCapturePriority(1); //keep softkeys available in modal dialog221 nativeContainer->DrawableWindow()->SetFaded(EFalse, RWindowTreeNode::EFadeIncludeChildren);222 223 int position = -1;224 bool needsExitButton = true;225 QT_TRAP_THROWING(226 //Using -1 instead of EAknSoftkeyEmpty to avoid flickering.227 nativeContainer->SetCommandL(0, -1, KNullDesC);228 nativeContainer->SetCommandL(2, -1, KNullDesC);229 );230 231 for (int index = 0; index < softkeys.count(); index++) {232 const QAction* softKeyAction = softkeys.at(index);233 switch (softKeyAction->softKeyRole()) {234 // Positive Actions on the LSK235 case QAction::PositiveSoftKey:236 position = 0;237 break;238 case QAction::SelectSoftKey:239 position = 0;240 break;241 // Negative Actions on the RSK242 case QAction::NegativeSoftKey:243 needsExitButton = false;244 position = 2;245 break;246 default:247 break;248 }249 250 int command = (softKeyAction->objectName().contains(QLatin1String("_q_menuSoftKeyAction")))251 ? EAknSoftkeyOptions252 : s60CommandStart + index;253 254 // _q_menuSoftKeyAction action is set to "invisible" and all invisible actions are by default255 // disabled. However we never want to dim options softkey, even it is set to "invisible"256 bool dimmed = (command == EAknSoftkeyOptions) ? false : !softKeyAction->isEnabled();257 258 if (position != -1) {259 const int underlineShortCut = QApplication::style()->styleHint(QStyle::SH_UnderlineShortcut);260 QString iconText = softKeyAction->iconText();261 TPtrC text = qt_QString2TPtrC( underlineShortCut ? softKeyAction->text() : iconText);262 QT_TRAP_THROWING(263 nativeContainer->SetCommandL(position, command, text);264 nativeContainer->DimCommand(command, dimmed);265 );266 }267 }268 269 const Qt::WindowType sourceWindowType = QSoftKeyManagerPrivate::softKeySource270 ? QSoftKeyManagerPrivate::softKeySource->window()->windowType()271 : Qt::Widget;272 273 if (needsExitButton && sourceWindowType != Qt::Dialog && sourceWindowType != Qt::Popup)274 QT_TRAP_THROWING(275 nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QSoftKeyManager::tr("Exit"))));276 277 nativeContainer->DrawDeferred(); // 3.1 needs an extra invitation278 }279 280 236 bool QSoftKeyManager::handleCommand(int command) 281 237 { 282 if (command >= s60CommandStart && QSoftKeyManagerPrivate::softKeySource) { 283 int index = command - s60CommandStart; 284 const QList<QAction*>& softKeys = QSoftKeyManagerPrivate::softKeySource->actions(); 285 for (int i = 0, j = 0; i < softKeys.count(); ++i) { 286 QAction *action = softKeys.at(i); 287 if (action->softKeyRole() != QAction::NoSoftKey) { 288 if (j == index) { 289 QWidget *parent = action->parentWidget(); 290 if (parent && parent->isEnabled()) { 291 action->activate(QAction::Trigger); 292 return true; 293 } 294 } 295 j++; 296 } 297 } 298 } 299 300 return false; 301 } 302 303 #else 304 305 void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &) 306 { 307 } 308 238 return static_cast<QSoftKeyManagerPrivateS60*>(QSoftKeyManager::instance()->d_func())->handleCommand(command); 239 } 309 240 #endif 310 241
Note:
See TracChangeset
for help on using the changeset viewer.