modify changing target to check parent when touch pressed
authorminkyu kim <imetjade.kim@samsung.com>
Sat, 6 Apr 2013 09:16:21 +0000 (18:16 +0900)
committerminkyu kim <imetjade.kim@samsung.com>
Sat, 6 Apr 2013 09:16:21 +0000 (18:16 +0900)
Change-Id: I57943a14bc8b090d8aa38d8f30a2512ea07a4765

src/ui/FUi_EflUiEventManager.cpp

index 9429934..dcbe33d 100644 (file)
@@ -429,17 +429,60 @@ public:
                return pControlManager->GetObject(controlHandle);
        }
 
+       result AddParentControl(int pointId, const _ControlHandle& controlHandle)
+       {
+               bool exist = false;
+               result r = E_SUCCESS;
+
+               __pParentTargetMap->ContainsKey(pointId, exist);
+
+               if (exist)
+               {
+                       r = __pParentTargetMap->Remove(pointId);
+                       SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+               }
+
+               r = __pParentTargetMap->Add(pointId, controlHandle);
+               SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+               return r;
+       }
+
+       _Control* GetParentControl(int pointId)
+       {
+               SysTryReturn(NID_UI, __pParentTargetMap, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+               _ControlHandle controlHandle;
+
+               __pParentTargetMap->GetValue(pointId, controlHandle);
+
+               _ControlManager* pControlManager = _ControlManager::GetInstance();
+               result r = GetLastResult();
+               SysTryReturn(NID_UI, pControlManager, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               return pControlManager->GetObject(controlHandle);
+       }
+
 private:
        _TouchEventManager(void)
        {
+               result r = E_SUCCESS;
                unique_ptr<HashMapT<int, _ControlHandle> > pTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
                SysTryReturnVoidResult(NID_UI, pTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
 
-               result r = pTargetMap->Construct();
+               r = pTargetMap->Construct();
                SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
 
                __pTargetMap = move(pTargetMap);
 
+               unique_ptr<HashMapT<int, _ControlHandle> > pParentTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
+               SysTryReturnVoidResult(NID_UI, pParentTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
+
+               r = pParentTargetMap->Construct();
+               SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+
+               __pParentTargetMap = move(pParentTargetMap);
+
                SetLastResult(E_SUCCESS);
        }
 
@@ -453,6 +496,7 @@ private:
 private:
        static _TouchEventManager* __pInstance;
        unique_ptr<HashMapT<int, _ControlHandle> > __pTargetMap;
+       unique_ptr<HashMapT<int, _ControlHandle> > __pParentTargetMap;
 };
 
 _TouchEventManager* _TouchEventManager::__pInstance = null;
@@ -540,6 +584,13 @@ public:
                        {
                                r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
                                SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+                               _Control* pParent = pControl->GetParent();
+                               if (pParent)
+                               {
+                                       r = __pTouchEventManager->AddParentControl(pointId, pParent->GetHandle());
+                                       SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+                               }
                        }
                }
                else
@@ -553,8 +604,8 @@ public:
                        {
                                if (pControl->GetChangingEventTarget() == true && pControl->GetVisibleState() == true)
                                {
-                                       _Control* pTouchedControl = __pTouchEventManager->GetControl(pointId);
-                                       if (pTouchedControl && pTouchedControl->GetParent() == pControl->GetParent())
+                                       _Control* pTouchedParentControl = __pTouchEventManager->GetParentControl(__touchInfo.GetPointId());
+                                       if (pTouchedParentControl && pTouchedParentControl == pControl->GetParent())
                                        {
                                                r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
                                                SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");