Implement IMF Manager additional functions 25/124525/13
authorSeoyeon Kim <seoyeon2.kim@samsung.com>
Tue, 11 Apr 2017 12:14:31 +0000 (21:14 +0900)
committerSeoyeon Kim <seoyeon2.kim@samsung.com>
Fri, 28 Apr 2017 04:04:20 +0000 (13:04 +0900)
- SetInputPanelUserData()
- GetInputPanelUserData()
- GetInputPanelState()
- SetReturnKeyState()
- AutoEnableInputPanel()
- ShowInputPanel()
- HideInputPanel()

This patch should be merged together with https://review.tizen.org/gerrit/#/c/127508/

Change-Id: Ie6ddc093cf9ee4bd247d6d3174be9a0798b71e99
Signed-off-by: Seoyeon Kim <seoyeon2.kim@samsung.com>
adaptors/devel-api/adaptor-framework/imf-manager.cpp
adaptors/devel-api/adaptor-framework/imf-manager.h
adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp
adaptors/ecore/wayland/imf-manager-impl.h
adaptors/integration-api/x11/imf-manager-impl.h
adaptors/wayland/input/text/imf/imf-manager-impl-wl.cpp
adaptors/wayland/input/text/imf/imf-manager-impl.h
adaptors/x11/imf-manager-impl-x.cpp

index 33826c3..f5736d5 100644 (file)
@@ -108,6 +108,41 @@ void ImfManager::ApplyOptions( const InputMethodOptions& options )
   Internal::Adaptor::ImfManager::GetImplementation(*this).ApplyOptions( options );
 }
 
+void ImfManager::SetInputPanelUserData( const std::string& data )
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).SetInputPanelUserData( data );
+}
+
+void ImfManager::GetInputPanelUserData( std::string& data )
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).GetInputPanelUserData( data );
+}
+
+Dali::ImfManager::State ImfManager::GetInputPanelState()
+{
+  return Internal::Adaptor::ImfManager::GetImplementation(*this).GetInputPanelState();
+}
+
+void ImfManager::SetReturnKeyState( bool visible )
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).SetReturnKeyState( visible );
+}
+
+void ImfManager::AutoEnableInputPanel( bool enabled )
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).AutoEnableInputPanel( enabled );
+}
+
+void ImfManager::ShowInputPanel()
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).ShowInputPanel();
+}
+
+void ImfManager::HideInputPanel()
+{
+  Internal::Adaptor::ImfManager::GetImplementation(*this).HideInputPanel();
+}
+
 ImfManager::ImfManagerSignalType& ImfManager::ActivatedSignal()
 {
   return Internal::Adaptor::ImfManager::GetImplementation(*this).ActivatedSignal();
index b3ead5c..18c2557 100644 (file)
@@ -61,7 +61,19 @@ public:
     PREEDIT,             ///< Pre-Edit changed
     COMMIT,              ///< Commit recieved
     DELETESURROUNDING,   ///< Event to delete a range of characters from the string
-    GETSURROUNDING       ///< Event to query string and cursor position
+    GETSURROUNDING,      ///< Event to query string and cursor position
+    PRIVATECOMMAND       ///< Private command sent from the input panel
+  };
+
+  /**
+   * @brief Enumeration for state of the input panel.
+   */
+  enum State
+  {
+    DEFAULT = 0,   ///< Unknown state
+    SHOW,          ///< Input panel is shown
+    HIDE,          ///< Input panel is hidden
+    WILL_SHOW      ///< Input panel in process of being shown
   };
 
   /**
@@ -253,6 +265,47 @@ public:
    */
   void ApplyOptions( const InputMethodOptions& options );
 
+  /**
+   * @brief Sets up the input-panel specific data.
+   * @param[in] data The specific data to be set to the input panel
+   */
+  void SetInputPanelUserData( const std::string& data );
+
+  /**
+   * @brief Gets the specific data of the current active input panel.
+   * @param[in] data The specific data to be got from the input panel
+   */
+  void GetInputPanelUserData( std::string& data );
+
+  /**
+   * @brief Gets the state of the current active input panel.
+   * @return The state of the input panel.
+   */
+  State GetInputPanelState();
+
+  /**
+   * @brief Sets the return key on the input panel to be visible or invisible.
+   *
+   * The default is true.
+   * @param[in] visible True if the return key is visible(enabled), false otherwise.
+   */
+  void SetReturnKeyState( bool visible );
+
+  /**
+   * @brief Enable to show the input panel automatically when focused.
+   * @param[in] enabled If true, the input panel will be shown when focused
+   */
+  void AutoEnableInputPanel( bool enabled );
+
+  /**
+   * @brief Shows the input panel.
+   */
+  void ShowInputPanel();
+
+  /**
+   * @brief Hides the input panel.
+   */
+  void HideInputPanel();
 
 public:
 
