X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=adaptors%2Fx11%2Fimf-manager-impl-x.cpp;h=cdbaffe6e5a8bd493d06229a2933ec4b0d038bf5;hb=7d6269e66bd6a927428c8eff7e072fdbcd022dff;hp=3e681b09e796b10f4747614b344449dd23d49e50;hpb=12acf51f394123980eec1e6fff504971745a741c;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 3e681b0..cdbaffe 100644 --- a/adaptors/x11/imf-manager-impl-x.cpp +++ b/adaptors/x11/imf-manager-impl-x.cpp @@ -119,38 +119,26 @@ void ImfDeleteSurrounding( void *data, Ecore_IMF_Context *imfContext, void *even BaseHandle Create() { - BaseHandle handle( ImfManager::Get() ); + return ImfManager::Get(); +} - Dali::SingletonService service( SingletonService::Get() ); - if ( !handle && Adaptor::IsAvailable() && service ) - { - Adaptor& adaptorImpl( Adaptor::GetImplementation( Adaptor::Get() ) ); +TypeRegistration IMF_MANAGER_TYPE( typeid(Dali::ImfManager), typeid(Dali::BaseHandle), Create ); - // 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( 0 ); - Dali::RenderSurface& surface( adaptorImpl.GetSurface() ); - if( surface.GetType() == Dali::RenderSurface::WINDOW ) - { - ecoreXwin = AnyCast< Ecore_X_Window >( adaptorImpl.GetSurface().GetSurface() ); - } +} // unnamed namespace - // 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(). +bool ImfManager::IsAvailable() +{ + bool available( false ); - Dali::ImfManager manager = Dali::ImfManager( new ImfManager( ecoreXwin ) ); - service.Register( typeid( manager ), manager ); - handle = manager; + Dali::SingletonService service( SingletonService::Get() ); + if ( service ) + { + available = service.GetSingleton( typeid( Dali::ImfManager ) ); } - return handle; + return available; } -TypeRegistration IMF_MANAGER_TYPE( typeid(Dali::ImfManager), typeid(Dali::BaseHandle), Create, true /* Create Instance At Startup */ ); - -} // unnamed namespace - Dali::ImfManager ImfManager::Get() { Dali::ImfManager manager; @@ -160,11 +148,33 @@ Dali::ImfManager ImfManager::Get() { // Check whether the singleton is already created Dali::BaseHandle handle = service.GetSingleton( typeid( Dali::ImfManager ) ); - if(handle) + if( handle ) { // If so, downcast the handle manager = Dali::ImfManager( dynamic_cast< ImfManager* >( handle.GetObjectPtr() ) ); } + else if ( Adaptor::IsAvailable() ) + { + // Create instance and register singleton only if the adaptor is available + + Adaptor& adaptorImpl( Adaptor::GetImplementation( Adaptor::Get() ) ); + + // 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( 0 ); + Dali::RenderSurface& surface( adaptorImpl.GetSurface() ); + if( surface.GetType() == Dali::RenderSurface::WINDOW ) + { + ecoreXwin = AnyCast< Ecore_X_Window >( adaptorImpl.GetSurface().GetSurface() ); + } + + // 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 ) ); + service.Register( typeid( manager ), manager ); + } } return manager; @@ -313,7 +323,7 @@ bool ImfManager::RestoreAfterFocusLost() const return mRestoreAfterFocusLost; } -void ImfManager::SetRestoreAferFocusLost( bool toggle ) +void ImfManager::SetRestoreAfterFocusLost( bool toggle ) { mRestoreAfterFocusLost = toggle; }