ImfManager - Typo fix
[platform/core/uifw/dali-adaptor.git] / adaptors / x11 / imf-manager-impl-x.cpp
index 01d8365..cdbaffe 100644 (file)
@@ -28,6 +28,7 @@
 // INTERNAL INCLUDES
 #include <window-render-surface.h>
 #include <adaptor-impl.h>
+#include <singleton-service-impl.h>
 #include <virtual-keyboard-impl.h>
 
 namespace Dali
@@ -118,50 +119,62 @@ void ImfDeleteSurrounding( void *data, Ecore_IMF_Context *imfContext, void *even
 
 BaseHandle Create()
 {
-  BaseHandle handle( ImfManager::Get() );
+  return ImfManager::Get();
+}
 
-  if ( !handle && Adaptor::IsAvailable() )
-  {
-    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 ) );
-    adaptorImpl.RegisterSingleton( 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;
 
-  if ( Adaptor::IsAvailable() )
+  Dali::SingletonService service( SingletonService::Get() );
+  if ( service )
   {
     // Check whether the singleton is already created
-    Dali::BaseHandle handle = Dali::Adaptor::Get().GetSingleton( typeid( Dali::ImfManager ) );
-    if(handle)
+    Dali::BaseHandle handle = service.GetSingleton( typeid( Dali::ImfManager ) );
+    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;
@@ -310,7 +323,7 @@ bool ImfManager::RestoreAfterFocusLost() const
   return mRestoreAfterFocusLost;
 }
 
-void ImfManager::SetRestoreAferFocusLost( bool toggle )
+void ImfManager::SetRestoreAfterFocusLost( bool toggle )
 {
   mRestoreAfterFocusLost = toggle;
 }
@@ -340,7 +353,11 @@ void ImfManager::PreEditChanged( void *, Ecore_IMF_Context *imfContext, void *ev
     // iterate through the list of attributes getting the type, start and end position.
     for ( l = attrs, (attr =  (Ecore_IMF_Preedit_Attr*)eina_list_data_get(l) ); l; l = eina_list_next(l), ( attr = (Ecore_IMF_Preedit_Attr*)eina_list_data_get(l) ))
     {
+#ifdef DALI_PROFILE_UBUNTU
+      if ( attr->preedit_type == ECORE_IMF_PREEDIT_TYPE_SUB3 ) // (Ecore_IMF)
+#else // DALI_PROFILE_UBUNTU
       if ( attr->preedit_type == ECORE_IMF_PREEDIT_TYPE_SUB4 ) // (Ecore_IMF)
+#endif // DALI_PROFILE_UBUNTU
       {
         // check first byte so know how many bytes a character is represented by as keyboard returns cursor position in bytes. Which is different for some languages.