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.
18 * @file FUi_UiEventManager.cpp
19 * @brief This is the implementation file for the _UiEventManager class.
23 #include <FBaseColHashMapT.h>
24 #include <FBaseColIMapEnumeratorT.h>
25 #include <FBaseColLinkedListT.h>
26 #include <FBaseSysLog.h>
27 #include "FUi_UiEventManager.h"
28 #include "FUi_UiEvent.h"
29 #include "FUi_INotificationEventListener.h"
30 #include "FUi_IKeyEventListener.h"
31 #include "FUi_ITouchEventListener.h"
32 #include "FUi_IFocusEventListener.h"
33 #include "FUi_EflUiEventManager.h"
34 #include "FUi_Control.h"
35 #include "FUi_ControlManager.h"
36 #include "FUi_TouchManager.h"
37 #include "FUi_TouchGestureDetector.h"
38 #include "FUiAnim_ControlVisualElement.h"
39 #include "FUi_UiKeyEvent.h"
40 #include "FUi_KeyEventManager.h"
41 #include "FUi_ResourceManager.h"
42 #include "FUi_Window.h"
45 using namespace Tizen::Base;
46 using namespace Tizen::Base::Collection;
47 using namespace Tizen::Graphics;
48 using namespace Tizen::Ui::Animations;
50 namespace Tizen { namespace Ui
53 _UiEventManager* _UiEventManager::__pInstance = null;
56 _UiEventManager::Initialize(void)
58 static pthread_once_t once_block = PTHREAD_ONCE_INIT;
62 pthread_once(&once_block, InitInstance);
67 _UiEventManager::Release(void)
74 _UiEventManager::GetInstance(void)
80 _UiEventManager::InitInstance(void)
84 __pInstance = new (std::nothrow) _UiEventManager;
85 SysAssert(__pInstance);
90 _UiEventManager::AddTouchEventListener(const _ITouchEventListener& listener)
92 return AddEventListener(_UI_EVENT_TOUCH, _UI_LISTENER_NONE, listener);
96 _UiEventManager::AddKeyEventListener(const _IKeyEventListener& listener)
98 return AddEventListener(_UI_EVENT_KEY, _UI_LISTENER_NONE, listener);
102 _UiEventManager::AddFocusEventListener(const _IFocusEventListener& listener)
104 return AddEventListener(_UI_EVENT_FOCUS, _UI_LISTENER_NONE, listener);
108 _UiEventManager::AddNotificationEventListener(const _INotificationEventListener& listener)
110 return AddEventListener(_UI_EVENT_NOTIFICAITON, _UI_LISTENER_NONE, listener);
114 _UiEventManager::RemoveTouchEventListener(const _ITouchEventListener& listener)
116 return RemoveEventListener(_UI_EVENT_TOUCH, _UI_LISTENER_NONE, listener);
120 _UiEventManager::RemoveKeyEventListener(const _IKeyEventListener& listener)
122 return RemoveEventListener(_UI_EVENT_KEY, _UI_LISTENER_NONE, listener);
126 _UiEventManager::RemoveFocusEventListener(const _IFocusEventListener& listener)
128 return RemoveEventListener(_UI_EVENT_FOCUS, _UI_LISTENER_NONE, listener);
132 _UiEventManager::RemoveNotificationEventListener(const _INotificationEventListener& listener)
134 return RemoveEventListener(_UI_EVENT_NOTIFICAITON, _UI_LISTENER_NONE, listener);
138 _UiEventManager::AddPostKeyEventListener(const _IKeyEventListener& listener)
140 return AddEventListener(_UI_EVENT_KEY, _UI_LISTENER_POST, listener);
144 _UiEventManager::RemovePostKeyEventListener(const _IKeyEventListener& listener)
146 return RemoveEventListener(_UI_EVENT_KEY, _UI_LISTENER_POST, listener);
150 _UiEventManager::AddTargetPostKeyEventListener(const _IKeyEventListener& listener)
152 return AddEventListener(_UI_EVENT_KEY, _UI_LISTENER_TARGET_POST, listener);
156 _UiEventManager::RemoveTargetPostKeyEventListener(const _IKeyEventListener& listener)
158 return RemoveEventListener(_UI_EVENT_KEY, _UI_LISTENER_TARGET_POST, listener);
162 _UiEventManager::SendEvent(const _UiEvent& event)
164 result r = E_SUCCESS;
172 _UiEventManager::PostEvent(const _UiEvent& event)
174 return __pEventManager->PostEvent(event);
178 _UiEventManager::GenerateKeyEvent(KeyState keyState, _KeyCode keyCode, _KeyModifier keyModifier, bool async)
180 result r = E_SUCCESS;
182 _UiObjectHandle uiObjectHandle = GetTarget();
183 if (uiObjectHandle.IsNull())
188 _UiEventRouteType routeType = (keyState == KEY_LONGPRESSED) ? _UI_EVENT_ROUTE_DIRECT : _UI_EVENT_ROUTE_TUNNEL_BUBBLE;
190 _KeyInfo keyInfo(keyState, keyCode, keyModifier, null);
192 _UiKeyEvent event(uiObjectHandle, keyInfo, routeType);
196 r = PostEvent(event);
200 r = SendEvent(event);
203 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
209 _UiEventManager::GenerateTouchEvent(_TouchStatus touchStatus, int x, int y, bool async)
211 result r = E_SUCCESS;
213 _UiObjectHandle uiObjectHandle = GetTarget(x, y);
214 if (uiObjectHandle.IsNull())
219 const unsigned long DEVICE_ID = 0;
222 unsigned int pointId = 0;
223 _UiEventRouteType routeType = _UI_EVENT_ROUTE_TUNNEL_BUBBLE;
225 _TouchManager* pTouchManager = _TouchManager::GetInstance();
226 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
231 pointId = pTouchManager->GeneratePointId(DEVICE_ID);
234 case _TOUCH_LONG_PRESSED:
236 case _TOUCH_DOUBLE_PRESSED:
237 routeType = _UI_EVENT_ROUTE_DIRECT;
238 pointId = pTouchManager->GetPointId(DEVICE_ID);
242 pointId = pTouchManager->GetPointId(DEVICE_ID);
246 _TouchInfo touchInfo(pointId, touchStatus, current, false, 0);
247 _UiTouchEvent event(uiObjectHandle, touchInfo, routeType);
251 r = PostEvent(event);
255 r = SendEvent(event);
258 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
264 _UiEventManager::GetEventManager(void) const
266 return __pEventManager.get();
270 _UiEventManager::AddEventListener(_UiEventType eventType, _UiListenerType listenerType, const _IUiEventListener& listener)
272 result r = E_SUCCESS;
274 SysTryReturn(NID_UI, !IsListenerRegistered(eventType, listenerType, listener), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
276 LinkedListT <_IUiEventListener*>* pEventListeners = GetEventListeners(eventType, listenerType);
279 pEventListeners->Add(const_cast <_IUiEventListener*>(&listener));
286 _UiEventManager::RemoveEventListener(_UiEventType eventType, _UiListenerType listenerType, const _IUiEventListener& listener)
288 result r = E_SUCCESS;
290 LinkedListT <_IUiEventListener*>* pEventListeners = GetEventListeners(eventType, listenerType);
293 pEventListeners->Remove(const_cast <_IUiEventListener*>(&listener));
300 _UiEventManager::IsListenerRegistered(_UiEventType eventType, _UiListenerType listenerType, const _IUiEventListener& listener)
302 bool isRegistered = false;
304 LinkedListT <_IUiEventListener*>* pEventListeners = GetEventListeners(eventType, listenerType);
307 Tizen::Base::Collection::IEnumeratorT <_IUiEventListener*>* pEnumerator = pEventListeners->GetEnumeratorN();
308 SysTryReturn(NID_UI, pEnumerator, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
310 while (pEnumerator->MoveNext() == E_SUCCESS)
312 _IUiEventListener* pEventListener = null;
313 pEnumerator->GetCurrent(pEventListener);
319 if (pEventListener == &listener)
333 _UiEventManager::Fire(const _UiEvent& event)
335 result r = E_SUCCESS;
337 bool isFiltered = false;
339 r = ProcessListener(event, isFiltered);
340 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
344 r = ProcessGlobalGesture(event, isFiltered);
345 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
348 if (event.GetEventType() == _UI_EVENT_TOUCH)
350 r = ProcessEvent(event, isFiltered);
351 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
353 else if (!isFiltered)
355 r = ProcessEvent(event, isFiltered);
356 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
361 ProcessPostListener(event, isFiltered);
367 LinkedListT <_IUiEventListener*>*
368 _UiEventManager::GetEventListeners(_UiEventType eventType, _UiListenerType listenerType) const
370 LinkedListT <_IUiEventListener*>* pEventListeners = null;
372 if (listenerType == _UI_LISTENER_POST)
374 SysTryReturn(NID_UI, __pPostEventListenerMap, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] PostEventListenerMap is null.");
375 __pPostEventListenerMap->GetValue(eventType, pEventListeners);
377 else if (listenerType == _UI_LISTENER_TARGET_POST)
379 SysTryReturn(NID_UI, __pTargetPostEventListenerMap, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] TargetPostEventListenerMap is null.");
380 __pTargetPostEventListenerMap->GetValue(eventType, pEventListeners);
384 result r = E_SUCCESS;
386 SysTryReturn(NID_UI, __pEventListenerMap, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] EventListenerMap is null.");
387 r = __pEventListenerMap->GetValue(eventType, pEventListeners);
388 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
391 return pEventListeners;
395 _UiEventManager::ProcessListener(const _UiEvent& event, bool& isFiltered)
397 return ProcessListener(event, _UI_LISTENER_NONE, isFiltered);
401 _UiEventManager::ProcessTargetPostListener(const _UiEvent& event, bool& isFiltered)
403 return ProcessListener(event, _UI_LISTENER_TARGET_POST, isFiltered);
407 _UiEventManager::ProcessPostListener(const _UiEvent& event, bool& isFiltered)
409 return ProcessListener(event, _UI_LISTENER_POST, isFiltered);
413 _UiEventManager::ProcessListener(const _UiEvent& event, _UiListenerType listenerType, bool& isFiltered)
415 result r = E_SUCCESS;
417 LinkedListT <_IUiEventListener*>* pEventListeners = GetEventListeners(event.GetEventType(), listenerType);
420 Tizen::Base::Collection::IEnumeratorT <_IUiEventListener*>* pEnumerator = pEventListeners->GetEnumeratorN();
421 SysTryReturn(NID_UI, pEnumerator, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
423 while (pEnumerator->MoveNext() == E_SUCCESS)
425 _IUiEventListener* pEventListener = null;
427 pEnumerator->GetCurrent(pEventListener);
433 r = const_cast<_UiEvent&>(event).ProcessListener(*pEventListener, isFiltered);
447 _UiEventManager::ProcessEvent(const _UiEvent& event, bool& isFiltered)
449 result r = E_SUCCESS;
450 _ResourceManager::GetInstance()->AcquireFeedback();
451 switch (event.GetRouteType())
453 case _UI_EVENT_ROUTE_TUNNEL_BUBBLE:
455 LinkedListT <_UiObjectHandle> tunnelingPath;
456 LinkedListT <_UiObjectHandle> bubblingPath;
458 r = MakeRoutingPath(tunnelingPath, bubblingPath, event);
462 if (event.GetEventType() == _UI_EVENT_KEY)
464 CallTranslateKeyEventInfo(event,isFiltered);
467 ProcessTunnelingEvent(tunnelingPath, event, isFiltered);
469 if (event.GetEventType() == _UI_EVENT_TOUCH)
471 ProcessBubblingEvent(bubblingPath, event, isFiltered);
473 else if (!isFiltered)
475 ProcessBubblingEvent(bubblingPath, event, isFiltered);
481 case _UI_EVENT_ROUTE_DIRECT:
483 _ControlManager* pControlManager = _ControlManager::GetInstance();
484 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
486 const _Control* pTarget = pControlManager->GetObject(event.GetDestination());
489 r = const_cast<_UiEvent&>(event).ProcessEvent(*pTarget, isFiltered);
497 _ResourceManager::GetInstance()->ReleaseFeedback();
502 _UiEventManager::CallTranslateKeyEventInfo(const _UiEvent& event, bool& isFiltered)
504 _ControlManager* pControlManager = _ControlManager::GetInstance();
505 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
507 _Control* pTarget = pControlManager->GetObject(event.GetDestination());
508 SysTryReturn(NID_UI, pTarget, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pTarget is null.");
510 _UiKeyEvent& keyEvent = static_cast<_UiKeyEvent&>(const_cast<_UiEvent&>(event));
512 _KeyInfo* pKeyInfo = keyEvent.GetKeyInfo();
513 SysTryReturn(NID_UI, pKeyInfo, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pTarget is null.");
515 _IPropagatedKeyEventListener* pKeyEventListener = pTarget->GetPropagatedKeyEventListener();
516 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
518 pKeyEventListener->TranslateKeyEventInfo(*pTarget, *pKeyInfo);
524 _UiEventManager::ProcessGlobalGesture(const _UiEvent& event, bool& isFiltered)
526 if (event.GetEventType() != _UI_EVENT_TOUCH)
531 if (event.GetAccessibilityEvent())
536 _ControlManager* pControlManager = _ControlManager::GetInstance();
537 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
539 _TouchManager* pTouchManager = _TouchManager::GetInstance();
540 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
542 Tizen::Base::Collection::IListT<_TouchGestureDetector*>* pGestureList = pControlManager->GetGestureDetectorList();
543 if (!pGestureList || (pGestureList && (pGestureList->GetCount() <= 0)))
548 result r = E_SUCCESS;
550 Tizen::Base::Collection::IEnumeratorT <_TouchGestureDetector*>* pEnumerator = pGestureList->GetEnumeratorN();
551 SysTryReturn(NID_UI, pEnumerator, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
553 _TouchGestureDetector* pGestureDetector = null;
554 while (pEnumerator->MoveNext() == E_SUCCESS)
556 pEnumerator->GetCurrent(pGestureDetector);
558 if (!pGestureDetector)
563 r = const_cast<_UiEvent&>(event).ProcessListener(*pGestureDetector, isFiltered);
576 _UiEventManager::MakeRoutingPath(Tizen::Base::Collection::LinkedListT <_UiObjectHandle>& tunnelingPath, Tizen::Base::Collection::LinkedListT <_UiObjectHandle>& bubblingPath, const _UiEvent& event)
578 result r = E_SUCCESS;
580 _ControlManager* pControlManager = _ControlManager::GetInstance();
581 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
583 _Control* pControl = pControlManager->GetObject(event.GetDestination());
584 SysTryReturn(NID_UI, pControl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
587 _Control* pBubblingTarget = pControl;
588 while (pBubblingTarget)
590 bubblingPath.Add(pBubblingTarget->GetHandle());
591 pBubblingTarget = pBubblingTarget->GetParent();
595 for (int i = bubblingPath.GetCount() - 1; i > 0; i--)
597 _UiObjectHandle uiObjectHandle;
599 r = bubblingPath.GetAt(i, uiObjectHandle);
602 tunnelingPath.Add(uiObjectHandle);
610 _UiEventManager::ProcessTunnelingEvent(const Tizen::Base::Collection::LinkedListT <_UiObjectHandle>& routingPath, const _UiEvent& event, bool& isFiltered)
612 result r = E_SUCCESS;
614 Tizen::Base::Collection::IEnumeratorT <_UiObjectHandle>* pEnumerator = routingPath.GetEnumeratorN();
615 SysTryReturn(NID_UI, pEnumerator, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
617 _UiObjectHandle uiObjectHandle;
618 while (pEnumerator->MoveNext() == E_SUCCESS)
620 pEnumerator->GetCurrent(uiObjectHandle);
621 if (uiObjectHandle.IsNull())
626 const _Control* pControl = event.GetControl(uiObjectHandle);
632 r = const_cast<_UiEvent&>(event).ProcessPreviewEvent(*pControl, isFiltered);
646 _UiEventManager::ProcessBubblingEvent(const Tizen::Base::Collection::LinkedListT <_UiObjectHandle>& routingPath, const _UiEvent& event, bool& isFiltered)
648 result r = E_SUCCESS;
650 Tizen::Base::Collection::IEnumeratorT <_UiObjectHandle>* pEnumerator = routingPath.GetEnumeratorN();
651 SysTryReturn(NID_UI, pEnumerator, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
653 _UiObjectHandle uiObjectHandle;
654 while (pEnumerator->MoveNext() == E_SUCCESS)
656 pEnumerator->GetCurrent(uiObjectHandle);
657 if (uiObjectHandle.IsNull())
662 const _Control* pControl = event.GetControl(uiObjectHandle);
668 r = const_cast<_UiEvent&>(event).ProcessEvent(*pControl, isFiltered);
670 if (!isFiltered && (event.GetDestination() == uiObjectHandle))
672 ProcessTargetPostListener(event, isFiltered);
682 _UiEventManager::GetTarget(void) const
684 _Control* pControl = _ControlManager::GetInstance()->GetFocusControl();
685 SysTryReturn(NID_UI, pControl, _UiObjectHandle(), E_SYSTEM, "[E_SYSTEM] System error occurred.");
687 return pControl->GetHandle();
691 _UiEventManager::GetTarget(int x, int y) const
693 Tizen::Graphics::FloatPoint ptf((float) x, (float) y);
695 _ControlVisualElement* pRootControlElement =
696 dynamic_cast <_ControlVisualElement*>(_ControlManager::GetInstance()->GetTopVisibleWindowAt(Point(x, y))->GetVisualElement());
697 SysTryReturn(NID_UI, pRootControlElement, _UiObjectHandle(), E_SYSTEM, "[E_SYSTEM] System error occurred.");
699 _ControlVisualElement* pControlVisualElement = pRootControlElement->GetControlChildAtPoint(ptf);
700 SysTryReturn(NID_UI, pControlVisualElement, _UiObjectHandle(), E_SYSTEM, "[E_SYSTEM] System error occurred.");
702 _Control* pControl = static_cast <_Control*>(pControlVisualElement->GetUserData());
703 SysTryReturn(NID_UI, pControl, _UiObjectHandle(), E_SYSTEM, "[E_SYSTEM] System error occurred.");
705 return pControl->GetHandle();
709 _UiEventManager::RemoveAllEventListenerList(Tizen::Base::Collection::HashMapT<_UiEventType, Tizen::Base::Collection::LinkedListT<_IUiEventListener*>*>* pMap)
711 Tizen::Base::Collection::IMapEnumeratorT<_UiEventType, Tizen::Base::Collection::LinkedListT<_IUiEventListener*>*>* pMapEnumerator = pMap->GetMapEnumeratorN();
712 SysTryReturnVoidResult(NID_UI, pMapEnumerator, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
714 while (pMapEnumerator->MoveNext() == E_SUCCESS)
716 Tizen::Base::Collection::LinkedListT<_IUiEventListener*>* pListeners = null;
717 pMapEnumerator->GetValue(pListeners);
727 delete pMapEnumerator;
730 _UiEventManager::_UiEventManager(void)
731 : __pEventManager(new (std::nothrow) _EflUiEventManager)
733 unique_ptr<HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*> > pEventListenerMap(new (std::nothrow) HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*>);
734 SysTryReturnVoidResult(NID_UI, pEventListenerMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
736 result r = pEventListenerMap->Construct();
737 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
740 LinkedListT<_IUiEventListener*>* pTouchEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
741 SysTryReturnVoidResult(NID_UI, pTouchEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
743 r = pEventListenerMap->Add(_UI_EVENT_TOUCH, pTouchEventListeners);
744 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
747 LinkedListT<_IUiEventListener*>* pKeyEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
748 SysTryReturnVoidResult(NID_UI, pKeyEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
750 r = pEventListenerMap->Add(_UI_EVENT_KEY, pKeyEventListeners);
751 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
754 LinkedListT<_IUiEventListener*>* pFocusEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
755 SysTryReturnVoidResult(NID_UI, pFocusEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
757 r = pEventListenerMap->Add(_UI_EVENT_FOCUS, pFocusEventListeners);
758 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
761 LinkedListT <_IUiEventListener*>* pNotificationEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
762 SysTryReturnVoidResult(NID_UI, pNotificationEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
764 r = pEventListenerMap->Add(_UI_EVENT_NOTIFICAITON, pNotificationEventListeners);
765 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
768 unique_ptr<HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*> > pPostEventListenerMap(new (std::nothrow) HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*>);
769 SysTryReturnVoidResult(NID_UI, pPostEventListenerMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
771 r = pPostEventListenerMap->Construct();
772 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
775 LinkedListT<_IUiEventListener*>* pPostKeyEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
776 SysTryReturnVoidResult(NID_UI, pPostKeyEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
778 r = pPostEventListenerMap->Add(_UI_EVENT_KEY, pPostKeyEventListeners);
779 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
782 unique_ptr<HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*> > pTargetPostEventListenerMap(new (std::nothrow) HashMapT<_UiEventType, LinkedListT<_IUiEventListener*>*>);
783 SysTryReturnVoidResult(NID_UI, pTargetPostEventListenerMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
785 r = pTargetPostEventListenerMap->Construct();
786 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
789 LinkedListT<_IUiEventListener*>* pTargetPostKeyEventListeners = new (std::nothrow) LinkedListT<_IUiEventListener*>;
790 SysTryReturnVoidResult(NID_UI, pTargetPostKeyEventListeners, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
792 r = pTargetPostEventListenerMap->Add(_UI_EVENT_KEY, pTargetPostKeyEventListeners);
793 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
796 __pEventListenerMap = move(pEventListenerMap);
797 __pPostEventListenerMap = move(pPostEventListenerMap);
798 __pTargetPostEventListenerMap = move(pTargetPostEventListenerMap);
801 _UiEventManager::~_UiEventManager(void)
803 RemoveAllEventListenerList(__pEventListenerMap.get());
804 RemoveAllEventListenerList(__pPostEventListenerMap.get());
805 RemoveAllEventListenerList(__pTargetPostEventListenerMap.get());