From: Paul Wisbey Date: Tue, 17 Mar 2015 18:10:28 +0000 (+0000) Subject: Added IMF manager hooks X-Git-Tag: dali_1.0.38~11^2~49 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=09591ca3eb1fb1760a9dda23df1848ed7abd43a4 Added IMF manager hooks Change-Id: Id873a801a557604e7ff12018a8b4d07b802503da --- diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index fabfc7d..09a5ecc 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -455,6 +455,19 @@ void TextField::OnKeyInputFocusGained() { VirtualKeyboard::StatusChangedSignal().Connect( this, &TextField::KeyboardStatusChanged ); + ImfManager imfManager = ImfManager::Get(); + + if ( imfManager ) + { + imfManager.EventReceivedSignal().Connect( this, &TextField::OnImfEvent ); + + // Notify that the text editing start. + imfManager.Activate(); + + // When window gain lost focus, the imf manager is deactivated. Thus when window gain focus again, the imf manager must be activated. + imfManager.SetRestoreAfterFocusLost( true ); + } + mController->KeyboardFocusGainEvent(); } @@ -462,6 +475,18 @@ void TextField::OnKeyInputFocusLost() { VirtualKeyboard::StatusChangedSignal().Disconnect( this, &TextField::KeyboardStatusChanged ); + ImfManager imfManager = ImfManager::Get(); + if ( imfManager ) + { + // The text editing is finished. Therefore the imf manager don't have restore activation. + imfManager.SetRestoreAfterFocusLost( false ); + + // Notify that the text editing finish. + imfManager.Deactivate(); + + imfManager.EventReceivedSignal().Disconnect( this, &TextField::OnImfEvent ); + } + mController->KeyboardFocusLostEvent(); } @@ -488,6 +513,39 @@ bool TextField::OnKeyEvent( const KeyEvent& event ) return mController->KeyEvent( event ); } +ImfManager::ImfCallbackData TextField::OnImfEvent( Dali::ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent ) +{ + switch ( imfEvent.eventName ) + { + case ImfManager::PREEDIT: + { + // TODO + break; + } + case ImfManager::COMMIT: + { + // TODO + break; + } + case ImfManager::DELETESURROUNDING: + { + // TODO + break; + } + case ImfManager::GETSURROUNDING: + { + // TODO + break; + } + case ImfManager::VOID: + { + // do nothing + } + } // end switch + + return ImfManager::ImfCallbackData(); +} + void TextField::RequestTextRelayout() { RelayoutRequest(); diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index 4bec09d..fa55c77 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -18,6 +18,9 @@ * */ +// EXTERNAL INCLUDES +#include + // INTERNAL INCLUDES #include #include @@ -116,6 +119,15 @@ private: // From Control virtual bool OnKeyEvent(const KeyEvent& event); /** + * @brief Event received from IMF manager + * + * @param[in] imfManager The IMF manager. + * @param[in] imfEvent The event received. + * @return A data struture indicating if update is needed, cursor position and current text. + */ + ImfManager::ImfCallbackData OnImfEvent( ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent ); + + /** * @copydoc Text::ControlInterface::RequestTextRelayout() */ virtual void RequestTextRelayout();