Fix Ime Rotation
[platform/framework/native/uifw.git] / src / ui / controls / FUiCtrl_FormImpl.cpp
index 4562b58..30b77d3 100644 (file)
@@ -33,6 +33,7 @@
 #include "FUi_EcoreEvas.h"
 #include "FUi_ControlImplManager.h"
 #include "FUi_OrientationAgent.h"
+#include "FUi_ImeOrientationAgent.h"
 #include "FUi_UiBuilder.h"
 #include "FUi_CoordinateSystemUtils.h"
 #include "FUi_DataBindingContextImpl.h"
@@ -100,20 +101,39 @@ _FormImpl::_FormImpl(Form* pPublic, _Form* pCore, Layout* pPublicPortraitLayout,
        , __pForm(null)
        , __pFormBackEventListener(null)
        , __pOriAgent(null)
+       , __pImeOriAgent(null)
        , __pLeftSoftkeyActionEvent(null)
        , __pRightSoftkeyActionEvent(null)
        , __pOptionMenuActionEvent(null)
 {
        __pForm = pCore;
 
-       __pOriAgent = _OrientationAgent::CreateInstanceN(*pPublic);
-       SysTryReturnVoidResult(NID_UI_CTRL, __pOriAgent != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       int appType = _AppInfo::GetAppType();
+       if (appType & _APP_TYPE_IME_APP)
+       {
+               __pImeOriAgent = _ImeOrientationAgent::CreateInstanceN(*pPublic);
+               SysTryReturnVoidResult(NID_UI_CTRL, __pImeOriAgent != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
+       else
+       {
+               __pOriAgent = _OrientationAgent::CreateInstanceN(*pPublic);
+               SysTryReturnVoidResult(NID_UI_CTRL, __pOriAgent != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
+       }
 }
 
 _FormImpl::~_FormImpl(void)
 {
-       delete __pOriAgent;
-       __pOriAgent = null;
+       if (__pImeOriAgent)
+       {
+               delete __pImeOriAgent;
+               __pImeOriAgent = null;
+       }
+
+       if (__pOriAgent)
+       {
+               delete __pOriAgent;
+               __pOriAgent = null;
+       }
 
        if (__pLeftSoftkeyActionEvent)
        {
@@ -382,13 +402,6 @@ _FormImpl::SetFormStyle(unsigned long formStyle)
                }
        }
 
-       _Indicator* pIndicator = GetCore().GetIndicator();
-       if (pIndicator && !pIndicator->IsAttachedToMainTree())
-       {
-               r = GetCore().AttachSystemChild(*pIndicator);
-               SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
-       }
-
        if (formStyle & FORM_STYLE_TEXT_TAB)
        {
                float titleHeight = 0.0f;
@@ -692,7 +705,10 @@ _FormImpl::GetOverlayRegionN(const FloatRectangle& rect, OverlayRegionType regio
 void
 _FormImpl::OnDraw(void)
 {
-       __pOriAgent->FireOrientationEvent();
+       if (__pOriAgent)
+       {
+               __pOriAgent->FireOrientationEvent();
+       }
 
        _ContainerImpl::OnDraw();
 }
@@ -829,7 +845,14 @@ _FormImpl::SetFormBackEventListener(const IFormBackEventListener* pFormBackEvent
 void
 _FormImpl::AddOrientationEventListener(IOrientationEventListener& listener)
 {
-       __pOriAgent->AddListener(listener);
+       if (__pOriAgent)
+       {
+               __pOriAgent->AddListener(listener);
+       }
+       else if (__pImeOriAgent)
+       {
+               __pImeOriAgent->AddListener(listener);
+       }
 }
 
 void
@@ -882,7 +905,14 @@ _FormImpl::AddSoftkeyActionListener(Softkey softkey, const IActionEventListener&
 void
 _FormImpl::RemoveOrientationEventListener(IOrientationEventListener& listener)
 {
-       __pOriAgent->RemoveListener(listener);
+       if (__pOriAgent)
+       {
+               __pOriAgent->RemoveListener(listener);
+       }
+       else if (__pImeOriAgent)
+       {
+               __pImeOriAgent->RemoveListener(listener);
+       }
 }
 
 void
@@ -928,35 +958,65 @@ _FormImpl::RemoveSoftkeyActionListener(Softkey softkey, const IActionEventListen
 void
 _FormImpl::SetOrientation(Orientation orientation)
 {
-       __pOriAgent->SetMode(orientation);
+       if (__pOriAgent)
+       {
+               __pOriAgent->SetMode(orientation);
+       }
 }
 
 Orientation
 _FormImpl::GetOrientation(void) const
 {
-       return __pOriAgent->GetMode();
+       if (__pOriAgent)
+       {
+               return __pOriAgent->GetMode();
+       }
+
+       return ORIENTATION_NONE;
 }
 
 OrientationStatus
 _FormImpl::GetOrientationStatus(void) const
 {
-       return __pOriAgent->GetStatus();
+       if (__pOriAgent)
+       {
+               return __pOriAgent->GetStatus();
+       }
+
+       return ORIENTATION_STATUS_NONE;
 }
 
 void
 _FormImpl::UpdateOrientationStatus(bool draw)
 {
-       __pOriAgent->Update(draw);
+       if (__pOriAgent)
+       {
+               __pOriAgent->Update(draw);
+       }
 }
 
 #if defined(WINDOW_BASE_ROTATE)
 void
 _FormImpl::UpdateOrientation(void)
 {
-       __pOriAgent->UpdateOrientation();
+       if (__pOriAgent)
+       {
+               __pOriAgent->UpdateOrientation();
+       }
 }
 #endif
 
+void
+_FormImpl::UpdateOrientation(int angle)
+{
+       SysLog(NID_UI_CTRL, "[Ime Rotation]");
+
+       if (__pImeOriAgent)
+       {
+               __pImeOriAgent->UpdateOrientation(angle);
+       }
+}
+
 bool
 _FormImpl::HasOptionkey(void) const
 {
@@ -1441,7 +1501,10 @@ _FormImpl::OnAttachedToMainTree(void)
 
        UpdateOrientationStatus();
 
-       __pOriAgent->RequestOrientationEvent();
+       if (__pOriAgent)
+       {
+               __pOriAgent->RequestOrientationEvent();
+       }
 
        return r;
 }
@@ -1464,7 +1527,10 @@ _FormImpl::OnNotifiedN(const _ControlImpl& source, IList* pArgs)
        {
                if (*pString == _REQUEST_ORIENTATION_EVENT)
                {
-                       __pOriAgent->FireOrientationEvent();
+                       if (__pOriAgent)
+                       {
+                               __pOriAgent->FireOrientationEvent();
+                       }
 
                        pArgs->RemoveAll(true);
                        delete pArgs;
@@ -1616,7 +1682,14 @@ protected:
                }
                if (styleString.Contains(L"FORM_STYLE_INDICATOR"))
                {
-                       style |= FORM_STYLE_INDICATOR;
+                       if (styleString.Contains(L"FORM_STYLE_INDICATOR_AUTO_HIDE"))
+                       {
+                               style |= FORM_STYLE_INDICATOR_AUTO_HIDE;
+                       }
+                       else
+                       {
+                               style |= FORM_STYLE_INDICATOR;
+                       }
                }
                if (styleString.Contains(L"FORM_STYLE_TEXT_TAB"))
                {