From 09591ca3eb1fb1760a9dda23df1848ed7abd43a4 Mon Sep 17 00:00:00 2001
From: Paul Wisbey
Date: Tue, 17 Mar 2015 18:10:28 +0000
Subject: [PATCH 1/1] Added IMF manager hooks
Change-Id: Id873a801a557604e7ff12018a8b4d07b802503da
---
.../controls/text-controls/text-field-impl.cpp | 58 ++++++++++++++++++++++
.../controls/text-controls/text-field-impl.h | 12 +++++
2 files changed, 70 insertions(+)
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();
--
2.7.4