projects
/
platform
/
core
/
uifw
/
dali-adaptor.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[4.0] Add Finalize api for imf-manager
[platform/core/uifw/dali-adaptor.git]
/
adaptors
/
x11
/
imf-manager-impl-x.cpp
diff --git
a/adaptors/x11/imf-manager-impl-x.cpp
b/adaptors/x11/imf-manager-impl-x.cpp
old mode 100644
(file)
new mode 100755
(executable)
index
e0fa762
..
1d9294f
--- a/
adaptors/x11/imf-manager-impl-x.cpp
+++ b/
adaptors/x11/imf-manager-impl-x.cpp
@@
-122,6
+122,19
@@
void ImfDeleteSurrounding( void *data, Ecore_IMF_Context *imfContext, void *even
} // unnamed namespace
} // unnamed namespace
+void ImfManager::Finalize()
+{
+ DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::Finalize\n" );
+ if ( mInited )
+ {
+ VirtualKeyboard::DisconnectCallbacks( mIMFContext );
+ DisconnectCallbacks();
+ DeleteContext();
+ ecore_imf_shutdown();
+ mInited = false;
+ }
+}
+
bool ImfManager::IsAvailable()
{
bool available( false );
bool ImfManager::IsAvailable()
{
bool available( false );
@@
-138,6
+151,7
@@
bool ImfManager::IsAvailable()
Dali::ImfManager ImfManager::Get()
{
Dali::ImfManager manager;
Dali::ImfManager ImfManager::Get()
{
Dali::ImfManager manager;
+ ImfManager *imfManager = NULL;
Dali::SingletonService service( SingletonService::Get() );
if ( service )
Dali::SingletonService service( SingletonService::Get() );
if ( service )
@@
-147,7
+161,8
@@
Dali::ImfManager ImfManager::Get()
if( handle )
{
// If so, downcast the handle
if( handle )
{
// If so, downcast the handle
- manager = Dali::ImfManager( dynamic_cast< ImfManager* >( handle.GetObjectPtr() ) );
+ imfManager = dynamic_cast< ImfManager* >( handle.GetObjectPtr() );
+ manager = Dali::ImfManager( imfManager );
}
else if ( Adaptor::IsAvailable() )
{
}
else if ( Adaptor::IsAvailable() )
{
@@
-158,14
+173,14
@@
Dali::ImfManager ImfManager::Get()
// The Ecore_X_Window needs to use the ImfManager.
// Only when the render surface is window, we can get the Ecore_X_Window.
// The Ecore_X_Window needs to use the ImfManager.
// Only when the render surface is window, we can get the Ecore_X_Window.
- Ecore_X_Window
ecoreXwin( AnyCast<Ecore_X_Window>(nativeWindow
) );
- if (
ecoreXwin
)
+ Ecore_X_Window
*ecoreXwin( AnyCast< Ecore_X_Window* >( nativeWindow
) );
+ if (
ecoreXwin
)
{
// If we fail to get Ecore_X_Window, we can't use the ImfManager correctly.
// Thus you have to call "ecore_imf_context_client_window_set" somewhere.
// In EvasPlugIn, this function is called in EvasPlugin::ConnectEcoreEvent().
{
// If we fail to get Ecore_X_Window, we can't use the ImfManager correctly.
// Thus you have to call "ecore_imf_context_client_window_set" somewhere.
// In EvasPlugIn, this function is called in EvasPlugin::ConnectEcoreEvent().
-
- manager = Dali::ImfManager(
new ImfManager( ecoreXwin )
);
+ imfManager = new ImfManager( ecoreXwin );
+ manager = Dali::ImfManager(
imfManager
);
service.Register( typeid( manager ), manager );
}
else
service.Register( typeid( manager ), manager );
}
else
@@
-175,33
+190,36
@@
Dali::ImfManager ImfManager::Get()
}
}
}
}
+ if ( ( imfManager != NULL ) !imfManager->mInited )
+ {
+ ecore_imf_init();
+ imfManager->CreateContext( imfManager->mEcoreXWin );
+
+ imfManager->ConnectCallbacks();
+ VirtualKeyboard::ConnectCallbacks( mIMFContext );
+ imfManager->mInited = true;
+ }
+
return manager;
}
return manager;
}
-ImfManager::ImfManager( Ecore_X_Window ecoreXwin )
+ImfManager::ImfManager( Ecore_X_Window
*
ecoreXwin )
: mIMFContext(),
: mIMFContext(),
+ mEcoreXWin( ecoreXwin ),
mIMFCursorPosition( 0 ),
mSurroundingText(),
mIMFCursorPosition( 0 ),
mSurroundingText(),
+ mInited( false ),
mRestoreAfterFocusLost( false ),
mIdleCallbackConnected( false )
{
mRestoreAfterFocusLost( false ),
mIdleCallbackConnected( false )
{
- ecore_imf_init();
- CreateContext( ecoreXwin );
-
- ConnectCallbacks();
- VirtualKeyboard::ConnectCallbacks( mIMFContext );
}
ImfManager::~ImfManager()
{
}
ImfManager::~ImfManager()
{
- VirtualKeyboard::DisconnectCallbacks( mIMFContext );
- DisconnectCallbacks();
-
- DeleteContext();
- ecore_imf_shutdown();
+ Finalize();
}
}
-void ImfManager::CreateContext( Ecore_X_Window ecoreXwin )
+void ImfManager::CreateContext( Ecore_X_Window
*
ecoreXwin )
{
DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::CreateContext\n" );
{
DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::CreateContext\n" );
@@
-538,7
+556,7
@@
Dali::ImfManager::TextDirection ImfManager::GetTextDirection()
if ( locale )
{
if ( locale )
{
- direction =
Locale::GetTextDirection( std::string( locale
) );
+ direction =
static_cast< Dali::ImfManager::TextDirection >( Locale::GetDirection( std::string( locale )
) );
free( locale );
}
}
free( locale );
}
}
@@
-590,25
+608,28
@@
void ImfManager::ApplyOptions( const InputMethodOptions& options )
}
}
}
}
-void ImfManager::SetInputPanel
User
Data( const std::string& data )
+void ImfManager::SetInputPanelData( const std::string& data )
{
{
- DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanel
User
Data\n" );
+ DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::SetInputPanelData\n" );
if( mIMFContext )
{
int length = data.length();
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::GetInputPanel
User
Data( std::string& data )
+void ImfManager::GetInputPanelData( std::string& data )
{
{
- DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanel
User
Data\n" );
+ DALI_LOG_INFO( gLogFilter, Debug::General, "ImfManager::GetInputPanelData\n" );
if( mIMFContext )
{
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() );
}
}
}
}