index 95de164..fa67134 100644 (file)
@@ -209,6 +209,18 @@ void ImfDeleteSurrounding( void *data, Ecore_IMF_Context *imfContext, void *even
   }
 }
 
+/**
+ * Called when the input method sends a private command.
+ */
+void PrivateCommand( void *data, Ecore_IMF_Context *imfContext, void *event_info )
+{
+  if ( data )
+  {
+    ImfManager* imfManager = reinterpret_cast< ImfManager* > ( data );
+    imfManager->SendPrivateCommand( data, imfContext, event_info );
+  }
+}
+
 BaseHandle Create()
 {
   return ImfManager::Get();
@@ -330,6 +342,7 @@ void ImfManager::DeleteContext()
 
   if ( mIMFContext )
   {
+    ecore_imf_context_del( mIMFContext );
     mIMFContext = NULL;
   }
 }
@@ -341,9 +354,10 @@ void ImfManager::ConnectCallbacks()
   {
     DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::ConnectCallbacks\n" );
 
-    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED,    PreEdit,    this );
-    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_COMMIT,             Commit,     this );
-    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING, ImfDeleteSurrounding, this );
+    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED,      PreEdit,    this );
+    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_COMMIT,               Commit,     this );
+    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING,   ImfDeleteSurrounding, this );
+    ecore_imf_context_event_callback_add( mIMFContext, ECORE_IMF_CALLBACK_PRIVATE_COMMAND_SEND, PrivateCommand, this );
 
     ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT,    InputPanelStateChangeCallback, this );
     ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, InputPanelLanguageChangeCallback, this );
@@ -359,9 +373,10 @@ void ImfManager::DisconnectCallbacks()
   {
     DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::DisconnectCallbacks\n" );
 
-    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED,    PreEdit );
-    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_COMMIT,             Commit );
-    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING, ImfDeleteSurrounding );
+    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_PREEDIT_CHANGED,      PreEdit );
+    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_COMMIT,               Commit );
+    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_DELETE_SURROUNDING,   ImfDeleteSurrounding );
+    ecore_imf_context_event_callback_del( mIMFContext, ECORE_IMF_CALLBACK_PRIVATE_COMMAND_SEND, PrivateCommand );
 
     ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_STATE_EVENT,    InputPanelStateChangeCallback     );
     ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_LANGUAGE_EVENT, InputPanelLanguageChangeCallback  );
@@ -578,6 +593,23 @@ void ImfManager::DeleteSurrounding( void* data, Ecore_IMF_Context* imfContext, v
   }
 }
 
+/**
+ * Called when the input method sends a private command.
+ */
+void ImfManager::SendPrivateCommand( void* data, Ecore_IMF_Context* imfContext, void* event_info )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SendPrivateCommand\n" );
+
+  if( Dali::Adaptor::IsAvailable() )
+  {
+    const char* privateCommandSendEvent = static_cast<const char*>( event_info );
+
+    Dali::ImfManager::ImfEventData imfData( Dali::ImfManager::PRIVATECOMMAND, privateCommandSendEvent, 0, 0 );
+    Dali::ImfManager handle( this );
+    mEventSignal.Emit( handle, imfData );
+  }
+}
+
 void ImfManager::NotifyCursorPosition()
 {
   DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::NotifyCursorPosition\n" );
@@ -694,6 +726,107 @@ void ImfManager::ApplyOptions( const InputMethodOptions& options )
   }
 }
 
