X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fx11%2Fimf-manager-impl-x.cpp;h=6d9d2a20f42c9ded9c838da93148868c2bf2c1a6;hb=aaea4066ec9308cd49174141ba4fd0a94f1b7b60;hp=57ffb35ba6406b9e06f12b54c4d85c5cc43e57bc;hpb=a49a86ccf4162152857f4a4f0266f7e0c96e7938;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git diff --git a/adaptors/x11/imf-manager-impl-x.cpp b/adaptors/x11/imf-manager-impl-x.cpp index 57ffb35..6d9d2a2 100644 --- a/adaptors/x11/imf-manager-impl-x.cpp +++ b/adaptors/x11/imf-manager-impl-x.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,8 +27,12 @@ #include #include #include +#include #include #include +// Ecore is littered with C style cast +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wold-style-cast" #include "ecore-virtual-keyboard.h" namespace Dali @@ -215,12 +219,12 @@ void ImfManager::CreateContext( Ecore_X_Window ecoreXwin ) } else { - DALI_LOG_WARNING("IMF Unable to get IMF Context\n"); + DALI_LOG_INFO( gLogFilter, Debug::General, "IMF Unable to get IMF Context\n"); } } else { - DALI_LOG_WARNING("IMF Unable to get IMF Context\n"); + DALI_LOG_INFO( gLogFilter, Debug::General, "IMF Unable to get IMF Context\n"); } } @@ -230,6 +234,7 @@ void ImfManager::DeleteContext() if ( mIMFContext ) { + ecore_imf_context_del( mIMFContext ); mIMFContext = NULL; } } @@ -516,8 +521,210 @@ const std::string& ImfManager::GetSurroundingText() const return mSurroundingText; } +void ImfManager::NotifyTextInputMultiLine( bool multiLine ) +{ +} + +Dali::ImfManager::TextDirection ImfManager::GetTextDirection() +{ + Dali::ImfManager::TextDirection direction ( Dali::ImfManager::LeftToRight ); + + if ( ImfManager::IsAvailable() /* We do not want to create an instance of ImfManager */ ) + { + if ( mIMFContext ) + { + char* locale( NULL ); + ecore_imf_context_input_panel_language_locale_get( mIMFContext, &locale ); + + if ( locale ) + { + direction = static_cast< Dali::ImfManager::TextDirection >( Locale::GetDirection( std::string( locale ) ) ); + free( locale ); + } + } + } + return direction; +} + +Rect ImfManager::GetInputMethodArea() +{ + int xPos, yPos, width, height; + + width = height = xPos = yPos = 0; + + if( mIMFContext ) + { + ecore_imf_context_input_panel_geometry_get( mIMFContext, &xPos, &yPos, &width, &height ); + } + else + { + DALI_LOG_WARNING("VKB Unable to get IMF Context so GetSize unavailable\n"); + } + + return Rect(xPos,yPos,width,height); +} + +void ImfManager::ApplyOptions( const InputMethodOptions& options ) +{ + using namespace Dali::InputMethod::Category; + + int index; + + if (mIMFContext == NULL) + { + DALI_LOG_WARNING("VKB Unable to excute ApplyOptions with Null ImfContext\n"); + return; + } + + if ( mOptions.CompareAndSet(PANEL_LAYOUT, options, index) ) + { + } + if ( mOptions.CompareAndSet(AUTO_CAPITALISE, options, index) ) + { + } + if ( mOptions.CompareAndSet(ACTION_BUTTON_TITLE, options, index) ) + { + } + if ( mOptions.CompareAndSet(VARIATION, options, index) ) + { + } +} + +void ImfManager::SetInputPanelData( const std::string& data ) +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelData\n" ); + + if( mIMFContext ) + { + int length = data.length(); + ecore_imf_context_input_panel_imdata_set( mIMFContext, data.c_str(), length ); + } +} + +void ImfManager::GetInputPanelData( std::string& data ) +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelData\n" ); + + if( mIMFContext ) + { + 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() ); + } +} + +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_input_panel_hide( mIMFContext ); + } +} + +Dali::ImfManager::KeyboardType ImfManager::GetKeyboardType() +{ + 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 } // Dali + +#pragma GCC diagnostic pop