diff -r f7ac710697a9 -r 06ff229162e9 src/hbplugins/inputmethods/touchinput/hbinputbasicqwertyhandler.cpp --- a/src/hbplugins/inputmethods/touchinput/hbinputbasicqwertyhandler.cpp Mon May 03 12:48:33 2010 +0300 +++ b/src/hbplugins/inputmethods/touchinput/hbinputbasicqwertyhandler.cpp Fri May 14 16:09:54 2010 +0300 @@ -23,11 +23,11 @@ ** ****************************************************************************/ -#include #include #include #include #include +#include #include "hbinputabstractbase.h" #include "hbinputbasicqwertyhandler.h" @@ -45,12 +45,11 @@ // button related operations. bool buttonPressed(const QKeyEvent *event); bool buttonReleased(const QKeyEvent *event); - void _q_timeout(); public: HbFnState mFnState; int mButton; - bool mPreviewAvailable; + bool mLongPressHappened; QChar mPrevDeadKey; HbInputFocusObject *mCurrentlyFocused; }; @@ -58,7 +57,7 @@ HbInputBasicQwertyHandlerPrivate::HbInputBasicQwertyHandlerPrivate() :mFnState(HbFnOff), mButton(0), -mPreviewAvailable(false), +mLongPressHappened(0), mPrevDeadKey(0), mCurrentlyFocused(0) { @@ -75,9 +74,17 @@ bool HbInputBasicQwertyHandlerPrivate::buttonPressed(const QKeyEvent * event) { if (!mKeymap->isDeadKey(event->key())) { + if (event->isAutoRepeat() && mButton == event->key()) { + if (mButton == HbInputButton::ButtonKeyCodeSymbol) { + mInputMethod->selectSpecialCharacterTableMode(); + mLongPressHappened = true; + } + if (mLongPressHappened) { + mButton = 0; + return true; + } + } mButton = event->key(); - mTimer->start(HbLongPressTimerTimeout); - mPreviewAvailable = false; } return false; } @@ -85,17 +92,18 @@ bool HbInputBasicQwertyHandlerPrivate::buttonReleased(const QKeyEvent *event) { Q_Q(HbInputBasicQwertyHandler); + mButton = 0; + int buttonId = event->key(); + if (!event->text().isEmpty()) { + buttonId = event->text().at(0).unicode(); + } + QChar firstChar = 0; QChar secondChar = 0; - // If the timer is not active and it is alpha mode, it is a long press - // and handled in another function. So just return. - if (mTimer->isActive()) { - mTimer->stop(); - } else if (buttonId == Qt::Key_Control) { - return false; - } else if (!(buttonId & 0xffff0000) && mPreviewAvailable) { + if (mLongPressHappened) { + mLongPressHappened = false; return false; } @@ -106,7 +114,7 @@ return false; } int currentTextCase = focusObject->editorInterface().textCase(); - const HbMappedKey *mappedKey = mKeymap->keyForKeycode(HbKeyboardVirtualQwerty, event->key()); + const HbMappedKey *mappedKey = mKeymap->keyForKeycode(mInputMethod->currentKeyboardType(), buttonId); QChar newChar; if (mFnState == HbFnNext) { newChar = (mappedKey->characters(HbModifierFnPressed)).at(0); @@ -127,21 +135,25 @@ } } - if (!mPrevDeadKey.isNull()) { - if (event->key() != Qt::Key_Shift && event->key() != Qt::Key_Alt) { - mKeymap->combineCharacter(mPrevDeadKey, newChar, firstChar, secondChar ); - mPrevDeadKey = 0; - if (firstChar.isNull() && secondChar.isNull()) { + if (mInputMethod->currentKeyboardType() != HbKeyboardSctLandscape) { + if (!mPrevDeadKey.isNull()) { + if (buttonId != HbInputButton::ButtonKeyCodeShift && buttonId != Qt::Key_Alt) { + mKeymap->combineCharacter(mPrevDeadKey, newChar, firstChar, secondChar ); + mPrevDeadKey = 0; + if (firstChar.isNull() && secondChar.isNull()) { + return true; + } + } + } else { + if (mKeymap->isDeadKey(newChar.unicode())) { + mPrevDeadKey = newChar.unicode(); return true; + } else { + firstChar = newChar; } } } else { - if (mKeymap->isDeadKey(newChar.unicode())) { - mPrevDeadKey = newChar.unicode(); - return true; - } else { - firstChar = newChar; - } + firstChar = newChar; } bool ret = false; @@ -156,7 +168,7 @@ } ret = true; break; - case Qt::Key_Shift: { + case HbInputButton::ButtonKeyCodeShift: { HbTextCase currentTextCase = focusObject->editorInterface().textCase(); HbInputLanguage language = mInputMethod->inputState().language(); @@ -186,7 +198,8 @@ ret = true; } break; - case Qt::Key_Control: // Ctrl/Chr + case HbInputButton::ButtonKeyCodeSymbol: // Ctrl/Chr + case HbInputButton::ButtonKeyCodeAlphabet: mInputMethod->switchSpecialCharacterTable(); ret = true; break; @@ -197,7 +210,7 @@ return true; } - if (event->key() == Qt::Key_Delete || event->key() == Qt::Key_Backspace) { + if (event->key() == HbInputButton::ButtonKeyCodeDelete || event->key() == Qt::Key_Backspace) { return false; } @@ -234,25 +247,6 @@ return ret; } -void HbInputBasicQwertyHandlerPrivate::_q_timeout() -{ - mTimer->stop(); - - //If long key press of shift key is received, just return - if (mButton == Qt::Key_Shift) { - return; - } else if (mButton == Qt::Key_Control) { - mInputMethod->selectSpecialCharacterTableMode(); - } - QStringList spellList; - //If long key press of shift key, space key and enter key is received, don't - if (mButton) { - mInputMethod->launchCharacterPreviewPane(mButton); - } - - return; -} - HbInputBasicQwertyHandler::HbInputBasicQwertyHandler(HbInputAbstractMethod* inputMethod) :HbInputBasicHandler(* new HbInputBasicQwertyHandlerPrivate, inputMethod) { @@ -285,8 +279,7 @@ */ bool HbInputBasicQwertyHandler::isComposing() const { - Q_D(const HbInputBasicQwertyHandler); - return d->mTimer->isActive(); + return false; } /*! @@ -301,22 +294,15 @@ switch (action) { case HbInputModeActionCancelButtonPress: case HbInputModeActionReset: - if (d->mTimer->isActive()) { - d->mTimer->stop(); - } + d->mButton = 0; break; case HbInputModeActionFocusRecieved: - if (d->mTimer->isActive()) { - d->mTimer->stop(); - } + d->mButton = 0; // set up auto completer setUpAutoCompleter(); break; case HbInputModeActionFocusLost: - // We should add the commit autocompleting text when focus lost happens - if (d->mTimer->isActive()) { - d->mTimer->stop(); - } + d->mButton = 0; if (d->mCurrentlyFocused != focusObject) { d->mCurrentlyFocused = focusObject; addWordInAutoCompleter(); @@ -329,25 +315,8 @@ return ret; } -/*! -this SLOT is called by input plugin when there is a character selected from character preview pane. -*/ -void HbInputBasicQwertyHandler::charFromPreviewSelected(QString characters) -{ - Q_D(HbInputBasicQwertyHandler); - if(characters.size() > 0) { - sctCharacterSelected(characters.at(0)); - d->mInputMethod->updateState(); - } -} - void HbInputBasicQwertyHandler::sctCharacterSelected(QString character) { HbInputModeHandler::sctCharacterSelected(character); } -void HbInputBasicQwertyHandler::characterPreviewAvailable(bool available) -{ - Q_D(HbInputBasicQwertyHandler); - d->mPreviewAvailable = available; -}