+void ImfManager::SetInputPanelUserData( const std::string& data )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelUserData\n" );
+
+  if( mIMFContext )
+  {
+    int length = data.length();
+    ecore_imf_context_input_panel_imdata_set( mIMFContext, &data, length );
+  }
+}
+
+void ImfManager::GetInputPanelUserData( std::string& data )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelUserData\n" );
+
+  if( mIMFContext )
+  {
+    int* length = NULL;
+    ecore_imf_context_input_panel_imdata_get( mIMFContext, &data, length );
+  }
+}
+
+Dali::ImfManager::State ImfManager::GetInputPanelState()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelState\n" );
+
+  if( mIMFContext )
+  {
+    int value;
+    value = ecore_imf_context_input_panel_state_get( mIMFContext );
+
+    switch (value)
+    {
+      case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
+      {
+        return Dali::ImfManager::SHOW;
+        break;
+      }
+
+      case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
+      {
+        return Dali::ImfManager::HIDE;
+        break;
+      }
+
+      case ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW:
+      {
+        return Dali::ImfManager::WILL_SHOW;
+        break;
+      }
+
+      default:
+      {
+        return Dali::ImfManager::DEFAULT;
+      }
+    }
+  }
+  return Dali::ImfManager::DEFAULT;
+}
+
+void ImfManager::SetReturnKeyState( bool visible )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetReturnKeyState\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_return_key_disabled_set( mIMFContext, !visible );
+  }
+}
+
+void ImfManager::AutoEnableInputPanel( bool enabled )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::AutoEnableInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_enabled_set( mIMFContext, enabled );
+  }
+}
+
+void ImfManager::ShowInputPanel()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::ShowInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_show( mIMFContext );
+  }
+}
+
+void ImfManager::HideInputPanel()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::HideInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_focus_out( mIMFContext );
+    ecore_imf_context_input_panel_hide( mIMFContext );
+  }
+}
+
 } // Adaptor
 
 } // Internal
index 24de4ce..73e92c1 100644 (file)
@@ -68,7 +68,7 @@ public:
   /**
    * Connect Callbacks required for IMF.
    * If you don't connect imf callbacks, you can't get the key events.
-   * The events are PreeditChanged, Commit and DeleteSurrounding.
+   * The events are PreeditChanged, Commit, DeleteSurrounding and PrivateCommand.
    */
   void ConnectCallbacks();
 
@@ -127,6 +127,11 @@ public:
    */
   void DeleteSurrounding( void *data, Ecore_IMF_Context *imfContext, void *event_info );
 
+ /**
+  * @copydoc Dali::ImfManager::SendPrivateCommand()
+  */
+  void SendPrivateCommand( void* data, Ecore_IMF_Context* imfContext, void* event_info );
+
   // Cursor related
   /**
    * @copydoc Dali::ImfManager::NotifyCursorPosition()
@@ -173,6 +178,41 @@ public:
   */
   void ApplyOptions( const InputMethodOptions& options );
 
