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;hp=d4324d0aaec66dd8104801c51ec87bbcdd356e6c
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();