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;
}