2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUi_ControlManager.cpp
20 * @brief This is the implementation file for the _ControlManager class.
26 #include <sensor_accel.h>
27 #include <runtime_info.h>
29 #include <Elementary.h>
30 #include <FBaseInt8.h>
31 #include <FBaseSysLog.h>
32 #include <FGrpRectangle.h>
33 #include <FApp_AppInfo.h>
34 #include <FAppPkg_PackageInfoImpl.h>
35 #include <FGrp_Screen.h>
36 #include <FGrp_FontImpl.h>
37 #include <FSys_SettingInfoImpl.h>
38 #include <FSys_SystemInfoImpl.h>
39 #include "FUi_ControlManager.h"
40 #include "FUi_Control.h"
41 #include "FUi_Window.h"
42 #include "FUi_WindowImpl.h"
43 #include "FUi_EcoreEvas.h"
44 #include "FUi_EcoreEvasMgr.h"
45 #include "FUi_EflWindow.h"
46 #include "FUi_ResourceManager.h"
47 #include "FUi_Clipboard.h"
48 #include "FUi_UiFocusEvent.h"
49 #include "FUi_UiEventManager.h"
50 #include "FUi_TouchManager.h"
51 #include "FUi_DimmingManager.h"
52 #include "FUi_IControlManagerEventListener.h"
53 #include "FUi_TouchLongPressGestureDetector.h"
54 #include "FUi_TouchTapGestureDetector.h"
55 #include "FUi_KeyEventManager.h"
56 #include "FUi_CoordinateSystemUtils.h"
57 #include "FUiAnim_RootVisualElement.h"
58 #include "FUiAnim_AnimationManager.h"
59 #include "FUiAnim_DisplayManager.h"
60 #include "FUi_AccessibilityManager.h"
61 #include "FUiAnim_VisualElement.h"
62 #include "FUiAnim_EflLayer.h"
63 #include "FUiCtrl_FrameImpl.h"
64 #include "FUiCtrl_FormImpl.h"
65 #include "FUiCtrl_Frame.h"
66 #include "FUiCtrl_IndicatorManager.h"
69 using namespace Tizen::App;
70 using namespace Tizen::App::Package;
71 using namespace Tizen::Base;
72 using namespace Tizen::Base::Collection;
73 using namespace Tizen::Graphics;
74 using namespace Tizen::Ui;
75 using namespace Tizen::Ui::Animations;
76 using namespace Tizen::Ui::Controls;
77 using namespace Tizen::System;
81 _ControlRotation Convert(int rotationDegree)
83 switch (rotationDegree)
86 return _CONTROL_ROTATION_0;
88 return _CONTROL_ROTATION_90;
90 return _CONTROL_ROTATION_180;
92 return _CONTROL_ROTATION_270;
94 return _CONTROL_ROTATION_0;
98 int Convert(_ControlRotation rotation)
102 case _CONTROL_ROTATION_0:
104 case _CONTROL_ROTATION_90:
106 case _CONTROL_ROTATION_180:
108 case _CONTROL_ROTATION_270:
118 _UiPrintControl(const _Control& control, bool printChildren, int level)
120 const_cast<_Control&>(control).PrintDescription(printChildren, level);
124 _UiPrintTree(int level)
126 _ControlManager* pControlManager = _ControlManager::GetInstance();
127 SysTryReturnVoidResult(NID_UI, pControlManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
129 if (pControlManager->GetWindowCount() == 0)
134 int count = pControlManager->GetWindowCount();
135 for (int i = 0; i < count; i++)
137 _Window* pWindow = pControlManager->GetWindow((count-1) - i);
138 _UiPrintControl(*pWindow, true, level);
143 _UiPrintControlList(int level)
145 _ControlManager* pControlManager = _ControlManager::GetInstance();
146 SysTryReturnVoidResult(NID_UI, pControlManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
148 int count = pControlManager->GetControlCount();
149 for (int i = 0; i< count; i++)
151 _Control* pControl = pControlManager->GetControl((count-1) - i);
152 if (pControl != null)
154 SysSecureLog(NID_UI, "[Control Manager] pControl index %d", i);
155 _UiPrintControl(*pControl, true, level);
159 SysSecureLog(NID_UI, "[Control Manager] pControl is null");
165 namespace Tizen { namespace Ui
167 _ControlManager* _ControlManager::__pInstance = null;
170 _ControlManager::Initialize(void)
172 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
176 pthread_once(&once_block, InitInstance);
179 result r = _SettingInfoImpl::AddSettingEventListenerForInternal(*__pInstance);
180 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
182 // [ToDo] Is it OK to directly get the device orientation?
183 int degree = app_get_device_orientation();
184 SysLog(NID_UI, "The initial value of device orientation is %d.", degree);
186 __pInstance->__screenRotation = ::Convert(degree);
190 _ControlManager::Release(void)
192 result r = _SettingInfoImpl::RemoveSettingEventListenerForInternal(*__pInstance);
193 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
195 __pInstance->CallControlManagerEventListener();
202 _ControlManager::GetInstance(void)
208 _ControlManager::InitInstance(void)
215 __pInstance = new (std::nothrow) _ControlManager;
216 SysAssert(__pInstance);
220 _ControlManager::Register(_Control* pObject)
224 SysLog(NID_UI, "A _Control Registered()");
229 return _ControlHandle();
232 if (__pAllControlList)
234 __pAllControlList->Add(pObject);
237 return __objectManager.Register(*pObject);
241 _ControlManager::Release(const _ControlHandle& handle)
243 _Control* pObject = GetObject(handle);
246 SysLog(NID_UI, "A _Control Released()");
249 if (__pAllControlList)
251 __pAllControlList->Remove(pObject);
254 return __objectManager.Unregister(handle);
258 _ControlManager::GetObject(const _ControlHandle& handle)
260 return __objectManager.GetObject(handle);
264 _ControlManager::GetObject(const _ControlHandle& handle) const
266 return __objectManager.GetObject(handle);
270 _ControlManager::GetUsedHandleCount(void) const
272 return __objectManager.GetObjectCount();
276 _ControlManager::GetAppCoordinateSystem(bool& isCoordinateSystemLogical, int& logicalCoordinateSystemInt, _BaseScreenSize& logicalBaseScreenSize)
278 _PackageInfoImpl infoImpl;
280 String subAppId(_AppInfo::GetPackageId());
282 result r = infoImpl.Construct(subAppId);
283 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
286 String baseScreenSize(null);
287 String coordinateSystem(null);
288 String logicalCoordinate(null);
290 result r = infoImpl.GetUiScalabilityInfo(baseScreenSize, coordinateSystem, logicalCoordinate);
291 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
293 if (coordinateSystem.Equals(L"Physical", false))
295 isCoordinateSystemLogical = false;
296 logicalCoordinateSystemInt = 0;
297 logicalBaseScreenSize = BASE_SCREEN_SIZE_DEFAULT;
303 r = Integer::Parse(logicalCoordinate, logicalCoordinateSystemInt);
304 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
307 if (baseScreenSize.Equals(L"Large", false))
309 logicalBaseScreenSize = BASE_SCREEN_SIZE_LARGE;
313 logicalBaseScreenSize = BASE_SCREEN_SIZE_NORMAL;
320 _ControlManager::IsCoordinateSystemLogical(void) const
322 return __isCoordinateSystemLogical;
326 _ControlManager::GetCoordinateSystem(void) const
328 return __logicalCoordinateSystem;
332 _ControlManager::GetLogicalBaseScreenSize(void) const
334 return __logicalBaseScreenSize;
337 _ControlManager::_ControlManager(void) // [ToDo] exception check.
338 : __pWindowList(null)
339 , __pAllWindowList(null)
340 , __pAllControlList(null)
341 , __isCoordinateSystemLogical(true)
342 , __logicalCoordinateSystem(0)
343 , __logicalBaseScreenSize(BASE_SCREEN_SIZE_NONE)
344 , __pSystemWindowList(null)
345 , __pFocusControl(null)
346 , __screenRotation(_CONTROL_ROTATION_0)
347 , __orientationStatus(_CONTROL_ROTATION_0)
348 , __orientation(_CONTROL_ORIENTATION_PORTRAIT)
349 , __pCurrentFrame(null)
350 , __pGestureList(null)
351 , __gestureMaxDuration(0)
353 , __isDefaultFontChanged(false)
354 , __isSystemFontChanged(false)
355 , __defaultFontName(L"")
357 , __pClipboardOwner(null)
358 , __pControlManagerEventListenerList(new (std::nothrow) LinkedListT<_IControlManagerEventListener*>)
360 result r = GetAppCoordinateSystem(__isCoordinateSystemLogical, __logicalCoordinateSystem, __logicalBaseScreenSize);
361 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] System error occurred.");
363 Dimension deviceResolution = CoordinateSystem::GetPhysicalResolution();
364 _BaseScreenSize deviceBaseScreenSize = _CoordinateSystem::GetInstance()->GetPhysicalBaseScreenSize();
366 r = _CoordinateSystem::Initialize(__logicalCoordinateSystem, __logicalBaseScreenSize, deviceResolution, deviceBaseScreenSize);
367 SysAssert(r == E_SUCCESS);
369 r = _AnimationManager::CreateInstance();
370 SysAssertf(r == E_SUCCESS, "Failed to create animation manager!");
372 r = _DisplayManager::CreateInstance();
373 SysAssertf(r == E_SUCCESS, "Failed to create display manager!");
375 _EcoreEvas::CreateInstanceN();
377 __pWindowList = new (std::nothrow)LinkedListT<_Window*>;
378 SysTryCatch(NID_UI, __pWindowList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
380 __pAllWindowList = new (std::nothrow)LinkedListT<_Window*>;
381 SysTryCatch(NID_UI, __pAllWindowList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
383 __pAllControlList = new (std::nothrow)LinkedListT<_Control*>;
384 SysTryCatch(NID_UI, __pAllControlList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
386 __pGestureList = new (std::nothrow)LinkedListT<_TouchGestureDetector*>;
387 SysTryCatch(NID_UI, __pGestureList, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
389 _UiEventManager::Initialize();
390 _TouchManager::Initialize();
391 _KeyEventManager::Initialize();
392 _IndicatorManager::InitializeInstance();
393 _AccessibilityManager::CreateInstance();
395 SetLastResult(E_SUCCESS);
400 _AnimationManager::ReleaseInstance();
404 delete __pWindowList;
405 __pWindowList = null;
408 if (__pAllWindowList)
410 delete __pAllWindowList;
411 __pAllWindowList = null;
414 if (__pAllControlList)
416 delete __pAllControlList;
417 __pAllControlList = null;
422 delete __pGestureList;
423 __pGestureList = null;
427 _ControlManager::~_ControlManager(void)
429 _Clipboard::ReleaseInstance();
431 if (GetUsedHandleCount() != 0)
433 SysLog(NID_UI, "[Control Manager] The number of unreleased handle: %d", GetUsedHandleCount());
436 if (GetControlCount() != 0)
438 SysLog(NID_UI, "[Control Manager] The number of unreleased control: %d", GetControlCount());
443 delete __pWindowList;
444 __pWindowList = null;
447 if (__pAllWindowList)
449 delete __pAllWindowList;
450 __pAllWindowList = null;
453 if (__pAllControlList)
455 delete __pAllControlList;
456 __pAllControlList = null;
461 delete __pGestureList;
462 __pGestureList = null;
465 DestroyEcoreEvasMgr();
467 _IndicatorManager::ReleaseInstance();
469 _DisplayManager::ReleaseInstance();
471 _AnimationManager::ReleaseInstance();
473 _AccessibilityManager::ReleaseInstance();
475 _KeyEventManager::ReleaseInstance();
476 _TouchManager::ReleaseInstance();
477 _DimmingManager::ReleaseInstance();
478 _UiEventManager::Release();
482 _ControlManager::GetTopWindow(void) const
486 if (GetWindowCount() == 0)
491 return GetWindow(GetWindowCount() - 1);
495 _ControlManager::GetTopVisibleWindow(void) const
499 if (GetWindowCount() == 0)
504 int count = GetWindowCount();
505 for (int i = 0; i < count; i++)
507 _Window* pWindow = GetWindow((count-1) - i);
509 if (pWindow->GetVisibleState() == true)
519 _ControlManager::GetTopVisibleWindowAt(const Point& point) const
523 if (GetWindowCount() == 0)
528 int count = GetWindowCount();
529 for (int i = 0; i < count; i++)
531 _Window* pWindow = GetWindow((count-1) - i);
533 if (pWindow->GetVisibleState() == false)
538 Rectangle winBounds = pWindow->GetBounds();
539 if (winBounds.Contains(point))
549 _ControlManager::IsWindowOnTop(const _Window& window) const
551 return GetTopWindow() == &window;
555 _ControlManager::IsWindowAttached(const _Window& window) const
557 return __pWindowList->Contains(const_cast<_Window*>(&window));
560 // Open a window and bring it to top.
562 _ControlManager::OpenWindow(_Window& window, bool invalidate)
564 if (dynamic_cast <_Frame*>(&window) != null)
566 __pCurrentFrame = &window;
569 result r = ActivateWindow(window, invalidate);
570 SysTryReturn(NID_UI, r != E_INVALID_OPERATION, r, r, "[%s] Propagating.", GetErrorMessage(r));
571 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System Error.");
577 _ControlManager::ActivateWindow(_Window& window, bool invalidate)
580 result r = E_SUCCESS;
582 if (IsWindowOnTop(window))
587 if (window.IsActivationEnabled())
589 int count = GetWindowCount();
590 for (int i = 0; i < count; i++)
592 _Window* pWindow = GetWindow((count-1) - i);
593 if (pWindow->IsActivated() == true)
595 pWindow->Deactivate();
602 if (IsWindowAttached(window))
604 r = MoveWindowToTop(window); // [ToDo] excpetion
605 SysAssert(r == E_SUCCESS);
610 r = window.GetControlDelegate().OnAttaching(null);
611 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
613 r = CallOnAttachingToMainTree(window);
614 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
616 r = AttachWindow(window);
617 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
619 if (window.IsActivationEnabled())
624 if (window.IsOrientationRoot() == false)
626 if (window.GetWindowType() == _WINDOW_TYPE_VE)
628 window.ChangeLayout(__orientation);
632 _EcoreEvas* pEcoreEvas = ::GetEcoreEvasMgr()->GetEcoreEvas();
635 pEcoreEvas->SetWindowPreferredRotation(window, ::Convert(__orientationStatus));
640 r = window.GetControlDelegate().OnAttached();
641 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
643 r = CallOnPreAttachedToMainTree(window);
644 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
648 window.Invalidate(true);
651 r = CallOnAttachedToMainTree(window);
652 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
654 if (window.IsDimmingEnabled())
656 r = _DimmingManager::GetInstance()->ShowDimmingLayer(&window);
657 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
664 _ControlManager::CallOnAttachingToMainTree(_Control& control)
666 result r = E_SUCCESS;
668 r = control.GetControlDelegate().OnAttachingToMainTree(null);
669 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
671 _Control::ControlList& children = control.GetChildList();
672 _Control* pChild = null;
674 for (int index = 0; index < children.GetCount(); index++)
676 r = children.GetAt(index, pChild);
679 SysAssert(r == E_OUT_OF_RANGE);
681 (r != E_OUT_OF_RANGE), E_OUT_OF_RANGE,
682 E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range.");
684 r = CallOnAttachingToMainTree(*pChild);
685 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
692 _ControlManager::CallOnPreAttachedToMainTree(_Control& control)
694 result r = E_SUCCESS;
696 _Control* pChild = null;
697 _Control::ControlList* pControlList = new (std::nothrow) _Control::ControlList;
698 pControlList->Construct(control.GetChildList());
700 for (int index = 0; index < pControlList->GetCount(); index++)
702 r = pControlList->GetAt(index, pChild);
705 SysAssert(r == E_OUT_OF_RANGE);
707 (r != E_OUT_OF_RANGE), E_OUT_OF_RANGE,
708 E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range.");
710 r = control.CallOnPreAttachedToMainTree(*pChild);
711 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
714 r = control.GetControlDelegate().OnPreAttachedToMainTree();
715 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
723 _ControlManager::CallOnAttachedToMainTree(_Control& control)
725 result r = E_SUCCESS;
727 _Control* pChild = null;
728 _Control::ControlList* pControlList = new (std::nothrow) _Control::ControlList;
729 pControlList->Construct(control.GetChildList());
731 r = control.GetControlDelegate().OnAttachedToMainTree();
732 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
734 for (int index = 0; index < pControlList->GetCount(); index++)
736 r = pControlList->GetAt(index, pChild);
739 SysAssert(r == E_OUT_OF_RANGE);
741 (r != E_OUT_OF_RANGE), E_OUT_OF_RANGE,
742 E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range.");
744 r = control.CallOnAttachedToMainTree(*pChild);
745 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
754 _ControlManager::CallOnDetachingFromMainTree(_Control& control)
756 result r = E_SUCCESS;
758 _Control* pChild = null;
759 _Control::ControlList& children = control.GetChildList();
761 _Window* pTop = control.GetRootWindow();
764 _Control* pControl = pTop->GetFocusControl(&control);
765 if ((&control) == pControl)
767 pTop->SetFocusControl(&control, false);
769 _Control* pFocusTraversalControl = pTop->GetFocusTraversalControl(&control);
770 if ((&control) == pFocusTraversalControl)
772 pTop->SetFocusTraversalControl(&control, false);
776 r = control.GetControlDelegate().OnDetachingFromMainTree();
777 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
779 for (int index = 0; index < children.GetCount(); index++)
781 r = children.GetAt(index, pChild);
784 SysAssert(r == E_OUT_OF_RANGE);
786 (r != E_OUT_OF_RANGE), E_OUT_OF_RANGE,
787 E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] The specified index is out of range.");
789 r = CallOnDetachingFromMainTree(*pChild);
790 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
797 _ControlManager::CallControlManagerEventListener(void)
799 unique_ptr<IEnumeratorT<_IControlManagerEventListener*> > pEnumerator(__pControlManagerEventListenerList->GetEnumeratorN());
802 while (pEnumerator->MoveNext() == E_SUCCESS)
804 _IControlManagerEventListener* pListener = null;
805 pEnumerator->GetCurrent(pListener);
809 pListener->OnControlManagerTerminating();
816 _ControlManager::CloseWindow(_Window& window) // [ToDo] exception check.
819 result r = E_SUCCESS;
821 if (IsWindowAttached(window) == false)
826 bool wasWindowOnTop = IsWindowOnTop(window);
828 r = CallOnDetachingFromMainTree(window);
829 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
831 window.GetControlDelegate().OnDetaching();
835 r = DetachWindow(window);
836 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
840 _Window* pNewTopWindow = GetTopWindow();
841 if (pNewTopWindow && pNewTopWindow->IsActivationEnabled())
843 pNewTopWindow->Activate();
844 if (pNewTopWindow->IsDimmingEnabled())
846 r = _DimmingManager::GetInstance()->ShowDimmingLayer(pNewTopWindow);
847 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
851 if (dynamic_cast <_Frame*>(pNewTopWindow) != null)
853 __pCurrentFrame = pNewTopWindow;
861 _ControlManager::GetControl(int index) const
864 __pAllControlList->GetAt(index, pControl);
870 _ControlManager::GetControlCount(void) const
872 return __pAllControlList->GetCount();
876 _ControlManager::GetWindow(int index) const
879 __pWindowList->GetAt(index, pWindow);
885 _ControlManager::GetWindowCount(void) const
887 return __pWindowList->GetCount();
892 _ControlManager::GetAllWindow(int index) const
895 __pAllWindowList->GetAt(index, pWindow);
901 _ControlManager::GetAllWindowCount(void) const
903 return __pAllWindowList->GetCount();
907 _ControlManager::DetachAllWindow(_Window& window)
909 return __pAllWindowList->Remove(&window);
913 _ControlManager::AttachWindow(_Window& window)
915 _Window* pTopWindow = GetTopWindow();
918 pTopWindow->OnTouchCaptureLost();
921 if (window.GetWindowType() != _WINDOW_TYPE_VE)
923 _IndicatorManager::GetInstance()->AddWindow(&window);
925 if (window.IsDimmingEnabled())
927 _DimmingManager::GetInstance()->RegisterWindow(&window);
930 _RootVisualElement* pRootVE = window.GetRootVisualElement();
933 _DisplayManager::GetInstance()->UnregisterRoot(*pRootVE);
934 _DisplayManager::GetInstance()->RegisterRoot(*pRootVE);
938 if (__pAllWindowList->Contains(&window) == false)
940 __pAllWindowList->Add(&window);
943 return __pWindowList->Add(&window);
947 _ControlManager::InsertWindowToBottom(_Window& window)
949 return __pWindowList->InsertAt(&window, 0);
953 _ControlManager::InsertWindowAfter(const _Window& targetWindow, _Window& window)
957 if ((GetTopWindow() != null) && (GetTopWindow() == &window))
959 window.OnTouchCaptureLost();
962 result r = __pWindowList->IndexOf(const_cast<_Window*>(&targetWindow), index);
963 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
965 return __pWindowList->InsertAt(&window, index+1);
969 _ControlManager::InsertWindowBefore(const _Window& targetWindow, _Window& window)
973 result r = __pWindowList->IndexOf(const_cast<_Window*>(&targetWindow), index);
974 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
976 return __pWindowList->InsertAt(&window, index);
980 _ControlManager::DetachWindow(_Window& window)
982 result r = E_SUCCESS;
984 _IndicatorManager::GetInstance()->DeleteWindow(&window);
986 if (window.IsDimmingEnabled())
988 _DimmingManager::GetInstance()->UnRegisterWindow(&window);
991 r = __pWindowList->Remove(&window);
993 _Window* pTopWindow = GetTopWindow();
996 pTopWindow->OnTouchCaptureGained();
1002 _ControlManager::DetachAllWindows(void)
1004 __pWindowList->RemoveAll();
1008 _ControlManager::MoveWindowToTop(const _Window& window)
1010 _Window* pTopWindow = GetTopWindow();
1013 pTopWindow->OnTouchCaptureLost();
1016 result r = __pWindowList->Remove(const_cast<_Window*>(&window));
1017 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1019 return __pWindowList->Add(const_cast<_Window*>(&window));
1023 _ControlManager::MoveWindowToBottom(const _Window& window)
1025 result r = __pWindowList->Remove(const_cast<_Window*>(&window));
1026 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1028 return __pWindowList->InsertAt(const_cast<_Window*>(&window), 0);
1032 _ControlManager::MoveWindowAfter(const _Window& targetWindow, const _Window& window)
1034 result r = __pWindowList->Remove(const_cast<_Window*>(&window));
1035 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1039 r = __pWindowList->IndexOf(const_cast<_Window*>(&targetWindow), index);
1040 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1042 return __pWindowList->InsertAt(const_cast<_Window*>(&window), index+1);
1046 _ControlManager::MoveWindowBefore(const _Window& targetWindow, const _Window& window)
1048 result r = __pWindowList->Remove(const_cast<_Window*>(&window));
1049 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1053 r = __pWindowList->IndexOf(const_cast<_Window*>(&targetWindow), index);
1054 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1056 return __pWindowList->InsertAt(const_cast<_Window*>(&window), index);
1060 _ControlManager::GetOrientation(void) const
1062 return __orientation;
1066 _ControlManager::SetOrientation(_ControlOrientation orientation)
1068 __orientation = orientation;
1072 _ControlManager::GetScreenRotation(void) const
1074 bool autoRotate = true;
1075 int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_AUTO_ROTATION_ENABLED, &autoRotate);
1077 if (ret == RUNTIME_INFO_ERROR_NONE)
1079 SysLog(NID_UI, "The flag of auto-rotate is %d.", autoRotate);
1083 SysLog(NID_UI, "It's failed to get the flag of auto-rotate.");
1086 SysLog(NID_UI, "[WM ROTATION] AUTO_ROTATION = %d", autoRotate);
1088 if (autoRotate == false)
1090 return _CONTROL_ROTATION_0;
1094 // int degree = app_get_device_orientation();
1096 unsigned long rotationState = 0;
1097 int ret = sf_check_rotation(&rotationState);
1098 int device_rotation = 0;
1102 switch (rotationState)
1104 case ROTATION_EVENT_0:
1105 device_rotation = 0;
1107 case ROTATION_EVENT_90:
1108 device_rotation = 270;
1110 case ROTATION_EVENT_180:
1111 device_rotation = 180;
1113 case ROTATION_EVENT_270:
1114 device_rotation = 90;
1116 case ROTATION_UNKNOWN:
1118 _Window* pCurrentFrame = GetCurrentFrame();
1121 _EcoreEvas* pEcoreEvas = ::GetEcoreEvasMgr()->GetEcoreEvas();
1124 SysLog(NID_UI, "[WM ROTATION] ROTATION_UNKNOWN");
1125 device_rotation = pEcoreEvas->GetWindowRotation(*pCurrentFrame);
1134 SysLog(NID_UI, "[WM ROTATION] device_rotation = %d", device_rotation);
1138 SysLog(NID_UI, "[WM ROTATION] device_rotation = error");
1141 return ::Convert(device_rotation);
1146 _ControlManager::OnScreenRotated(int rotation)
1148 SysLog(NID_UI, "The angle of Emul or Target is %d.", rotation);
1149 __screenRotation = ::Convert(rotation);
1151 int count = GetWindowCount();
1152 for (int i = 0; i < count; i++)
1154 _Window* pWindow = GetWindow((count-1) - i);
1156 _Frame* pFrame = dynamic_cast<_Frame*>(pWindow);
1160 Controls::_FrameImpl* pFrameImpl = static_cast<Controls::_FrameImpl*>(pFrame->GetUserData());
1161 if (pFrameImpl == null)
1166 Controls::_FormImpl* pCurrentFormImpl = pFrameImpl->GetCurrentForm();
1167 if (pCurrentFormImpl)
1169 pCurrentFormImpl->UpdateOrientationStatus(true);
1173 pFrameImpl->UpdateOrientationStatus();
1180 _ControlManager::SetTouchedWindow(unsigned int window)
1182 __touchedWindow = window;
1186 _ControlManager::GetTouchedWindow(void) const
1190 if (GetWindowCount() == 0)
1195 int count = GetWindowCount();
1196 for (int i = 0; i < count; i++)
1198 _Window* pWindow = GetWindow((count-1) - i);
1200 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
1206 _EflLayer* pLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
1208 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1209 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1211 if (win == __touchedWindow)
1221 _ControlManager::SetOrientationStatus(_ControlRotation orientationStatus)
1223 __orientationStatus = orientationStatus;
1227 _ControlManager::GetOrientationStatus(void) const
1229 return __orientationStatus;
1233 _ControlManager::RotateScreen(const _Control& control, _ControlRotation screenRotation)
1237 // Set window preferred rotation
1239 _EcoreEvas* pEcoreEvas = ::GetEcoreEvasMgr()->GetEcoreEvas();
1240 SysAssert(pEcoreEvas);
1241 if (pEcoreEvas == null)
1246 // Rotate root window.
1247 _Window* pRootWindow = control.GetRootWindow();
1250 pEcoreEvas->RotateWindow(*pRootWindow, ::Convert(screenRotation));
1251 pRootWindow->SetRotation(::Convert(screenRotation));
1254 if (__orientationStatus != screenRotation)
1256 _TouchManager* pTouchManager = _TouchManager::GetInstance();
1259 pTouchManager->SetTouchCanceled(null);
1265 _ControlManager::OnWindowRotated(int rotation)
1268 IEnumeratorT<_Window*>* pEnumerator = __pWindowList->GetEnumeratorN();
1269 SysTryReturnVoidResult(NID_UI, pEnumerator, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
1271 while (pEnumerator->MoveNext() == E_SUCCESS)
1273 _Window* pWindow = null;
1274 pEnumerator->GetCurrent(pWindow);
1276 if (pWindow->GetOwner() == null)
1278 void* pUserData = pWindow->GetUserData();
1281 _WindowImpl* pWindowImpl = static_cast<_WindowImpl*>(pUserData);
1282 pWindowImpl->OnRotated(Convert(rotation));
1291 _ControlManager::SetFocusControl(const _Control& control, bool on)
1295 if (__pFocusControl == &control)
1300 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
1301 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1303 _Control *pPreviousFocusedControl = __pFocusControl;
1304 if (pPreviousFocusedControl)
1306 // [review] make SetFocus() return result and use the returned result here.
1307 pEcoreEvas->SetFocus(*pPreviousFocusedControl, false);
1308 if (GetLastResult() == E_SUCCESS)
1310 _UiFocusEvent event(pPreviousFocusedControl->GetHandle(), FOCUS_LOST);
1311 _UiEventManager::GetInstance()->SendEvent(event);
1315 // [review] make SetFocus() return result and use the returned result here.
1317 if (control.IsNativeObjectFocusable())
1319 pEcoreEvas->SetFocus(control, true);
1322 if (GetLastResult() == E_SUCCESS)
1324 __pFocusControl = const_cast<_Control*>(&control);
1325 _UiFocusEvent event(control.GetHandle(), FOCUS_GAINED);
1326 _UiEventManager::GetInstance()->SendEvent(event);
1331 if (__pFocusControl != &control)
1336 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
1337 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1339 if (__pFocusControl)
1341 // [review] make SetFocus() return result and use the returned result here.
1342 pEcoreEvas->SetFocus(*__pFocusControl, false);
1343 if (GetLastResult() == E_SUCCESS)
1345 _UiFocusEvent event(__pFocusControl->GetHandle(), FOCUS_LOST);
1346 _UiEventManager::GetInstance()->SendEvent(event);
1350 _Window* pTopWindow = GetTopWindow();
1353 // [review] make SetFocus() return result and use the returned result here.
1354 pEcoreEvas->SetFocus(*pTopWindow, true);
1355 if (GetLastResult() == E_SUCCESS)
1357 _UiFocusEvent event(pTopWindow->GetHandle(), FOCUS_GAINED);
1358 _UiEventManager::GetInstance()->SendEvent(event);
1361 __pFocusControl = static_cast<_Control*>(pTopWindow);
1366 // [review] called in ~_Control and virtual OnFocusLost is called.
1367 // _Control::Release() instead of ~_Control.
1369 _ControlManager::TakeFocusFromControl(const _Control& control)
1371 if (__pFocusControl == &control)
1373 _Control *pPreviousFocusedControl = __pFocusControl;
1374 __pFocusControl = null;
1375 _UiFocusEvent event(pPreviousFocusedControl->GetHandle(), FOCUS_LOST);
1376 _UiEventManager::GetInstance()->SendEvent(event);
1385 _ControlManager::GetFocusControl(void) const
1387 return __pFocusControl;
1391 _ControlManager::SetClipboardOwner(_Window* pOwner)
1393 __pClipboardOwner = pOwner;
1397 _ControlManager::GetClipboardOwner(void) const
1399 if (__pClipboardOwner)
1401 return __pClipboardOwner;
1404 return GetCurrentFrame();
1408 _ControlManager::AddControlManagerEventListener(_IControlManagerEventListener& listener)
1410 bool exist = __pControlManagerEventListenerList->Contains(&listener);
1411 SysTryReturn(NID_UI, exist == false, E_OBJ_ALREADY_EXIST, E_OBJ_ALREADY_EXIST, "[%s] Propagating.", GetErrorMessage(E_OBJ_ALREADY_EXIST));
1413 __pControlManagerEventListenerList->Add(&listener);
1419 _ControlManager::RemoveControlManagerEventListener(_IControlManagerEventListener& listener)
1421 result r = __pControlManagerEventListenerList->Remove(&listener);
1422 SysTryReturn(NID_UI, r == E_SUCCESS, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] Propagating.", GetErrorMessage(E_OBJ_NOT_FOUND));
1428 _ControlManager::GetTopmostTouchedControl(const Point& point)
1430 _Control* pControl = null;
1431 _Window* pTopWindow = null;
1433 _TouchManager* pTouchManager = _TouchManager::GetInstance();
1434 SysTryReturn(NID_UI, pTouchManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1436 _Control* pCapturedControl = pTouchManager->GetCapturedControl();
1438 if (pCapturedControl)
1440 if (pTouchManager->IsCaptureAllowedOwnerBounds())
1442 if (pTouchManager->IsCaptureAllowedOutOfBounds())
1444 pControl = pCapturedControl;
1447 _Window * pWindow = dynamic_cast<_Window*>(pCapturedControl);
1450 _Control* pOwner = pWindow->GetOwner();
1453 Tizen::Graphics::Rectangle ownerRc(pOwner->GetAbsoluteBounds());
1454 if ((point.x >= ownerRc.x) && (point.x <= (ownerRc.x + ownerRc.width)) && (point.y >= ownerRc.y) && (point.y <= (ownerRc.y + ownerRc.height)))
1461 Tizen::Graphics::Rectangle rc(pCapturedControl->GetAbsoluteBounds());
1462 if ((point.x >= rc.x) && (point.x <= (rc.x + rc.width)) && (point.y >= rc.y) && (point.y <= (rc.y + rc.height)))
1464 pControl = pCapturedControl;
1469 if (pTouchManager->IsCaptureAllowedOutOfBounds())
1471 pControl = pCapturedControl;
1475 Tizen::Graphics::Rectangle rc(pCapturedControl->GetAbsoluteBounds());
1477 if ((point.x < rc.x) || (point.x > (rc.x + rc.width)) || (point.y < rc.y) || (point.y > (rc.y + rc.height)))
1479 pControl = pCapturedControl;
1484 if (pControl != null)
1490 int count = GetWindowCount();
1493 for (int i = 0; i < count; i++)
1495 _Window* pWindow = GetWindow((count-1) - i);
1497 if (pWindow->GetVisibleState() == false)
1502 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
1508 _EflLayer* pLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
1510 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1511 Ecore_X_Window win = (Ecore_X_Window)ecore_evas_window_get(pEcoreEvas);
1513 Rectangle winDeviceBounds(0, 0, 0, 0);
1514 ecore_x_window_geometry_get(win, &winDeviceBounds.x, &winDeviceBounds.y, &winDeviceBounds.width, &winDeviceBounds.height);
1516 Point winDevicePoint = _CoordinateSystemUtils::Transform(pWindow->GetPosition());
1518 Point devicePoint = _CoordinateSystemUtils::Transform(point);
1519 int x = devicePoint.x;
1520 int y = devicePoint.y;
1524 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
1526 int rotation = ecore_evas_rotation_get(pEcoreEvas);
1530 devicePoint.x = rootW - y;
1532 winDeviceBounds.x = rootW - winDevicePoint.y - winDeviceBounds.width;
1533 winDeviceBounds.y = winDevicePoint.x;
1536 devicePoint.x = rootW - x;
1537 devicePoint.y = rootH - y;
1538 winDeviceBounds.x = rootW - winDevicePoint.x - winDeviceBounds.width;
1539 winDeviceBounds.y = rootH - winDevicePoint.y - winDeviceBounds.height;
1543 devicePoint.y = rootH - x;
1544 winDeviceBounds.x = winDevicePoint.y;
1545 winDeviceBounds.y = rootH - winDevicePoint.x - winDeviceBounds.height;
1550 winDeviceBounds.x = winDevicePoint.x;
1551 winDeviceBounds.y = winDevicePoint.y;
1555 if (winDeviceBounds.Contains(devicePoint))
1557 pTopWindow = pWindow;
1563 if (pTopWindow != null)
1566 winPos = pTopWindow->GetPosition();
1568 Point relPos(point.x - winPos.x, point.y - winPos.y);
1569 pControl = pTopWindow->GetTopmostChildAt(relPos);
1570 if (pControl != null)
1572 if (pControl->GetRootWindow() == pTopWindow)
1582 // [review] rename __InvXformer
1584 _ControlManager::GetScreenSize(void) const
1586 return _CoordinateSystemUtils::InverseTransform(Dimension(_Screen::GetWidth(), _Screen::GetHeight()));
1590 _ControlManager::GetScreenSizeF(void) const
1592 return _CoordinateSystemUtils::InverseTransform(FloatDimension(_Screen::GetWidth(), _Screen::GetHeight()));
1596 _ControlManager::SetScreenDpi(int dpi)
1602 _ControlManager::GetScreenDpi() const
1608 _ControlManager::GetCurrentFrame(void) const
1610 return __pCurrentFrame;
1614 _ControlManager::SetDefaultFont(const String& appFontName)
1617 if(appFontName.Equals(__defaultFontName))
1622 __isDefaultFontChanged = true;
1623 __defaultFontName = appFontName;
1624 __defaultFontFileName.Clear();
1627 : public _Control::Visitor
1629 virtual _Control::VisitType Visit(_Control& control)
1631 if (control.__fontName.IsEmpty() && control.__fontFileName.IsEmpty())
1633 control.GetFallbackFont();
1634 _IControlDelegate& delegate = control.GetControlDelegate();
1635 delegate.OnFontChanged(control.__pFont);
1637 return _Control::VISIT_DOWNWARD;
1643 int count = GetWindowCount();
1644 for (int j = 0; j < count; j++)
1646 _Window* pWindow = GetWindow((count-1) - j);
1647 pWindow->Accept(visitor);
1650 SetDefaultFontChangeState(false);
1656 _ControlManager::GetDefaultFont(void)
1658 return __defaultFontName;
1662 _ControlManager::SetDefaultFontFromFile(const Tizen::Base::String& fileName)
1664 if(fileName.Equals(__defaultFontFileName))
1669 __isDefaultFontChanged = true;
1670 __defaultFontFileName = fileName;
1671 __defaultFontName.Clear();
1673 : public _Control::Visitor
1675 virtual _Control::VisitType Visit(_Control& control)
1677 if (control.__fontName.IsEmpty() && control.__fontFileName.IsEmpty())
1679 control.GetFallbackFont();
1680 _IControlDelegate& delegate = control.GetControlDelegate();
1681 delegate.OnFontChanged(control.__pFont);
1683 return _Control::VISIT_DOWNWARD;
1689 int count = GetWindowCount();
1690 for (int j = 0; j < count; j++)
1692 _Window* pWindow = GetWindow((count-1) - j);
1693 pWindow->Accept(visitor);
1696 SetDefaultFontChangeState(false);
1701 _ControlManager::GetDefaultFontFile(void) const
1703 return __defaultFontFileName;
1706 _ControlManager::IsDefaultFontChanged(void) const
1708 return __isDefaultFontChanged;
1712 _ControlManager::IsSystemFontChanged(void) const
1714 return __isSystemFontChanged;
1718 _ControlManager::SetDefaultFontChangeState(bool isDefaultFontChanged)
1720 __isDefaultFontChanged = isDefaultFontChanged;
1724 _ControlManager::IsFrameActivated(void) const
1726 _Frame* pFrame = dynamic_cast<_Frame*>(__pCurrentFrame);
1727 SysTryReturn(NID_UI, pFrame, false, E_SYSTEM, "[E_SYSTEM] System error occurred. ");
1729 return pFrame->IsFrameActivated();
1732 // [review] refactoring
1734 _ControlManager::AddGestureDetector(const _TouchGestureDetector& gesture)
1738 SysTryReturn(NID_UI, __pGestureList != null, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred. ");
1740 bool exist = __pGestureList->Contains(const_cast<_TouchGestureDetector*>(&gesture));
1741 SysTryReturnResult(NID_UI, exist == false, E_OBJ_ALREADY_EXIST, "[E_OBJ_ALREADY_EXIST]__pGestureList has gesture already");
1743 result r = __pGestureList->Add(const_cast<_TouchGestureDetector*>(&gesture));
1744 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1746 switch (gesture.GetDetectorType())
1748 case _TOUCH_GESTURE_DETECTOR_TYPE_TAP:
1750 _TouchTapGestureDetector* pGestureTap = dynamic_cast<_TouchTapGestureDetector*>(const_cast<_TouchGestureDetector*>(&gesture));
1751 SysTryReturnResult(NID_UI, pGestureTap, E_SYSTEM, "[E_SYSTEM]system error occurred.");
1753 if (pGestureTap->GetTapInterval() > __gestureMaxDuration)
1755 __gestureMaxDuration = pGestureTap->GetTapInterval();
1759 case _TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS:
1761 _TouchLongPressGestureDetector* pGestureLongPress= dynamic_cast<_TouchLongPressGestureDetector*>(const_cast<_TouchGestureDetector*>(&gesture));
1762 SysTryReturnResult(NID_UI, pGestureLongPress, E_SYSTEM, "[E_SYSTEM]system error occurred.");
1764 if (pGestureLongPress->GetDuration() > __gestureMaxDuration)
1766 __gestureMaxDuration = pGestureLongPress->GetDuration();
1778 _ControlManager::RemoveGestureDetector(const _TouchGestureDetector& gesture)
1782 return __pGestureList->Remove(&(const_cast<_TouchGestureDetector&>(gesture)));
1785 IListT <_TouchGestureDetector*>*
1786 _ControlManager::GetGestureDetectorList(void) const
1788 return __pGestureList;
1792 _ControlManager::GetGestureMaxTimeDuration(void) const
1794 return __gestureMaxDuration;
1798 _ControlManager::OnSettingChanged(Tizen::Base::String& key)
1800 const wchar_t* FONT_TYPE = L"http://tizen.org/setting/font.type";
1801 const wchar_t* LOCALE_COUNTRY = L"http://tizen.org/setting/locale.country";
1802 const wchar_t* LOCALE_LANGUAGE = L"http://tizen.org/setting/locale.language";
1804 if (key == FONT_TYPE || key == LOCALE_COUNTRY || key == LOCALE_LANGUAGE)
1806 _FontImpl::UpdateDefaultFont(key);
1807 __isSystemFontChanged = true;
1809 : public _Control::Visitor
1811 virtual _Control::VisitType Visit(_Control& control)
1813 control.GetFallbackFont();
1814 _IControlDelegate& delegate = control.GetControlDelegate();
1815 delegate.OnFontChanged(control.__pFont);
1816 return _Control::VISIT_DOWNWARD;
1822 int count = GetWindowCount();
1823 for (int j = 0; j < count; j++)
1825 _Window* pWindow = GetWindow((count-1) - j);
1826 pWindow->Accept(visitor);
1829 __isSystemFontChanged = false;
1830 for(int index = 0; index < count ; index++)
1832 _Window* pWindow = GetWindow(index);
1833 pWindow->Invalidate(true);
1837 //fixme : check longpress duration key
1840 if (!__pGestureList || (__pGestureList && (__pGestureList->GetCount() <= 0)))
1845 IEnumeratorT<_TouchGestureDetector*>* pEnumerator = __pGestureList->GetEnumeratorN();
1846 SysTryReturnVoidResult(NID_UI, pEnumerator, E_SYSTEM, "[E_SYSTEM] System error occurred.")
1848 int duration = static_cast<int>(elm_config_longpress_timeout_get() * 1000);
1854 while (pEnumerator->MoveNext() == E_SUCCESS)
1856 _TouchGestureDetector* pGestureDetector = null;
1857 pEnumerator->GetCurrent(pGestureDetector);
1859 if (!pGestureDetector)
1864 if(pGestureDetector->GetDetectorType() == _TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS)
1866 _TouchLongPressGestureDetector* pGestureLongPress= dynamic_cast<_TouchLongPressGestureDetector*>(const_cast<_TouchGestureDetector*>(pGestureDetector));
1867 SysTryReturnVoidResult(NID_UI, pGestureLongPress, E_SYSTEM, "[E_SYSTEM] System error occurred.")
1868 pGestureLongPress->SetDuration(duration);