bool isWordKey(KeyEventDetails::Key k) { if(isAlphabetKey(k) || isNumericKey(k)) { return true; } return false; }
bool DialpadMultitapHandler::eventFilter(QObject *watched, QEvent *event) { if (watched!=&mEditor) { return false; } int type = event->type(); if (type==QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); if (isNumericKey(keyEvent->key()) && keyEvent->text().isEmpty() ) { return true; } } bool keyEventEaten = false; if (type==QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); if (keyEvent->key()==Qt::Key_Asterisk) { if ((mMultitapTimer.elapsed() <= DialpadMaxMultitapTime) && !mGeneratedAsterisk) { // remove the last char by generated backspace QKeyEvent backspaceEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier, ""); HbApplication::sendEvent(&mEditor,&backspaceEvent); // generate +,p,w,* character mAsteriskMultitapIndex = ++mAsteriskMultitapIndex % DialpadAsteriskMultitapCount; int key = DialpadAsteriskMultitapChars[mAsteriskMultitapIndex]; // Allow + character only as a first char in editor int cursorPosition = mEditor.cursorPosition(); if(cursorPosition != 0 && key == Qt::Key_Plus) { mAsteriskMultitapIndex = ++mAsteriskMultitapIndex; Q_ASSERT(mAsteriskMultitapIndex < DialpadAsteriskMultitapCount); key = DialpadAsteriskMultitapChars[mAsteriskMultitapIndex]; } QKeyEvent generatedEvent(QEvent::KeyPress, key, Qt::KeypadModifier, mExtraChar.value(key)); if (key==Qt::Key_Asterisk) { mGeneratedAsterisk = true; } HbApplication::sendEvent(&mEditor,&generatedEvent); keyEventEaten = true; mMultitapTimer.start(); } else { mMultitapTimer.start(); mAsteriskMultitapIndex = 0; } mGeneratedAsterisk = false; } } return keyEventEaten; }