+  /**
+   * @copydoc Dali::ImfManager::SetInputPanelUserData()
+   */
+  void SetInputPanelUserData( const std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelUserData()
+   */
+  void GetInputPanelUserData( std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelState()
+   */
+  Dali::ImfManager::State GetInputPanelState();
+
+  /**
+   * @copydoc Dali::ImfManager::SetReturnKeyState()
+   */
+  void SetReturnKeyState( bool visible );
+
+  /**
+   * @copydoc Dali::ImfManager::AutoEnableInputPanel()
+   */
+  void AutoEnableInputPanel( bool enabled );
+
+  /**
+   * @copydoc Dali::ImfManager::ShowInputPanel()
+   */
+  void ShowInputPanel();
+
+  /**
+   * @copydoc Dali::ImfManager::HideInputPanel()
+   */
+  void HideInputPanel();
+
 public:  // Signals
 
   /**
index 94e7ecd..4972f26 100644 (file)
@@ -176,6 +176,41 @@ public:
   */
   void ApplyOptions( const InputMethodOptions& options );
 
+  /**
+   * @copydoc Dali::ImfManager::SetInputPanelUserData()
+   */
+  void SetInputPanelUserData( const std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelUserData()
+   */
+  void GetInputPanelUserData( std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelState()
+   */
+  Dali::ImfManager::State GetInputPanelState();
+
+  /**
+   * @copydoc Dali::ImfManager::SetReturnKeyState()
+   */
+  void SetReturnKeyState( bool visible );
+
+  /**
+   * @copydoc Dali::ImfManager::AutoEnableInputPanel()
+   */
+  void AutoEnableInputPanel( bool enabled );
+
+  /**
+   * @copydoc Dali::ImfManager::ShowInputPanel()
+   */
+  void ShowInputPanel();
+
+  /**
+   * @copydoc Dali::ImfManager::HideInputPanel()
+   */
+  void HideInputPanel();
+
 public:  // Signals
 
   /**
index ab6b600..3d49a51 100644 (file)
@@ -317,6 +317,35 @@ void ImfManager::ApplyOptions(const InputMethodOptions& options)
 {
 }
 
+void ImfManager::SetInputPanelUserData( const std::string& data )
+{
+}
+
+void ImfManager::GetInputPanelUserData( std::string& data )
+{
+}
+
+Dali::ImfManager::State ImfManager::GetInputPanelState()
+{
+  return Dali::ImfManager::DEFAULT;
+}
+
+void ImfManager::SetReturnKeyState( bool visible )
+{
+}
+
+void ImfManager::AutoEnableInputPanel( bool enabled )
+{
+}
+
+void ImfManager::ShowInputPanel()
+{
+}
+
+void ImfManager::HideInputPanel()
+{
+}
+
 Dali::ImfManager::TextDirection ImfManager::GetTextDirection()
 {
   TextInputManager::SeatInfo& info = mTextInputManager.GetLastActiveSeat();
index 726060b..0cc918c 100644 (file)
@@ -170,6 +170,41 @@ public:
   */
   void ApplyOptions( const InputMethodOptions& options );
 
+  /**
+   * @copydoc Dali::ImfManager::SetInputPanelUserData()
+   */
+  void SetInputPanelUserData( const std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelUserData()
+   */
+  void GetInputPanelUserData( std::string& data );
+
+  /**
+   * @copydoc Dali::ImfManager::GetInputPanelState()
+   */
+  Dali::ImfManager::State GetInputPanelState();
+
+  /**
+   * @copydoc Dali::ImfManager::SetReturnKeyState()
+   */
+  void SetReturnKeyState( bool visible );
+
+  /**
+   * @copydoc Dali::ImfManager::AutoEnableInputPanel()
+   */
+  void AutoEnableInputPanel( bool enabled );
+
+  /**
+   * @copydoc Dali::ImfManager::ShowInputPanel()
+   */
+  void ShowInputPanel();
+
+  /**
+   * @copydoc Dali::ImfManager::HideInputPanel()
+   */
+  void HideInputPanel();
+
 public:  // Signals
 
   /**
index 3a2f913..f97e687 100644 (file)
@@ -231,6 +231,7 @@ void ImfManager::DeleteContext()
 
   if ( mIMFContext )
   {
+    ecore_imf_context_del( mIMFContext );
     mIMFContext = NULL;
   }
 }
@@ -586,6 +587,107 @@ void ImfManager::ApplyOptions( const InputMethodOptions& options )
   }
 }
 
+void ImfManager::SetInputPanelUserData( const std::string& data )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelUserData\n" );
+
+  if( mIMFContext )
+  {
+    int length = data.length();
+    ecore_imf_context_input_panel_imdata_set( mIMFContext, &data, length );
+  }
+}
+
+void ImfManager::GetInputPanelUserData( std::string& data )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelUserData\n" );
+
+  if( mIMFContext )
+  {
+    int* length = NULL;
+    ecore_imf_context_input_panel_imdata_get( mIMFContext, &data, length );
+  }
+}
+
+Dali::ImfManager::State ImfManager::GetInputPanelState()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelState\n" );
+
+  if( mIMFContext )
+  {
+    int value;
+    value = ecore_imf_context_input_panel_state_get( mIMFContext );
+
+    switch (value)
+    {
+      case ECORE_IMF_INPUT_PANEL_STATE_SHOW:
+      {
+        return Dali::ImfManager::SHOW;
+        break;
+      }
+
+      case ECORE_IMF_INPUT_PANEL_STATE_HIDE:
+      {
+        return Dali::ImfManager::HIDE;
+        break;
+      }
+
+      case ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW:
+      {
+        return Dali::ImfManager::WILL_SHOW;
+        break;
+      }
+
+      default:
+      {
+        return Dali::ImfManager::DEFAULT;
+      }
+    }
+  }
+  return Dali::ImfManager::DEFAULT;
+}
+
+void ImfManager::SetReturnKeyState( bool visible )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetReturnKeyState\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_return_key_disabled_set( mIMFContext, !visible );
+  }
+}
+
+void ImfManager::AutoEnableInputPanel( bool enabled )
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::AutoEnableInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_enabled_set( mIMFContext, enabled );
+  }
+}
+
+void ImfManager::ShowInputPanel()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::ShowInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_input_panel_show( mIMFContext );
+  }
+}
+
+void ImfManager::HideInputPanel()
+{
+  DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::HideInputPanel\n" );
+
+  if( mIMFContext )
+  {
+    ecore_imf_context_focus_out( mIMFContext );
+    ecore_imf_context_input_panel_hide( mIMFContext );
+  }
+}
+
 } // Adaptor
 
 } // Internal