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_EflUiEventManager.cpp
19 * @brief This is the implementation file for _EflUiEventManager class.
23 #include <Ecore_Evas.h>
29 #include <FBaseColIEnumeratorT.h>
30 #include <FBaseSysLog.h>
31 #include "FUi_CoordinateSystemUtils.h"
32 #include "FUi_Control.h"
33 #include "FUi_ControlManager.h"
34 #include "FUi_KeyEventManager.h"
35 #include "FUi_Window.h"
36 #include "FUi_UiEventManager.h"
37 #include "FUi_EflUiEventManager.h"
38 #include "FUi_UiTouchEvent.h"
39 #include "FUi_UiNotificationEvent.h"
40 #include "FUi_UiKeyEvent.h"
41 #include "FUi_UiFocusEvent.h"
42 #include "FUi_EcoreEvasMgr.h"
43 #include "FUi_EcoreEvas.h"
44 #include "FUi_TouchManager.h"
45 #include "FUiAnim_EflNode.h"
46 #include "FUiAnim_ControlVisualElement.h"
47 #include "FUiAnim_RootVisualElement.h"
48 #include "FUiAnim_EflLayer.h"
51 using namespace Tizen::Ui;
52 using namespace Tizen::Ui::Animations;
53 using namespace Tizen::Graphics;
54 using namespace Tizen::Base::Collection;
55 using namespace Tizen::Base;
61 bool isPressed = false;
62 Ecore_X_Atom keyboardExist = 0;
63 const wchar_t* KEYBOARD_INSERTED_EVENT = L"KEYBOARD_INSERTED";
66 GetEvasObject(const _Control& control)
68 _VisualElement* pVisualElement = control.GetVisualElement();
69 SysTryReturn(NID_UI, pVisualElement, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
71 _EflNode* pEflNode = dynamic_cast<_EflNode*>(pVisualElement->GetNativeNode());
72 SysTryReturn(NID_UI, pEflNode, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
74 return (Evas_Object*)pEflNode->GetGroupContainer();
78 GetEvas(const _Control& control)
81 Evas_Object* pEvasObject = GetEvasObject(control);
84 pEvas = evas_object_evas_get(pEvasObject);
85 SysTryReturn(NID_UI, pEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
95 : _pEventManager(null)
97 _pEventManager = _UiEventManager::GetInstance();
98 SysTryReturnVoidResult(NID_UI, _pEventManager, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
100 SetLastResult(E_SUCCESS);
103 virtual ~_Event(void)
108 _Event(const _Event& rhs);
109 _Event& operator =(const _Event& rhs);
111 virtual result SendImpl(void) = 0;
120 _UiEventManager* _pEventManager;
123 struct _EvasConvertKeys
129 const _EvasConvertKeys keyTable[] =
131 { _KEY_ESC, "Escape" },
132 { _KEY_GRAVE, "grave" },
143 { _KEY_MINUS, "minus" },
144 { _KEY_EQUAL, "equal" },
145 { _KEY_BACKSLASH, "backslash" },
146 { _KEY_BACKSPACE, "BackSpace" },
158 { _KEY_LBRACKET, "bracketleft" },
159 { _KEY_RBRACKET, "bracketright" },
160 { _KEY_ENTER, "Return" },
161 { _KEY_CAPSLOCK, "Caps_Lock" },
171 { _KEY_SEMICOLON, "semicolon" },
172 { _KEY_APOSTROPHE, "apostrophe" },
173 { _KEY_SHIFT_L, "Shift_L" },
181 { _KEY_COMMA, "comma" },
182 { _KEY_DOT, "period" },
183 { _KEY_SLASH, "slash" },
184 { _KEY_SHIFT_R, "Shift_R" },
185 { _KEY_CTRL_L, "Control_L" },
186 { _KEY_LALT, "Alt_L" },
187 { _KEY_SPACE, "space" },
188 { _KEY_RALT, "Alt_R" },
189 { _KEY_CTRL_R, "Control_R" },
199 { _KEY_FN_10, "F10" },
200 { _KEY_FN_11, "F11" },
201 { _KEY_FN_12, "F12" },
202 { _KEY_NUM_LOCK, "Num_Lock" },
203 { _KEY_NUMPAD_DIVIDE, "KP_Divide" },
204 { _KEY_NUMPAD_MULTIPLY, "KP_Multiply" },
205 { _KEY_NUMPAD_SUBTRACT, "KP_Subtract" },
206 { _KEY_NUMPAD_7, "KP_Home" },
207 { _KEY_NUMPAD_8, "KP_Up" },
208 { _KEY_NUMPAD_9, "KP_Prior" },
209 { _KEY_NUMPAD_4, "KP_Left" },
210 { _KEY_NUMPAD_5, "KP_Begin" },
211 { _KEY_NUMPAD_6, "KP_Right" },
212 { _KEY_NUMPAD_ADD, "KP_Add" },
213 { _KEY_NUMPAD_1, "KP_End" },
214 { _KEY_NUMPAD_2, "KP_Down" },
215 { _KEY_NUMPAD_3, "KP_Next" },
216 { _KEY_NUMPAD_0, "KP_Insert" },
217 { _KEY_NUMPAD_DOT, "KP_Delete" },
218 { _KEY_NUMPAD_ENTER, "KP_Enter" },
219 { _KEY_PRINT, "Print" },
220 { _KEY_SCROLL_LOCK, "Scroll_Lock" },
221 { _KEY_PAUSEBREAK, "Pause" },
222 { _KEY_INSERT, "Insert" },
223 { _KEY_HOME_BUTTON, "Home" },
224 { _KEY_PAGE_UP, "Prior" },
225 { _KEY_DELETE, "Delete" },
226 { _KEY_END_BUTTON, "End" },
227 { _KEY_PAGE_DOWN, "Next" },
229 { _KEY_LEFT, "Left" },
230 { _KEY_DOWN, "Down" },
231 { _KEY_RIGHT, "Right" },
233 //{ _KEY_SIDE_UP, "XF86AudioRaiseVolume" },
234 //{ _KEY_SIDE_DOWN, "XF86AudioLowerVolume" },
235 //{ _KEY_POWER_HOLD, "XF86PowerOff" },
236 { _KEY_STOP, "XF86Stop" }
243 _KeyEvent(KeyState keyState, _KeyCode keyCode, int keyModifier, void* pUserData)
245 , __keyInfo(keyState, keyCode, keyModifier, pUserData)
247 __pTarget = GetTarget(keyCode);
250 virtual ~_KeyEvent(void)
254 static _KeyCode GetKeyCode(const char* pKeyName)
258 SysTryReturn(NID_UI, pKeyName, _KEY_INVALID, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
260 for (unsigned int i = 0; i < sizeof(keyTable) / sizeof(_EvasConvertKeys); ++i)
262 if (strcmp(keyTable[i].pName, pKeyName) == 0)
264 return keyTable[i].code;
271 static int GetKeyModifier(const int keyModifier)
274 unsigned int modifier = _KEY_MODIFIER_NONE;
276 if(ECORE_EVENT_MODIFIER_SHIFT & keyModifier)
278 modifier |= _KEY_MODIFIER_SHIFT;
280 if(ECORE_EVENT_MODIFIER_CTRL & keyModifier)
282 modifier |= _KEY_MODIFIER_CTRL;
284 if(ECORE_EVENT_MODIFIER_ALT & keyModifier)
286 modifier |= _KEY_MODIFIER_ALT;
288 if(ECORE_EVENT_MODIFIER_WIN & keyModifier)
290 modifier |= _KEY_MODIFIER_WIN;
292 if(ECORE_EVENT_MODIFIER_SCROLL & keyModifier)
294 modifier |= _KEY_MODIFIER_SCROLL;
296 if(ECORE_EVENT_MODIFIER_NUM & keyModifier)
298 modifier |= _KEY_MODIFIER_NUM;
300 if(ECORE_EVENT_MODIFIER_CAPS & keyModifier)
302 modifier |= _KEY_MODIFIER_CAPS;
304 if(ECORE_EVENT_LOCK_SCROLL & keyModifier)
306 modifier |= _KEY_LOCK_SCROLL;
308 if(ECORE_EVENT_LOCK_NUM & keyModifier)
310 modifier |= _KEY_LOCK_NUM;
312 if(ECORE_EVENT_LOCK_CAPS & keyModifier)
314 modifier |= _KEY_LOCK_CAPS;
316 if(ECORE_EVENT_LOCK_SHIFT & keyModifier)
318 modifier |= _KEY_LOCK_SHIFT;
320 if(ECORE_EVENT_MODIFIER_ALTGR & keyModifier)
322 modifier |= _KEY_MODIFIER_ALTGR;
329 _KeyEvent(const _KeyEvent& rhs);
330 _KeyEvent& operator =(const _KeyEvent& rhs);
332 virtual result SendImpl(void)
334 SysTryReturn(NID_UI, __pTarget, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
336 _UiKeyEvent event(__pTarget->GetHandle(), __keyInfo);
338 return _pEventManager->SendEvent(event);
341 _Control* GetTarget(_KeyCode keyCode) const
343 _KeyEventManager* pKeyEventManager = _KeyEventManager::GetInstance();
344 SysTryReturn(NID_UI, pKeyEventManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
346 _Control* pControl = pKeyEventManager->GetCapturingControl(keyCode);
348 if (pControl == null)
350 _ControlManager* pControlManager = _ControlManager::GetInstance();
351 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
353 pControl = pControlManager->GetFocusedControl();
357 pControl = pControlManager->GetCurrentFrame();
359 SysTryReturn(NID_UI, pControl, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
362 _ControlManager* pControlManager = _ControlManager::GetInstance();
363 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
365 pControl = pControlManager->GetFocusedControl();
368 pControl = pControlManager->GetCurrentFrame();
370 SysTryReturn(NID_UI, pControl, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
372 SetLastResult(E_SUCCESS);
382 class _TouchEventManager
385 static _TouchEventManager* GetInstance(void)
387 if (__pInstance == null)
389 __pInstance = new (std::nothrow) _TouchEventManager;
390 SysTryReturn(NID_UI, __pInstance, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
393 SetLastResult(E_SUCCESS);
398 result AddControl(int pointId, const _ControlHandle& controlHandle)
401 result r = E_SUCCESS;
403 __pTargetMap->ContainsKey(pointId, exist);
407 r = __pTargetMap->Remove(pointId);
408 SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
411 r = __pTargetMap->Add(pointId, controlHandle);
412 SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
417 _Control* GetControl(int pointId)
419 SysTryReturn(NID_UI, __pTargetMap, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
421 _ControlHandle controlHandle;
423 __pTargetMap->GetValue(pointId, controlHandle);
425 _ControlManager* pControlManager = _ControlManager::GetInstance();
426 result r = GetLastResult();
427 SysTryReturn(NID_UI, pControlManager, null, r, "[%s] Propagating.", GetErrorMessage(r));
429 return pControlManager->GetObject(controlHandle);
432 result AddParentControl(int pointId, const _ControlHandle& controlHandle)
435 result r = E_SUCCESS;
437 __pParentTargetMap->ContainsKey(pointId, exist);
441 r = __pParentTargetMap->Remove(pointId);
442 SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
445 r = __pParentTargetMap->Add(pointId, controlHandle);
446 SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
451 _Control* GetParentControl(int pointId)
453 SysTryReturn(NID_UI, __pParentTargetMap, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
455 _ControlHandle controlHandle;
457 __pParentTargetMap->GetValue(pointId, controlHandle);
459 _ControlManager* pControlManager = _ControlManager::GetInstance();
460 result r = GetLastResult();
461 SysTryReturn(NID_UI, pControlManager, null, r, "[%s] Propagating.", GetErrorMessage(r));
463 return pControlManager->GetObject(controlHandle);
467 _TouchEventManager(void)
469 result r = E_SUCCESS;
470 unique_ptr<HashMapT<int, _ControlHandle> > pTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
471 SysTryReturnVoidResult(NID_UI, pTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
473 r = pTargetMap->Construct();
474 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
476 __pTargetMap = move(pTargetMap);
478 unique_ptr<HashMapT<int, _ControlHandle> > pParentTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
479 SysTryReturnVoidResult(NID_UI, pParentTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
481 r = pParentTargetMap->Construct();
482 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
484 __pParentTargetMap = move(pParentTargetMap);
486 SetLastResult(E_SUCCESS);
489 ~_TouchEventManager(void)
493 _TouchEventManager(const _TouchEventManager& rhs);
494 _TouchEventManager& operator =(const _TouchEventManager& rhs);
497 static _TouchEventManager* __pInstance;
498 unique_ptr<HashMapT<int, _ControlHandle> > __pTargetMap;
499 unique_ptr<HashMapT<int, _ControlHandle> > __pParentTargetMap;
502 _TouchEventManager* _TouchEventManager::__pInstance = null;
508 _TouchEvent(int deviceId, _TouchStatus status, int x, int y, unsigned int timeStamp, const _Control* pRootControl)
509 : __pTouchEventManager(null)
511 __pTouchEventManager = _TouchEventManager::GetInstance();
512 SysTryReturnVoidResult(NID_UI, __pTouchEventManager, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
514 result r = E_SUCCESS;
515 Tizen::Graphics::Point current(x, y);
517 _TouchManager* pTouchManager = _TouchManager::GetInstance();
518 SysTryReturnVoidResult(NID_UI, pTouchManager, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
520 unsigned int pointId = 0;
522 if (status == _TOUCH_PRESSED)
524 IListT<_FingerInfo*>* pFingerInfoList = pTouchManager->GetMultiFingerInfoListN();
525 SysTryReturnVoidResult(NID_UI, pFingerInfoList, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
527 const int count = pFingerInfoList->GetCount();
529 for (int i = 0; i < count; i++)
531 _FingerInfo* pFingerInfo = null;
532 pFingerInfoList->GetAt(i, pFingerInfo);
533 if (pFingerInfo == null)
538 if (static_cast<int>(pFingerInfo->GetDeviceId()) == deviceId && pFingerInfo->GetStatus() == _TOUCH_PRESSED)
540 pTouchManager->ResetTouchInfo();
541 SysLog(NID_UI, "ResetTouchInfo x(%d), y(%d), deviceID(%d), pointID(%d)", current.x, current.y, deviceId, pFingerInfo->GetPointId());
545 delete pFingerInfoList;
547 pointId = pTouchManager->GeneratePointId(deviceId);
551 pointId = pTouchManager->GetPointId(deviceId);
554 if (pointId == INVALID_POINT_ID)
556 SetLastResult(E_INVALID_CONDITION);
562 r = GetPosition(status, x, y, current);
563 SysTryReturnVoidResult(NID_UI, r != E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] A system error occurred.");
564 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
568 current = _CoordinateSystemUtils::InverseTransform(current);
571 __touchInfo.SetTouchInfo(pointId, status, current, false, timeStamp);
573 if (status == _TOUCH_PRESSED)
575 _Control* pControl = GetTarget(current.x, current.y, pRootControl);
577 if (pControl == null)
579 pTouchManager->ResetTouchInfo();
580 SysLog(NID_UI, "ResetTouchInfo x(%d), y(%d), deviceID(%d), pointID(%d)", current.x, current.y, deviceId, pointId);
581 SysTryReturnVoidResult(NID_UI, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
585 r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
586 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
588 _Control* pParent = pControl->GetParent();
591 r = __pTouchEventManager->AddParentControl(pointId, pParent->GetHandle());
592 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
598 _Control* pControl = pTouchManager->GetChangedTouchableTarget();
599 if (pControl == null)
605 if (pControl->GetChangingEventTarget() == true && pControl->GetVisibleState() == true)
607 r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
608 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
614 virtual ~_TouchEvent(void)
619 virtual result SendImpl(void)
621 _Control* pTarget = __pTouchEventManager->GetControl(__touchInfo.GetPointId());
624 _TouchManager* pTouchManager = _TouchManager::GetInstance();
625 pTouchManager->ResetTouchInfo();
627 SysLog(NID_UI, "ResetTouchInfo");
631 _UiTouchEvent event(pTarget->GetHandle(), __touchInfo);
633 return _pEventManager->SendEvent(event);
637 _TouchEvent(const _TouchEvent& rhs);
638 _TouchEvent& operator =(const _TouchEvent& rhs);
640 _Control* GetTarget(int x, int y, const _Control* pRootControl) const
644 _TouchManager* pTouchManager = _TouchManager::GetInstance();
645 SysTryReturn(NID_UI, pTouchManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
647 _Control* pCapturedControl = pTouchManager->GetCapturedControl();
648 _Control* pControl = null;
650 if (pCapturedControl)
652 if (pTouchManager->IsCaptureAllowedOwnerBounds())
654 if (pTouchManager->IsCaptureAllowedOutOfBounds())
656 pControl = pCapturedControl;
659 _Window * pWindow = dynamic_cast<_Window*>(pCapturedControl);
662 _Control* pOwner = pWindow->GetOwner();
665 Tizen::Graphics::Rectangle ownerRc(pOwner->GetAbsoluteBounds());
666 if ((x >= ownerRc.x) && (x <= (ownerRc.x + ownerRc.width)) && (y >= ownerRc.y) && (y <= (ownerRc.y + ownerRc.height)))
673 Tizen::Graphics::Rectangle rc(pCapturedControl->GetAbsoluteBounds());
674 if ((x >= rc.x) && (x <= (rc.x + rc.width)) && (y >= rc.y) && (y <= (rc.y + rc.height)))
676 pControl = pCapturedControl;
681 if (pTouchManager->IsCaptureAllowedOutOfBounds())
683 pControl = pCapturedControl;
687 Tizen::Graphics::Rectangle rc(pCapturedControl->GetAbsoluteBounds());
689 if ((x < rc.x) || (x > (rc.x + rc.width)) || (y < rc.y) || (y > (rc.y + rc.height)))
691 pControl = pCapturedControl;
696 if (pControl != null)
702 _ControlManager* pControlManager = _ControlManager::GetInstance();
703 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
705 Tizen::Graphics::FloatPoint ptf(static_cast<float>(x), static_cast<float>(y));
707 _ControlVisualElement* pRootControlElement = null;
710 pRootControlElement = dynamic_cast<_ControlVisualElement*>(pRootControl->GetVisualElement());
714 _Window* pWindow = null;
715 pWindow = pControlManager->GetTouchedWindow();
716 SysTryReturn(NID_UI, pWindow, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
718 Rectangle winBounds = pWindow->GetBounds();
720 ptf.x = static_cast<float>(x - winBounds.x);
721 ptf.y = static_cast<float>(y - winBounds.y);
723 pRootControlElement = dynamic_cast <_ControlVisualElement*>(pWindow->GetVisualElement());
726 SysTryReturn(NID_UI, pRootControlElement, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
728 _ControlVisualElement* pControlVisualElement = pRootControlElement->GetControlChildAtPoint(ptf);
729 SysTryReturn(NID_UI, pControlVisualElement, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
731 pControl = static_cast <_Control*>(pControlVisualElement->GetUserData());
732 SysTryReturn(NID_UI, pControl, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
737 result GetPosition(_TouchStatus status, int x, int y, Point& point) const
739 result r = E_SUCCESS;
741 _ControlManager* pControlManager = _ControlManager::GetInstance();
742 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
744 _Window* pWindow = pControlManager->GetTouchedWindow();
745 SysTryReturn(NID_UI, pWindow, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] A system error occurred.");
747 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
748 SysTryReturn(NID_UI, pRootVE, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
750 _EflLayer* pLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
751 SysTryReturn(NID_UI, pLayer, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
753 Ecore_Evas* pEE = pLayer->GetEcoreEvas();
754 SysTryReturn(NID_UI, pEE, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
756 const int PORTRAIT = 0;
757 const int LANDSCAPE = 270;
758 const int PORTRAIT_REVERSE = 180;
759 const int LANDSCAPE_REVERSE = 90;
761 Dimension dimension = pControlManager->GetScreenSize();
762 Point output(_CoordinateSystemUtils::InverseTransform(point));
763 int rotation = ecore_evas_rotation_get(pEE);
774 point.y = dimension.width - output.x;
777 case PORTRAIT_REVERSE:
778 point.x = dimension.width - output.x;
779 point.y = dimension.height - output.y;
782 case LANDSCAPE_REVERSE:
783 point.x = dimension.height - output.y;
788 SysAssertf(0, "[E_SYSTEM][%d]", rotation);
797 _TouchInfo __touchInfo;
798 _TouchEventManager* __pTouchEventManager;
802 OnNotified(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
806 _UiEvent* pUiEvent = static_cast <_UiEvent*>(pEventInfo);
807 SysTryReturn(NID_UI, pUiEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
809 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
810 SysTryReturn(NID_UI, pEventManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
812 result r = pEventManager->SendEvent(*pUiEvent);
813 SysTryReturn(NID_UI, r == E_SUCCESS, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
816 SetLastResult(E_SUCCESS);
818 return ECORE_CALLBACK_PASS_ON;
822 FreeEvent(void* pData __UNUSED__, void* pEventInfo)
824 _UiEvent* pUiEvent = static_cast <_UiEvent*>(pEventInfo);
832 OnKeyPressed(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
834 Ecore_Event_Key* pEv = static_cast <Ecore_Event_Key*>(pEventInfo);
835 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
837 //SysLog(NID_UI, "OnKeyPressed(%s, %d)", pEv->keyname, pEv->modifiers);
838 _KeyEvent event(KEY_PRESSED, _KeyEvent::GetKeyCode(pEv->keyname), _KeyEvent::GetKeyModifier(pEv->modifiers), pEv);
839 SysLog(NID_UI, "KeyName = %s, KeyCode = %d, KeyModifier = %x", pEv->keyname, _KeyEvent::GetKeyCode(pEv->keyname), _KeyEvent::GetKeyModifier(pEv->modifiers));
842 SetLastResult(E_SUCCESS);
844 return ECORE_CALLBACK_PASS_ON;
848 OnKeyReleased(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
850 Ecore_Event_Key* pEv = static_cast <Ecore_Event_Key*>(pEventInfo);
851 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
853 //SysLog(NID_UI, "OnKeyReleased(%s, %d)", pEv->keyname, pEv->modifiers);
854 _KeyEvent event(KEY_RELEASED, _KeyEvent::GetKeyCode(pEv->keyname), _KeyEvent::GetKeyModifier(pEv->modifiers), pEv);
855 SysLog(NID_UI, "KeyName = %s, KeyCode = %d, KeyModifier = %x", pEv->keyname, _KeyEvent::GetKeyCode(pEv->keyname), _KeyEvent::GetKeyModifier(pEv->modifiers));
858 SetLastResult(E_SUCCESS);
860 return ECORE_CALLBACK_PASS_ON;
864 OnClipboardMessageReceived(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
866 Ecore_X_Event_Client_Message *pEv = static_cast<Ecore_X_Event_Client_Message*>(pEventInfo);
868 if (pEv->message_type != ecore_x_atom_get("CBHM_MSG"))
870 return ECORE_CALLBACK_PASS_ON;
873 if (!strcmp("SET_OWNER", pEv->data.b))
875 _KeyEvent event(KEY_PRESSED, _KEY_OEM_1, 0, pEv);
876 SysLog(NID_UI, "KeyName = clipboard, KeyCode = _KEY_OEM_1, KeyModifier = 0");
879 SetLastResult(E_SUCCESS);
882 return ECORE_CALLBACK_PASS_ON;
887 OnTouchPressed(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
889 Ecore_Event_Mouse_Button* pEv = static_cast <Ecore_Event_Mouse_Button*>(pEventInfo);
890 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
892 _ControlManager* pControlManager = _ControlManager::GetInstance();
893 SysTryReturn(NID_UI, pControlManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
895 pControlManager->SetTouchedWindow((unsigned int)pEv->window);
899 SysLog(NID_UI, "OnTouchPressed - x(%d), y(%d), deviceId(%d)", pEv->root.x, pEv->root.y, pEv->multi.device);
900 _TouchEvent event(pEv->multi.device, _TOUCH_PRESSED, pEv->root.x, pEv->root.y, pEv->timestamp, null);
902 result r = GetLastResult();
905 SysLog(NID_UI, "[%s] Propagating.", GetErrorMessage(r));
906 return ECORE_CALLBACK_PASS_ON;
911 SetLastResult(E_SUCCESS);
913 return ECORE_CALLBACK_PASS_ON;
917 OnTouchReleased(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
919 Ecore_Event_Mouse_Button* pEv = static_cast <Ecore_Event_Mouse_Button*>(pEventInfo);
920 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
924 _TouchManager* pTouchManager = _TouchManager::GetInstance();
925 SysTryReturn(NID_UI, pTouchManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] _TouchManager does not exist.");
927 SysLog(NID_UI, "OnTouchReleased - x(%d), y(%d), deviceId(%d)", pEv->root.x, pEv->root.y, pEv->multi.device);
928 _TouchEvent event(pEv->multi.device, _TOUCH_RELEASED, pEv->root.x, pEv->root.y, pEv->timestamp, null);
930 result r = GetLastResult();
933 SysLog(NID_UI, "ResetTouchInfo [%s] Propagating.", GetErrorMessage(r));
934 pTouchManager->SetTouchAllowed(false);
935 pTouchManager->ResetTouchInfo();
937 return ECORE_CALLBACK_PASS_ON;
942 IListT<_FingerInfo*>* pFingerInfoList = pTouchManager->GetMultiFingerInfoListN();
943 SysTryReturn(NID_UI, pFingerInfoList, ECORE_CALLBACK_PASS_ON, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
945 int count = pFingerInfoList->GetCount();
947 for (int i = 0; i < count; i++)
949 _FingerInfo* pFingerInfo = null;
950 pFingerInfoList->GetAt(i, pFingerInfo);
951 if (pFingerInfo == null)
956 if (static_cast<int>(pFingerInfo->GetDeviceId()) == pEv->multi.device)
958 pFingerInfo->SetPointId(INVALID_POINT_ID);
962 delete pFingerInfoList;
964 pTouchManager->SetChangedTouchableTarget(null);
966 SetLastResult(E_SUCCESS);
967 return ECORE_CALLBACK_PASS_ON;
971 OnTouchMoved(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
973 Ecore_Event_Mouse_Move* pEv = static_cast <Ecore_Event_Mouse_Move*>(pEventInfo);
974 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
976 SysLog(NID_UI, "OnTouchMoved - x(%d), y(%d), deviceId(%d)", pEv->root.x, pEv->root.y, pEv->multi.device);
977 _TouchEvent event(pEv->multi.device, _TOUCH_MOVED, pEv->root.x, pEv->root.y, pEv->timestamp, null);
979 result r = GetLastResult();
982 return ECORE_CALLBACK_PASS_ON;
987 SetLastResult(E_SUCCESS);
989 return ECORE_CALLBACK_PASS_ON;
993 OnKeyboardInserted(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
995 Ecore_X_Event_Window_Property *pEv = static_cast <Ecore_X_Event_Window_Property*>(pEventInfo);
996 if ( pEv->atom != keyboardExist)
998 // SysLog(NID_UI, "OnKeyboardInserted - atom of event(%d), keyboardExist(%d)", pEv->atom, keyboardExist);
999 return ECORE_CALLBACK_PASS_ON;
1002 ArrayList* pArgs = null;
1003 result r = E_SUCCESS;
1004 Boolean* pIsKeyboardOn = null;
1005 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
1006 SysTryReturn(NID_UI, pEventManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1008 _Control* pControl = _ControlManager::GetInstance()->GetFocusedControl();
1009 SysTryReturn(NID_UI, pControl, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1011 bool isKeyboardOn = false;
1012 unsigned int value = 0;
1013 int returnResult = -1;
1015 returnResult = ecore_x_window_prop_card32_get(pEv->win, keyboardExist, &value, 1);
1020 isKeyboardOn = true;
1023 pArgs = new (std::nothrow) ArrayList;
1024 SysTryReturn(NID_UI, pArgs, ECORE_CALLBACK_PASS_ON, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1026 r = pArgs->Construct();
1027 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1029 String* pString = new (std::nothrow) String(KEYBOARD_INSERTED_EVENT);
1030 r = pArgs->Add(*pString);
1031 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1033 pIsKeyboardOn = new (std::nothrow) Boolean(isKeyboardOn);
1034 r = pArgs->Add(*pIsKeyboardOn);
1035 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1037 _UiNotificationEvent event(pControl->GetHandle(), pArgs);
1038 r = pEventManager->SendEvent(event);
1039 // SysLog(NID_UI, "OnKeyboardInserted - sent keyboard inserted noti");
1044 return ECORE_CALLBACK_PASS_ON;
1054 delete pIsKeyboardOn;
1057 return ECORE_CALLBACK_PASS_ON;
1061 OnWindowFocusIn(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
1063 SysLog(NID_UI, "Enter");
1065 Ecore_X_Event_Window_Focus_In* pEv = static_cast<Ecore_X_Event_Window_Focus_In*>(pEventInfo);
1066 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1068 _ControlManager* pControlManager = _ControlManager::GetInstance();
1069 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1071 int count = pControlManager->GetWindowCount();
1073 _Control* pFocusedControl = null;
1074 for (int i = count - 1; i >= 0; --i)
1076 _Window* pWindow = pControlManager->GetWindow(i);
1079 NativeWindowHandle nativeWindowHandle = pWindow->GetNativeHandle();
1080 if (pEv->win == nativeWindowHandle)
1082 pFocusedControl = pWindow->GetFocused();
1083 if (pFocusedControl)
1085 pFocusedControl->SetFocused();
1092 return ECORE_CALLBACK_PASS_ON;
1096 OnWindowFocusOut(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
1098 SysLog(NID_UI, "Enter");
1100 Ecore_X_Event_Window_Focus_Out* pEv = static_cast<Ecore_X_Event_Window_Focus_Out*>(pEventInfo);
1101 SysTryReturn(NID_UI, pEv, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1103 _ControlManager* pControlManager = _ControlManager::GetInstance();
1104 SysTryReturn(NID_UI, pControlManager, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1106 _Control* pFocusedControl = pControlManager->GetFocusedControl();
1107 if (pFocusedControl)
1109 _Window* pRootWindow = pFocusedControl->GetRootWindow();
1112 NativeWindowHandle nativeWindowHandle = pRootWindow->GetNativeHandle();
1113 if (pEv->win == nativeWindowHandle)
1115 pControlManager->TakeFocusFromControl(*pFocusedControl);
1120 return ECORE_CALLBACK_PASS_ON;
1125 OnEvasKeyPressed(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1127 Evas_Event_Key_Down* pEv = static_cast <Evas_Event_Key_Down*>(pEventInfo);
1128 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1130 SetLastResult(E_SUCCESS);
1134 OnEvasKeyReleased(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1136 Evas_Event_Key_Up* pEv = static_cast <Evas_Event_Key_Up*>(pEventInfo);
1137 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1139 SetLastResult(E_SUCCESS);
1143 OnEvasTouchPressed(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1145 Evas_Event_Mouse_Down* pEv = static_cast <Evas_Event_Mouse_Down*>(pEventInfo);
1146 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1148 _Control* pControl = static_cast<_Control*>(pData);
1149 SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1151 SysLog(NID_UI, "OnEvasTouchPressed - x(%d), y(%d)", pEv->canvas.x, pEv->canvas.y);
1152 _TouchEvent event(0, _TOUCH_PRESSED, pEv->canvas.x, pEv->canvas.y, pEv->timestamp, pControl);
1154 result r = GetLastResult();
1157 SysLog(NID_UI, "[%s] Propagating.", GetErrorMessage(r));
1163 SetLastResult(E_SUCCESS);
1167 OnEvasTouchReleased(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1169 Evas_Event_Mouse_Up* pEv = static_cast <Evas_Event_Mouse_Up*>(pEventInfo);
1170 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1172 _Control* pControl = static_cast<_Control*>(pData);
1173 SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1175 SysLog(NID_UI, "OnEvasTouchReleased - x(%d), y(%d)", pEv->canvas.x, pEv->canvas.y);
1176 _TouchEvent event(0, _TOUCH_RELEASED, pEv->canvas.x, pEv->canvas.y, pEv->timestamp, pControl);
1178 result r = GetLastResult();
1181 SysLog(NID_UI, "[%s] Propagating.", GetErrorMessage(r));
1187 SetLastResult(E_SUCCESS);
1191 OnEvasTouchMoved(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1193 Evas_Event_Mouse_Move* pEv = static_cast <Evas_Event_Mouse_Move*>(pEventInfo);
1194 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1196 _Control* pControl = static_cast<_Control*>(pData);
1197 SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1199 SysLog(NID_UI, "OnEvasTouchMoved - x(%d), y(%d)", pEv->cur.canvas.x, pEv->cur.canvas.x);
1200 _TouchEvent event(0, _TOUCH_MOVED, pEv->cur.canvas.x, pEv->cur.canvas.y, pEv->timestamp, pControl);
1202 result r = GetLastResult();
1205 SysLog(NID_UI, "[%s] Propagating.", GetErrorMessage(r));
1211 SetLastResult(E_SUCCESS);
1215 OnEvasMultiTouchPressed(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1217 Evas_Event_Multi_Down* pEv = static_cast <Evas_Event_Multi_Down*>(pEventInfo);
1218 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1220 SetLastResult(E_SUCCESS);
1224 OnEvasMultiTouchReleased(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1226 Evas_Event_Multi_Up* pEv = static_cast <Evas_Event_Multi_Up*>(pEventInfo);
1227 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1229 SetLastResult(E_SUCCESS);
1233 OnEvasMultiTouchMoved(void* pData, Evas* pEvas, Evas_Object* pEvasObject, void* pEventInfo)
1235 Evas_Event_Multi_Move* pEv = static_cast <Evas_Event_Multi_Move*>(pEventInfo);
1236 SysTryReturnVoidResult(NID_UI, pEv, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
1238 SetLastResult(E_SUCCESS);
1243 namespace Tizen { namespace Ui
1246 _EflUiEventManager::_EflUiEventManager(void)
1247 : __notificaitonEventType(-1)
1249 unique_ptr<LinkedListT<Ecore_Event_Handler*> > pEventHandlers(new (std::nothrow) LinkedListT<Ecore_Event_Handler*>);
1250 SysTryReturnVoidResult(NID_UI, pEventHandlers, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1253 __notificaitonEventType = ecore_event_type_new();
1254 SysTryReturnVoidResult(NID_UI, __notificaitonEventType >= 1, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1256 Ecore_Event_Handler* pEventHandler = ecore_event_handler_add(__notificaitonEventType, OnNotified, null);
1257 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1259 pEventHandlers->Add(pEventHandler);
1262 pEventHandler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, OnKeyPressed, null);
1263 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1265 pEventHandlers->Add(pEventHandler);
1267 pEventHandler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, OnKeyReleased, null);
1268 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1270 pEventHandlers->Add(pEventHandler);
1273 pEventHandler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClipboardMessageReceived, null);
1274 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1276 pEventHandlers->Add(pEventHandler);
1279 pEventHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, OnTouchPressed, null);
1280 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1282 pEventHandlers->Add(pEventHandler);
1284 pEventHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, OnTouchReleased, null);
1285 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1287 pEventHandlers->Add(pEventHandler);
1289 pEventHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_MOVE, OnTouchMoved, null);
1290 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1292 pEventHandlers->Add(pEventHandler);
1295 pEventHandler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, OnKeyboardInserted, null);
1296 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1298 pEventHandlers->Add(pEventHandler);
1301 pEventHandler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, OnWindowFocusIn, null);
1302 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1304 pEventHandlers->Add(pEventHandler);
1306 pEventHandler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, OnWindowFocusOut, null);
1307 SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1309 pEventHandlers->Add(pEventHandler);
1311 __pEventHandlers = move(pEventHandlers);
1313 keyboardExist = XInternAtom(static_cast<Display*>(ecore_x_display_get()), "X External Keyboard Exist", 0);
1315 SetLastResult(E_SUCCESS);
1318 _EflUiEventManager::~_EflUiEventManager(void)
1320 Tizen::Base::Collection::IEnumeratorT<Ecore_Event_Handler*>* pEnumerator = __pEventHandlers->GetEnumeratorN();
1321 SysTryReturnVoidResult(NID_UI, pEnumerator, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
1323 while (pEnumerator->MoveNext() == E_SUCCESS)
1325 Ecore_Event_Handler* pEventHandler = null;
1326 pEnumerator->GetCurrent(pEventHandler);
1329 ecore_event_handler_del(pEventHandler);
1337 _EflUiEventManager::RegisterKeyEventHandler(const _Control& control)
1339 result r = E_SUCCESS;
1341 Evas_Object* pEvasObject = GetEvasObject(control);
1342 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1344 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_KEY_UP, OnEvasKeyReleased, &control);
1345 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_KEY_DOWN, OnEvasKeyPressed, &control);
1351 _EflUiEventManager::RegisterTouchEventHandler(const _Control& control)
1353 result r = E_SUCCESS;
1355 Evas_Object* pEvasObject = GetEvasObject(control);
1356 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1358 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MOUSE_UP, OnEvasTouchReleased, &control);
1359 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MOUSE_DOWN, OnEvasTouchPressed, &control);
1360 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MOUSE_MOVE, OnEvasTouchMoved, &control);
1362 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MULTI_UP, OnEvasMultiTouchReleased, &control);
1363 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MULTI_DOWN, OnEvasMultiTouchPressed, &control);
1364 evas_object_event_callback_add(pEvasObject, EVAS_CALLBACK_MULTI_MOVE, OnEvasMultiTouchMoved, &control);
1370 _EflUiEventManager::UnregisterKeyEventHandler(const _Control& control)
1372 result r = E_SUCCESS;
1374 Evas_Object* pEvasObject = GetEvasObject(control);
1375 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1377 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_KEY_UP, OnEvasKeyReleased);
1378 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_KEY_DOWN, OnEvasKeyPressed);
1384 _EflUiEventManager::UnregisterTouchEventHandler(const _Control& control)
1386 result r = E_SUCCESS;
1388 Evas_Object* pEvasObject = GetEvasObject(control);
1389 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1391 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MOUSE_UP, OnEvasTouchReleased);
1392 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MOUSE_DOWN, OnEvasTouchPressed);
1393 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MOUSE_MOVE, OnEvasTouchMoved);
1395 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MULTI_UP, OnEvasMultiTouchReleased);
1396 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MULTI_DOWN, OnEvasMultiTouchPressed);
1397 evas_object_event_callback_del(pEvasObject, EVAS_CALLBACK_MULTI_MOVE, OnEvasMultiTouchMoved);
1403 _EflUiEventManager::PostEvent(const _UiEvent& event)
1407 result r = E_SUCCESS;
1409 _UiEvent* pEvent = event.CloneN();
1410 SysTryReturn(NID_UI, pEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1412 Ecore_Event* pEcoreEvent = ecore_event_add(__notificaitonEventType, pEvent, FreeEvent, null);
1413 SysTryReturn(NID_UI, pEcoreEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1419 _EflUiEventManager::SetKeyCapture(const _Control& control, _KeyCode keyCode)
1421 Ecore_X_Window win = ecore_evas_software_x11_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(GetEvasObject(control))));
1423 for (unsigned int i = 0; i < sizeof(keyTable) / sizeof(_EvasConvertKeys); ++i)
1425 if (keyTable[i].code == keyCode)
1427 if (keyTable[i].pName)
1429 utilx_grab_key((Display*)ecore_x_display_get(), win, keyTable[i].pName, TOP_POSITION_GRAB);
1437 _EflUiEventManager::ReleaseKeyCapture(const _Control& control, _KeyCode keyCode)
1439 Ecore_X_Window win = ecore_evas_software_x11_window_get(ecore_evas_ecore_evas_get(evas_object_evas_get(GetEvasObject(control))));
1441 for (unsigned int i = 0; i < sizeof(keyTable) / sizeof(_EvasConvertKeys); ++i)
1443 if (keyTable[i].code == keyCode)
1445 if (keyTable[i].pName)
1447 utilx_ungrab_key((Display*)ecore_x_display_get(), win, keyTable[i].pName);