X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fecore%2Fwayland%2Fimf-manager-impl-ecore-wl.cpp;h=d476e29fafab6a625259aff7f7bc6a052ba1eacf;hb=33bc96fa31796b3e49a0a8e9c19e9d64726d0b21;hp=723c90e0a0aac5dd6d5eba21c454ccc0e582207b;hpb=76c462a74205707283c580741c7342046f5dc73b;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp b/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp index 723c90e..d476e29 100644 --- a/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp +++ b/adaptors/ecore/wayland/imf-manager-impl-ecore-wl.cpp @@ -199,6 +199,31 @@ void InputPanelGeometryChangedCallback ( void *data, Ecore_IMF_Context *context, imfManager->ResizedSignal().Emit(); } +void InputPanelKeyboardTypeChangedCallback( void *data, Ecore_IMF_Context *context, int value ) +{ + if( !data ) + { + return; + } + + ImfManager* imfManager = reinterpret_cast< ImfManager* > ( data ); + switch (value) + { + case ECORE_IMF_INPUT_PANEL_SW_KEYBOARD_MODE: + { + // Emit Signal that the keyboard type is changed to Software Keyboard + imfManager->KeyboardTypeChangedSignal().Emit( Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD ); + break; + } + case ECORE_IMF_INPUT_PANEL_HW_KEYBOARD_MODE: + { + // Emit Signal that the keyboard type is changed to Hardware Keyboard + imfManager->KeyboardTypeChangedSignal().Emit( Dali::ImfManager::KeyboardType::HARDWARE_KEYBOARD ); + break; + } + } +} + /** * Called when an IMF delete surrounding event is received. * Here we tell the application that it should delete a certain range. @@ -365,6 +390,7 @@ void ImfManager::ConnectCallbacks() 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 ); ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, InputPanelGeometryChangedCallback, this ); + ecore_imf_context_input_panel_event_callback_add( mIMFContext, ECORE_IMF_INPUT_PANEL_KEYBOARD_MODE_EVENT, InputPanelKeyboardTypeChangedCallback, this ); ecore_imf_context_retrieve_surrounding_callback_set( mIMFContext, ImfRetrieveSurrounding, this); } @@ -384,6 +410,7 @@ void ImfManager::DisconnectCallbacks() 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 ); ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, InputPanelGeometryChangedCallback ); + ecore_imf_context_input_panel_event_callback_del( mIMFContext, ECORE_IMF_INPUT_PANEL_KEYBOARD_MODE_EVENT, InputPanelKeyboardTypeChangedCallback ); // We do not need to unset the retrieve surrounding callback. } @@ -562,16 +589,21 @@ Eina_Bool ImfManager::RetrieveSurrounding( void* data, Ecore_IMF_Context* imfCon Dali::ImfManager::ImfEventData imfData( Dali::ImfManager::GETSURROUNDING, std::string(), 0, 0 ); Dali::ImfManager handle( this ); - mEventSignal.Emit( handle, imfData ); + Dali::ImfManager::ImfCallbackData callbackData = mEventSignal.Emit( handle, imfData ); - if( text ) + if( callbackData.update ) { - *text = strdup( mSurroundingText.c_str() ); - } + if( text ) + { + // The memory allocated by strdup() can be freed by ecore_imf_context_surrounding_get() internally. + *text = strdup( callbackData.currentText.c_str() ); + } - if( cursorPosition ) - { - *cursorPosition = mIMFCursorPosition; + if( cursorPosition ) + { + mIMFCursorPosition = static_cast( callbackData.cursorPosition ); + *cursorPosition = mIMFCursorPosition; + } } return EINA_TRUE; @@ -672,7 +704,7 @@ Dali::ImfManager::TextDirection ImfManager::GetTextDirection() if ( locale ) { - direction = Locale::GetTextDirection( std::string( locale ) ); + direction = static_cast< Dali::ImfManager::TextDirection >( Locale::GetDirection( std::string( locale ) ) ); free( locale ); } } @@ -729,25 +761,28 @@ void ImfManager::ApplyOptions( const InputMethodOptions& options ) } } -void ImfManager::SetInputPanelUserData( const std::string& data ) +void ImfManager::SetInputPanelData( const std::string& data ) { - DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelUserData\n" ); + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelData\n" ); if( mIMFContext ) { int length = data.length(); - ecore_imf_context_input_panel_imdata_set( mIMFContext, &data, length ); + ecore_imf_context_input_panel_imdata_set( mIMFContext, data.c_str(), length ); } } -void ImfManager::GetInputPanelUserData( std::string& data ) +void ImfManager::GetInputPanelData( std::string& data ) { - DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelUserData\n" ); + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelData\n" ); if( mIMFContext ) { - int* length = NULL; - ecore_imf_context_input_panel_imdata_get( mIMFContext, &data, length ); + int length = 4096; // The max length is 4096 bytes + Dali::Vector< char > buffer; + buffer.Resize( length ); + ecore_imf_context_input_panel_imdata_get( mIMFContext, &buffer[0], &length ); + data = std::string( buffer.Begin(), buffer.End() ); } } @@ -829,6 +864,57 @@ void ImfManager::HideInputPanel() } } +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetKeyboardType\n" ); + +#ifdef OVER_TIZEN_VERSION_4 + if( mIMFContext ) + { + int value; + value = ecore_imf_context_keyboard_mode_get( mIMFContext ); + + switch (value) + { + case ECORE_IMF_INPUT_PANEL_SW_KEYBOARD_MODE: + { + return Dali::ImfManager::SOFTWARE_KEYBOARD; + break; + } + case ECORE_IMF_INPUT_PANEL_HW_KEYBOARD_MODE: + { + return Dali::ImfManager::HARDWARE_KEYBOARD; + break; + } + } + } +#endif // OVER_TIZEN_VERSION_4 + return Dali::ImfManager::KeyboardType::SOFTWARE_KEYBOARD; +} + +std::string ImfManager::GetInputPanelLocale() +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelLocale\n" ); + + std::string locale = ""; + + if( mIMFContext ) + { + char* value = NULL; + ecore_imf_context_input_panel_language_locale_get( mIMFContext, &value ); + + if( value ) + { + std::string valueCopy( value ); + locale = valueCopy; + + // The locale string retrieved must be freed with free(). + free( value ); + } + } + return locale; +} + } // Adaptor } // Internal