Added IMF manager hooks 84/36984/2
authorPaul Wisbey <p.wisbey@samsung.com>
Tue, 17 Mar 2015 18:10:28 +0000 (18:10 +0000)
committerPaul Wisbey <p.wisbey@samsung.com>
Tue, 17 Mar 2015 18:50:00 +0000 (18:50 +0000)
Change-Id: Id873a801a557604e7ff12018a8b4d07b802503da

dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.h

index fabfc7d..09a5ecc 100644 (file)
@@ -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();
index 4bec09d..fa55c77 100644 (file)
@@ -18,6 +18,9 @@
  *
  */
 
+// EXTERNAL INCLUDES
+#include <dali/public-api/adaptor-framework/imf-manager.h>
+
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/text-controls/text-field.h>
@@ -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();