// Open Service Platform
// Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
//
-// Licensed under the Flora License, Version 1.0 (the License);
+// Licensed under the Apache License, Version 2.0 (the License);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
-// http://floralicense.org/license/
+// http://www.apache.org/licenses/LICENSE-2.0/
//
// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
+// distributed under the License is distributed on an ”AS IS” BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
return pControlManager->GetObject(controlHandle);
}
+ result AddParentControl(int pointId, const _ControlHandle& controlHandle)
+ {
+ bool exist = false;
+ result r = E_SUCCESS;
+
+ __pParentTargetMap->ContainsKey(pointId, exist);
+
+ if (exist)
+ {
+ r = __pParentTargetMap->Remove(pointId);
+ SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+ }
+
+ r = __pParentTargetMap->Add(pointId, controlHandle);
+ SysTryReturnResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ return r;
+ }
+
+ _Control* GetParentControl(int pointId)
+ {
+ SysTryReturn(NID_UI, __pParentTargetMap, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ _ControlHandle controlHandle;
+
+ __pParentTargetMap->GetValue(pointId, controlHandle);
+
+ _ControlManager* pControlManager = _ControlManager::GetInstance();
+ result r = GetLastResult();
+ SysTryReturn(NID_UI, pControlManager, null, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ return pControlManager->GetObject(controlHandle);
+ }
+
private:
_TouchEventManager(void)
{
+ result r = E_SUCCESS;
unique_ptr<HashMapT<int, _ControlHandle> > pTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
SysTryReturnVoidResult(NID_UI, pTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
- result r = pTargetMap->Construct();
+ r = pTargetMap->Construct();
SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
__pTargetMap = move(pTargetMap);
+ unique_ptr<HashMapT<int, _ControlHandle> > pParentTargetMap(new (std::nothrow) HashMapT<int, _ControlHandle>);
+ SysTryReturnVoidResult(NID_UI, pParentTargetMap, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
+
+ r = pParentTargetMap->Construct();
+ SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
+
+ __pParentTargetMap = move(pParentTargetMap);
+
SetLastResult(E_SUCCESS);
}
private:
static _TouchEventManager* __pInstance;
unique_ptr<HashMapT<int, _ControlHandle> > __pTargetMap;
+ unique_ptr<HashMapT<int, _ControlHandle> > __pParentTargetMap;
};
_TouchEventManager* _TouchEventManager::__pInstance = null;
continue;
}
- if (pFingerInfo->GetDeviceId() == deviceId && pFingerInfo->GetStatus() == _TOUCH_PRESSED)
+ if (static_cast<int>(pFingerInfo->GetDeviceId()) == deviceId && pFingerInfo->GetStatus() == _TOUCH_PRESSED)
{
pTouchManager->ResetTouchInfo();
SysLog(NID_UI, "ResetTouchInfo x(%d), y(%d), deviceID(%d), pointID(%d)", current.x, current.y, deviceId, pFingerInfo->GetPointId());
{
pTouchManager->ResetTouchInfo();
SysLog(NID_UI, "ResetTouchInfo x(%d), y(%d), deviceID(%d), pointID(%d)", current.x, current.y, deviceId, pointId);
- ClearLastResult();
+ SysTryReturnVoidResult(NID_UI, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
}
else
{
r = __pTouchEventManager->AddControl(pointId, pControl->GetHandle());
SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ _Control* pParent = pControl->GetParent();
+ if (pParent)
+ {
+ r = __pTouchEventManager->AddParentControl(pointId, pParent->GetHandle());
+ SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+ }
}
}
else
pControl = pCapturedControl;
}
- Tizen::Graphics::Rectangle ownerRc((dynamic_cast<_Window*>(pCapturedControl)->GetOwner())->GetAbsoluteBounds());
- if ((x >= ownerRc.x) && (x <= (ownerRc.x + ownerRc.width)) && (y >= ownerRc.y) && (y <= (ownerRc.y + ownerRc.height)))
+ _Window * pWindow = dynamic_cast<_Window*>(pCapturedControl);
+ if (pWindow)
{
- pControl = dynamic_cast<_Window*>(pCapturedControl)->GetOwner();
+ _Control* pOwner = pWindow->GetOwner();
+ if (pOwner)
+ {
+ Tizen::Graphics::Rectangle ownerRc(pOwner->GetAbsoluteBounds());
+ if ((x >= ownerRc.x) && (x <= (ownerRc.x + ownerRc.width)) && (y >= ownerRc.y) && (y <= (ownerRc.y + ownerRc.height)))
+ {
+ pControl = pOwner;
+ }
+ }
}
Tizen::Graphics::Rectangle rc(pCapturedControl->GetAbsoluteBounds());
}
Eina_Bool
+OnClipboardMessageReceived(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
+{
+ Ecore_X_Event_Client_Message *pEv = static_cast<Ecore_X_Event_Client_Message*>(pEventInfo);
+
+ if (pEv->message_type != ecore_x_atom_get("CBHM_MSG"))
+ {
+ return ECORE_CALLBACK_PASS_ON;
+ }
+
+ if (!strcmp("SET_OWNER", pEv->data.b))
+ {
+ _KeyEvent event(KEY_PRESSED, _KEY_OEM_1, 0, pEv);
+ SysLog(NID_UI, "KeyName = clipboard, KeyCode = _KEY_OEM_1, KeyModifier = 0");
+ event.Send();
+
+ SetLastResult(E_SUCCESS);
+ }
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+
+Eina_Bool
OnTouchPressed(void* pData __UNUSED__, int type __UNUSED__, void* pEventInfo)
{
Ecore_Event_Mouse_Button* pEv = static_cast <Ecore_Event_Mouse_Button*>(pEventInfo);
result r = GetLastResult();
if (r!= E_SUCCESS)
{
- SysLogException(NID_UI, E_SUCCESS, "ResetTouchInfo");
+ SysLog(NID_UI, "ResetTouchInfo [%s] Propagating.", GetErrorMessage(r));
pTouchManager->SetTouchAllowed(false);
pTouchManager->ResetTouchInfo();
continue;
}
- if (pFingerInfo->GetDeviceId() == pEv->multi.device)
- {
+ if (static_cast<int>(pFingerInfo->GetDeviceId()) == pEv->multi.device)
+ {
pFingerInfo->SetPointId(INVALID_POINT_ID);
break;
}
}
delete pFingerInfoList;
+ pTouchManager->SetChangedTouchableTarget(null);
+
SetLastResult(E_SUCCESS);
return ECORE_CALLBACK_PASS_ON;
}
_Control* pControl = static_cast<_Control*>(pData);
SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
+ SysLog(NID_UI, "OnEvasTouchPressed - x(%d), y(%d)", pEv->canvas.x, pEv->canvas.y);
_TouchEvent event(0, _TOUCH_PRESSED, pEv->canvas.x, pEv->canvas.y, pEv->timestamp, pControl);
result r = GetLastResult();
_Control* pControl = static_cast<_Control*>(pData);
SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
+ SysLog(NID_UI, "OnEvasTouchReleased - x(%d), y(%d)", pEv->canvas.x, pEv->canvas.y);
_TouchEvent event(0, _TOUCH_RELEASED, pEv->canvas.x, pEv->canvas.y, pEv->timestamp, pControl);
result r = GetLastResult();
_Control* pControl = static_cast<_Control*>(pData);
SysTryReturnVoidResult(NID_UI, pControl, E_INVALID_ARG, "[E_INVALID_ARG] The argument is invalid.");
+ SysLog(NID_UI, "OnEvasTouchMoved - x(%d), y(%d)", pEv->cur.canvas.x, pEv->cur.canvas.x);
_TouchEvent event(0, _TOUCH_MOVED, pEv->cur.canvas.x, pEv->cur.canvas.y, pEv->timestamp, pControl);
result r = GetLastResult();
pEventHandlers->Add(pEventHandler);
+ // clipboard key
+ pEventHandler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClipboardMessageReceived, null);
+ SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
+
+ pEventHandlers->Add(pEventHandler);
+
// Touch
pEventHandler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, OnTouchPressed, null);
SysTryReturnVoidResult(NID_UI, pEventHandler, E_SYSTEM, "[E_SYSTEM] A system error occurred.");