2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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_EcoreEvas.cpp
19 * @brief This is the implementation file for the _EcoreEvas class.
23 #include <runtime_info.h>
25 #include <X11/Xatom.h>
27 #include <Elementary.h>
28 #include <FGrpRectangle.h>
29 #include <FGrpFloatRectangle.h>
30 #include <FBaseInteger.h>
31 #include <FBaseErrors.h>
32 #include <FBaseSysLog.h>
33 #include <FBaseRtThread.h>
34 #include <FApp_IActiveWindowEventListener.h>
35 #include <FGrp_CanvasImpl.h>
36 #include "FUi_CoordinateSystemUtils.h"
37 #include "FUi_EcoreEvas.h"
38 #include "FUi_EcoreEvasMgr.h"
39 #include "FUi_Control.h"
41 #include "FUi_UiNotificationEvent.h"
42 #include "FUi_UiEventManager.h"
43 #include "FUi_Window.h"
44 #include "FUiAnim_EflLayer.h"
45 #include "FUiAnim_EflNode.h"
46 #include "FUiAnim_VisualElement.h"
47 #include "FUi_AccessibilityGesture.h"
48 #include "FUi_AccessibilitySystemSettingLoader.h"
49 #include "FUiAnim_RootVisualElement.h"
50 #include "FUiAnim_DisplayManager.h"
51 #include "FUiCtrl_Frame.h"
52 // #include "FUiCtrl_NotificationFrame.h"
53 #include "FUi_Clipboard.h"
54 #include "FUi_TouchManager.h"
55 #include "FUi_ControlManager.h"
56 #include "FUi_ActiveWindowEvent.h"
57 #include "FUi_ControlImplManager.h"
59 using namespace Tizen::Base;
60 using namespace Tizen::Base::Runtime;
61 using namespace Tizen::App;
62 using namespace Tizen::Graphics;
63 using namespace Tizen::Ui;
64 using namespace Tizen::Ui::Animations;
65 using namespace Tizen::Ui::Controls;
67 #define ATOM_CBHM_WINDOW_NAME "CBHM_XWIN"
68 #define ATOM_CBHM_MSG "CBHM_MSG"
69 #define ATOM_CBHM_COUNT_GET "CBHM_cCOUNT"
70 #define ATOM_CBHM_SERIAL_NUMBER "CBHM_SERIAL_NUMBER"
71 #define ATOM_CBHM_ERROR "CBHM_ERROR"
72 #define ATOM_CBHM_ITEM "CBHM_ITEM"
73 #define ATOM_CBHM_SET_ITEM "SET_ITEM"
74 #define ATOM_CBHM_CLIPBOARD_SHOW_ALL "show1"
75 #define ATOM_CBHM_CLIPBOARD_SHOW "show0"
76 #define ATOM_CBHM_CLIPBOARD_HIDE "cbhm_hide"
77 #define ATOM_CBHM_SELECTED_ITEM "CBHM_SELECTED_ITEM"
79 namespace Tizen { namespace Ui
81 static _EcoreEvas* _pEvas = null;
87 Ecore_X_Atom __atomRotateRootAngle = 0;
88 Ecore_X_Atom __atomAccessibility = 0;
91 OnWindowDeleted(void* pData, Evas* pE, Evas_Object* pObj, void* pEventInfo)
96 OnPropertyChanged(void* pData, int type, void* pEvent)
98 SysLog(NID_UI, "This callback is called.");
102 SysLog(NID_UI, "The data is not valid.");
108 SysLog(NID_UI, "The event is not valid.");
112 Ecore_X_Event_Window_Property* pE = (Ecore_X_Event_Window_Property*) pEvent;
114 Ecore_X_Atom atom = pE->atom;
115 Ecore_X_Atom activeAtom = ecore_x_atom_get("_NET_ACTIVE_WINDOW");
117 if (atom != activeAtom)
119 return ECORE_CALLBACK_PASS_ON;
122 Ecore_X_Window win = pE->win;
124 Ecore_X_Window activeWin = 0;
125 ecore_x_window_prop_window_get(win, activeAtom, &activeWin, 1);
128 Eina_Bool ret = ecore_x_netwm_pid_get(activeWin, &pid);
129 if (ret != EINA_TRUE)
131 return ECORE_CALLBACK_PASS_ON;
134 char* pAppName = null;
135 ecore_x_netwm_name_get(activeWin, &pAppName);
137 _EcoreEvas* pEcoreEvas = static_cast<_EcoreEvas*>(pData);
138 pEcoreEvas->FireActiveWindowEvent(activeWin, pid, pAppName);
145 return ECORE_CALLBACK_PASS_ON;
149 OnVisibilityChanged(void* pData, int type, void* pEvent)
151 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
152 SysTryReturn(NID_UI, pEvent, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
154 #if !defined(MULTI_WINDOW)
155 _EcoreEvas* pEcoreEvas = static_cast<_EcoreEvas*>(pData);
156 Ecore_Evas* pEcore_Evas = pEcoreEvas->GetEcoreEvas();
157 SysTryReturn(NID_UI, pEcore_Evas, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
159 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcore_Evas);
161 Ecore_X_Event_Window_Visibility_Change* pE = (Ecore_X_Event_Window_Visibility_Change*) pEvent;
163 Tizen::Base::Collection::ArrayList* pArgs = null;
164 String* pType = null;
165 Integer* pObscured = null;
167 if (window == pE->win)
169 const _Control* pDestination = pEcoreEvas->GetFrame();
170 SysTryReturn(NID_UI, pDestination, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
172 pArgs = new (std::nothrow) Tizen::Base::Collection::ArrayList;
173 SysTryReturn(NID_UI, pArgs, EINA_FALSE, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
175 result r = pArgs->Construct();
176 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
178 pType = new (std::nothrow) String(L"VisibilityEvent");
179 r = pArgs->Add(*pType);
180 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
182 pObscured = new (std::nothrow) Integer(pE->fully_obscured);
183 r = pArgs->Add(*pObscured);
184 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
186 _UiNotificationEvent event(pDestination->GetHandle(), pArgs);
188 r = _UiEventManager::GetInstance()->SendEvent(event);
191 Ecore_X_Event_Window_Visibility_Change* pE = (Ecore_X_Event_Window_Visibility_Change*) pEvent;
192 _ControlManager* pControlManager = _ControlManager::GetInstance();
194 int count = pControlManager->GetWindowCount();
196 _Window* pWindow = null;
197 Ecore_X_Window window = 0;
200 for (int i = 0; i < count; i++)
202 pWindow = pControlManager->GetWindow(i);
205 SysLog(NID_UI, "The efl layer is null.");
209 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
212 SysLog(NID_UI, "The efl layer is null.");
216 _EflLayer* pEflLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
219 SysLog(NID_UI, "The efl layer is null.");
223 window = (Ecore_X_Window)ecore_evas_window_get(pEflLayer->GetEcoreEvas());
225 if (window == pE->win)
232 Tizen::Base::Collection::ArrayList* pArgs = null;
233 String* pType = null;
234 Integer* pObscured = null;
238 const _Control* pDestination = pWindow;
240 pArgs = new (std::nothrow) Tizen::Base::Collection::ArrayList;
241 SysTryReturn(NID_UI, pArgs, EINA_FALSE, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
243 result r = pArgs->Construct();
244 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
246 pType = new (std::nothrow) String(L"VisibilityEvent");
247 r = pArgs->Add(*pType);
248 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
250 pObscured = new (std::nothrow) Integer(pE->fully_obscured);
251 r = pArgs->Add(*pObscured);
252 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
254 _UiNotificationEvent event(pDestination->GetHandle(), pArgs);
256 r = _UiEventManager::GetInstance()->SendEvent(event);
260 return ECORE_CALLBACK_RENEW;
263 pArgs->RemoveAll(true);
280 OnAutoRotationChanged(runtime_info_key_e key, void* pUserData)
282 if (key != RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED)
287 bool autoRotationLock = false;
288 int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED, &autoRotationLock);
290 if (ret != RUNTIME_INFO_ERROR_NONE)
292 SysLog(NID_UI, "It's failed to get the flag of auto-rotation.");
298 if (autoRotationLock == false)
300 angle = app_get_device_orientation();
303 _ControlImplManager* pControlImplManager = _ControlImplManager::GetInstance();
304 if (pControlImplManager)
306 pControlImplManager->OnScreenRotated(angle);
310 OnAccessibilitySettingMessageReceived(void* pData, int type, void* pEvent)
312 Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
313 if (pClientEvent->message_type == __atomAccessibility)
315 if((Eina_Bool)pClientEvent->data.l[0])
317 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
318 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
319 SysLog(NID_UI, "Accessibility Screen reader is activated.");
324 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
325 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
326 SysLog(NID_UI, "Accessibility Screen reader is deactivated.");
329 return ECORE_CALLBACK_PASS_ON;
334 OnClientMessageReceived(void* pData, int type, void* pEvent)
336 Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
337 SysTryReturn(NID_UI, pClientEvent, ECORE_CALLBACK_RENEW, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
339 if (pClientEvent->message_type == __atomRotateRootAngle)
341 int angle = pClientEvent->data.l[0];
343 _ControlManager* pControlManager = _ControlManager::GetInstance();
344 SysTryReturn(NID_UI, pControlManager, ECORE_CALLBACK_RENEW, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
346 pControlManager->OnWindowRotated(angle);
349 if (pClientEvent->message_type == ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL)
353 if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT)
355 SysLog(NID_UI, "Accessibility action : Move next");
356 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_DOWN);
358 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV)
360 SysLog(NID_UI, "Accessibility action : Move previous");
361 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_UP);
363 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE)
365 SysLog(NID_UI, "Accessibility action : Activate");
366 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_ONE_FINGER_DOUBLE_TAP);
368 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ)
370 x = (Evas_Coord)pClientEvent->data.l[2];
371 y = (Evas_Coord)pClientEvent->data.l[3];
372 SysLog(NID_UI, "Accessibility action : Read");
373 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_ONE_FINGER_ONE_TAP, x, y);
375 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP)
377 SysLog(NID_UI, "Accessibility action : value increased");
378 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_VALUE_INCREASED);
380 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN)
382 SysLog(NID_UI, "Accessibility action : value decreased");
383 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_VALUE_DECREASED);
387 return ECORE_CALLBACK_RENEW;
400 _CLIP_TYPE_SECONDARY,
401 _CLIP_TYPE_CLIPBOARD,
408 Ecore_X_Selection selection;
409 Eina_Bool (* set)(Ecore_X_Window window, const void* pData, int size);
410 Eina_Bool (* clear)(void);
411 void (* request)(Ecore_X_Window window, const char* pTarget);
417 _ClipFormat requestedFormat;
418 char* pRetrievedBuffer;
423 typedef Eina_Bool (*ClipConverter)(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
424 typedef int (*ClipResponseHandler)(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
425 typedef int (*ClipNotifyHandler)(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
431 _ATOM_LISTING_ATOMS = _ATOM_ATOM,
445 _ATOM_TEXT_HTML_UTF8,
450 _ATOM_TEXT_PLAIN_UTF8,
459 ClipConverter convert;
460 ClipResponseHandler response;
461 ClipNotifyHandler notify;
465 Eina_Bool ClearClip(void* pData __UNUSED__, int type, void* pEvent);
466 Eina_Bool NotifyClip(void* pData __UNUSED__, int type, void* pEvent);
468 Eina_Bool ConvertClipIntoTarget(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
469 Eina_Bool ConvertClipIntoText(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
470 Eina_Bool ConvertClipIntoHtml(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
471 Eina_Bool ConvertClipIntoEdje(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
472 Eina_Bool ConvertClipIntoUri(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
473 Eina_Bool ConvertClipIntoImage(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
474 Eina_Bool ConvertClipIntoVCard(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
476 int NotifyTarget(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
477 int NotifyText(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
478 int NotifyImage(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
479 int NotifyUri(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
480 int NotifyEdje(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
481 int NotifyHtml(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
483 int RequestClip(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
485 _Atom __atomList[_ATOM_MAX];
486 _Clip __clipList[_CLIP_TYPE_MAX];
489 ClearClip(void* pData __UNUSED__, int type __UNUSED__, void* pEvent)
491 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
493 Ecore_X_Event_Selection_Clear* pE = (Ecore_X_Event_Selection_Clear*) pEvent;
494 Ecore_X_Window window = pE->win;
496 _ClipType clipType = _CLIP_TYPE_SECONDARY;
497 __clipList[clipType].requestedFormat = (_ClipFormat)(_CLIP_FORMAT_TEXT|_CLIP_FORMAT_IMAGE);
499 ecore_x_selection_secondary_request(window, ECORE_X_SELECTION_TARGET_TARGETS);
501 return ECORE_CALLBACK_PASS_ON;
505 ConvertClipIntoTarget(char* pTarget __UNUSED__, void* pData, int size__UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize)
510 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
511 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
512 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
513 SysTryReturn(NID_UI, pType, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
514 SysTryReturn(NID_UI, pTypeSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
516 int index = *((int*) pData);
517 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
520 for (int i = 0; i < _ATOM_MAX; i++)
522 if (__clipList[index].format & __atomList[i].formats)
526 // Make the atom list to be possible to return data.
527 Ecore_X_Atom* pAtoms = null;
530 pAtoms = (Ecore_X_Atom*) malloc(sizeof(Ecore_X_Atom) * count);
531 SysTryReturn(NID_UI, pAtoms, EINA_FALSE, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
533 for (int i = 0, count = 0; i < _ATOM_MAX; i++)
535 if (__clipList[index].format & __atomList[i].formats)
536 pAtoms[count++] = __atomList[i].atom;
543 *pType = ECORE_X_ATOM_ATOM;
550 ConvertClipIntoText(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
552 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
553 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
554 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
556 int index = *((int*) pData);
557 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
558 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
560 if (__clipList[index].format & _CLIP_FORMAT_TEXT)
562 *outData = strdup(__clipList[index].pBuffer);
563 *outSize = strlen(__clipList[index].pBuffer);
570 ConvertClipIntoHtml(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
572 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
573 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
574 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
576 int index = *((int*) pData);
577 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
578 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
580 if (__clipList[index].format & _CLIP_FORMAT_HTML)
582 *outData = strdup(__clipList[index].pBuffer);
583 *outSize = strlen(__clipList[index].pBuffer);
590 ConvertClipIntoEdje(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
596 ConvertClipIntoUri(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
598 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
599 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
600 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
602 int index = *((int*) pData);
603 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
604 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
606 if (__clipList[index].format & _CLIP_FORMAT_IMAGE)
608 *outData = strdup(__clipList[index].pBuffer);
609 *outSize = strlen(__clipList[index].pBuffer);
616 ConvertClipIntoImage(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData __UNUSED__, int* outSize __UNUSED__, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
622 ConvertClipIntoVCard(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData __UNUSED__, int* outSize __UNUSED__, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
628 RequestClip(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
634 OnClipboardClosed(void* pData __UNUSED__, int type, void* pEvent)
636 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
638 _Clipboard* pClipboard = _Clipboard::GetInstance();
641 bool visible = pClipboard->IsPopupVisible();
645 pClipboard->FireEvent(0, null);
649 return ECORE_CALLBACK_PASS_ON;
653 NotifyClip(void* pData __UNUSED__, int type, void* pEvent)
655 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
657 Ecore_X_Event_Selection_Notify* pE = (Ecore_X_Event_Selection_Notify*) pEvent;
660 for (i = 0; i < _CLIP_TYPE_MAX; i++)
662 if (__clipList[i].selection == pE->selection)
668 SysTryReturn(NID_UI, i < _CLIP_TYPE_MAX, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
670 _Clip* pClip = __clipList + i;
671 for (i = 0; i < _ATOM_MAX; i++)
673 if (!strcmp(pE->target, __atomList[i].pName))
675 if (__atomList[i].notify)
677 __atomList[i].notify(pClip, pE);
682 return ECORE_CALLBACK_PASS_ON;
686 NotifyTarget(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
688 SysTryReturn(NID_UI, pClip, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
689 SysTryReturn(NID_UI, pNotify, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
691 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
692 SysTryReturn(NID_UI, pEcoreEvas, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
694 #if !defined(MULTI_WINDOW)
695 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas->GetEcoreEvas());
697 _ControlManager* pControlManager = _ControlManager::GetInstance();
698 SysTryReturn(NID_UI, pControlManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
700 _Window* pWindow = pControlManager->GetCurrentFrame();
701 SysTryReturn(NID_UI, pWindow, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
703 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
704 SysTryReturn(NID_UI, pRootVE, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
706 _EflLayer* pLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
707 SysTryReturn(NID_UI, pLayer, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
709 Ecore_Evas* pEE = pLayer->GetEcoreEvas();
710 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEE);
713 Ecore_X_Atom dataType = 0;
714 char* pBuffer = null;
716 if (pEcoreEvas->GetSelectedCbhmItem(&dataType, &pBuffer))
720 const char* pHtmlAtomName = "text/html;charset=utf-8";
721 Ecore_X_Atom htmlType = ecore_x_atom_get(pHtmlAtomName);
723 if (dataType == htmlType)
725 pClip->request(window, pHtmlAtomName);
726 return ECORE_CALLBACK_PASS_ON;
730 Ecore_X_Selection_Data_Targets* pTargets = (Ecore_X_Selection_Data_Targets*) (pNotify->data);
731 Ecore_X_Atom* pAtomList = (Ecore_X_Atom*) (pTargets->data.data);
734 for (j = (_ATOM_LISTING_ATOMS+1); j < _ATOM_MAX; j++)
736 SysLog(NID_UI, "[Clipboard] __atomList[%d].atom = %d", j, __atomList[j].atom);
738 if (!(__atomList[j].formats & pClip->requestedFormat))
743 for (i = 0; i < pTargets->data.length; i++)
745 SysLog(NID_UI, "[Clipboard] pAtomList[%d] = %d", i, pAtomList[i]);
747 if ((__atomList[j].atom == pAtomList[i]) && (__atomList[j].notify))
749 if ((j == _ATOM_XELM) && (!(pClip->requestedFormat & _CLIP_FORMAT_MARKUP)))
754 SysLog(NID_UI, "[Clipboard] go to __atomList[%d].atom = %d", j, __atomList[j].atom);
760 return ECORE_CALLBACK_PASS_ON;
763 pClip->request(window, __atomList[j].pName);
764 return ECORE_CALLBACK_PASS_ON;
768 NotifyText(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
770 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
771 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
773 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
774 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
776 pClip->bufferLength = (int) pData->length;
778 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
781 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
782 pStr[pClip->bufferLength] = '\0';
786 SysLog(NID_UI, "[Clipboard] pStr is null.");
790 pClip->pRetrievedBuffer = pStr;
792 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_TEXT, pClip->pRetrievedBuffer);
798 NotifyImage(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
800 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
801 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
803 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
804 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
806 pClip->bufferLength = (int) pData->length;
808 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
811 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
812 pStr[pClip->bufferLength] = '\0';
816 SysLog(NID_UI, "[Clipboard] pStr is null.");
820 pClip->pRetrievedBuffer = pStr;
822 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_IMAGE, pClip->pRetrievedBuffer);
828 NotifyUri(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
830 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
831 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
833 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
834 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
836 pClip->bufferLength = (int) pData->length;
838 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
841 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
842 pStr[pClip->bufferLength] = '\0';
846 SysLog(NID_UI, "[Clipboard] pStr is null.");
850 pClip->pRetrievedBuffer = pStr;
852 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_IMAGE, pClip->pRetrievedBuffer);
858 NotifyEdje(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
860 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
861 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
863 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
864 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
866 pClip->bufferLength = (int) pData->length;
868 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
871 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
872 pStr[pClip->bufferLength] = '\0';
876 SysLog(NID_UI, "[Clipboard] pStr is null.");
880 pClip->pRetrievedBuffer = pStr;
882 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_TEXT, pClip->pRetrievedBuffer);
888 NotifyHtml(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
890 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
891 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
893 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
894 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
896 pClip->bufferLength = (int) pData->length;
898 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
901 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
902 pStr[pClip->bufferLength] = '\0';
906 SysLog(NID_UI, "[Clipboard] pStr is null.");
910 pClip->pRetrievedBuffer = pStr;
912 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_HTML, pClip->pRetrievedBuffer);
918 namespace Tizen { namespace Ui
922 _EcoreEvas::CreateInstanceN(void)
924 _EcoreEvas* pEcoreEvas = new (std::nothrow) _EcoreEvas;
925 SysTryReturn(NID_UI, pEcoreEvas, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
927 result r = GetLastResult();
928 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
930 SetLastResult(E_SUCCESS);
939 _EcoreEvas::_EcoreEvas(void)
941 , __pForegroundWindow(null)
943 , __pXWindowVisibility(null)
944 , __pClientMessageHandler(null)
946 , __pNotifyClip(null)
947 , __pClipboardClosed(null)
948 , __pWindowPropertyChanged(null)
949 , __pActiveWindowEvent(null)
953 , __changeBounds(true)
954 , __openClipboard(false)
956 #if !defined(MULTI_WINDOW)
958 result r = GetLastResult();
959 SysTryReturnVoidResult(NID_UI, __pForegroundWindow, r, "[%s] Propagating.", GetErrorMessage(r));
964 r = SetIndicatorShowState(true);
965 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
967 evas_object_event_callback_add(__pForegroundWindow, EVAS_CALLBACK_DEL, OnWindowDeleted, NULL);
968 SysTryCatch(NID_UI, evas_alloc_error() == EVAS_ALLOC_ERROR_NONE, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
970 __pXWindowVisibility = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, OnVisibilityChanged, (void*) this);
971 SysTryCatch(NID_UI, __pXWindowVisibility, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
973 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClientMessageReceived, NULL);
975 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
976 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnAccessibilitySettingMessageReceived, NULL);
977 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
981 GetEcoreEvasMgr()->SetEcoreEvas(*this);
983 r = InitializeAtomList();
984 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
987 //ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED, OnAutoRotationChanged, NULL);
988 //SysTryCatch(NID_UI, ret == 0, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
990 SetLastResult(E_SUCCESS);
995 evas_object_del(__pForegroundWindow);
996 __pForegroundWindow = null;
998 if (__pXWindowVisibility)
1000 ecore_event_handler_del(__pXWindowVisibility);
1001 __pXWindowVisibility = null;
1004 if (__pClientMessageHandler)
1006 ecore_event_handler_del(__pClientMessageHandler);
1007 __pClientMessageHandler = null;
1010 __pXWindowVisibility = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, OnVisibilityChanged, (void*) this);
1011 SysTryReturnVoidResult(NID_UI, __pXWindowVisibility, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1013 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClientMessageReceived, NULL);
1015 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
1016 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnAccessibilitySettingMessageReceived, NULL);
1017 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
1021 GetEcoreEvasMgr()->SetEcoreEvas(*this);
1026 result r = InitializeAtomList();
1027 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1030 //ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED, OnAutoRotationChanged, NULL);
1031 //SysTryCatch(NID_UI, ret == 0, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1033 SetLastResult(E_SUCCESS);
1038 if (__pXWindowVisibility)
1040 ecore_event_handler_del(__pXWindowVisibility);
1041 __pXWindowVisibility = null;
1046 _EcoreEvas::~_EcoreEvas(void)
1048 if (__pXWindowVisibility)
1050 ecore_event_handler_del(__pXWindowVisibility);
1051 __pXWindowVisibility = null;
1054 if (__pClientMessageHandler)
1056 ecore_event_handler_del(__pClientMessageHandler);
1057 __pClientMessageHandler = null;
1060 for (int i = 0; i < _ATOM_MAX; i++)
1062 if (__atomList[i].atom)
1064 ecore_x_selection_converter_atom_del(__atomList[i].atom);
1070 ecore_event_handler_del(__pClearClip);
1071 __pClearClip = null;
1076 ecore_event_handler_del(__pNotifyClip);
1077 __pNotifyClip = null;
1080 if (__pClipboardClosed)
1082 ecore_event_handler_del(__pClipboardClosed);
1083 __pClipboardClosed = null;
1086 if (__pWindowPropertyChanged)
1088 ecore_event_handler_del(__pWindowPropertyChanged);
1089 __pWindowPropertyChanged = null;
1092 if (__pActiveWindowEvent)
1094 delete __pActiveWindowEvent;
1095 __pActiveWindowEvent = null;
1106 //runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED);
1110 _EcoreEvas::RotateWindow(int orientation)
1112 bool rotatePartial = false;
1114 if (GetFloatingMode() == true)
1116 rotatePartial = true;
1119 _Frame* pFrame = dynamic_cast<_Frame*>(const_cast<_Control*>(GetFrame()));
1122 FrameShowMode showMode = pFrame->GetShowMode();
1123 if (showMode != FRAME_SHOW_MODE_FULL_SCREEN)
1125 rotatePartial = true;
1131 ecore_x_window_size_get(ecore_x_window_root_get(GetXWindow()), &rootW, &rootH);
1133 if (rotatePartial == false)
1135 ecore_evas_rotation_with_resize_set(GetEcoreEvas(), orientation);
1137 evas_object_move(__pForegroundWindow, 0, 0);
1139 if ((orientation == 0) || (orientation == 180))
1141 evas_object_resize(__pForegroundWindow, rootW, rootH);
1145 evas_object_resize(__pForegroundWindow, rootH, rootW);
1150 ecore_evas_rotation_set(GetEcoreEvas(), orientation);
1157 Rectangle frameBounds = _CoordinateSystemUtils::Transform(pFrame->GetBounds());
1158 int rotate = ecore_evas_rotation_get(GetEcoreEvas());
1160 int winX = frameBounds.x;
1161 int winY = frameBounds.y;
1166 winX = rootW - frameBounds.y - frameBounds.height;
1167 winY = frameBounds.x;
1170 winX = frameBounds.y;
1171 winY = rootH - frameBounds.x - frameBounds.width;
1174 winX = rootW - frameBounds.x - frameBounds.width;
1175 winY = rootH - frameBounds.y - frameBounds.height;
1181 evas_object_move(__pForegroundWindow, winX, winY);
1182 evas_object_resize(__pForegroundWindow, frameBounds.width, frameBounds.height);
1184 SysLog(NID_UI, "The window is moved to (%d, %d) and is resized to (%d, %d) with %d degree by rotating screen." , winX, winY, frameBounds.width, frameBounds.height, rotate);
1189 _EcoreEvas::RotateWindow(const _Window& window, int orientation)
1191 _EflLayer* pLayer = GetEflLayer(window);
1198 bool rotatePartial = true;
1200 _Frame* pFrame = dynamic_cast<_Frame*>(const_cast<_Window*>(&window));
1203 FrameShowMode showMode = pFrame->GetShowMode();
1204 if (showMode == FRAME_SHOW_MODE_FULL_SCREEN)
1206 rotatePartial = false;
1210 #if defined(MULTI_WINDOW)
1211 _Window* pWindow = const_cast<_Window*>(&window);
1212 if (pWindow->IsLayoutChangable() == true)
1214 rotatePartial = false;
1218 Evas_Object* pWinObj = pLayer->GetElmWin();
1220 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1221 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1225 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
1227 if (rotatePartial == false)
1229 ecore_evas_rotation_with_resize_set(pEcoreEvas, orientation);
1231 evas_object_move(pWinObj, 0, 0);
1233 if ((orientation == 0) || (orientation == 180))
1235 evas_object_resize(pWinObj, rootW, rootH);
1239 evas_object_resize(pWinObj, rootH, rootW);
1244 ecore_evas_rotation_set(pEcoreEvas, orientation);
1246 Rectangle winBounds = _CoordinateSystemUtils::Transform(window.GetBounds());
1247 int rotate = ecore_evas_rotation_get(pEcoreEvas);
1249 int winX = winBounds.x;
1250 int winY = winBounds.y;
1255 winX = rootW - winBounds.y - winBounds.height;
1260 winY = rootH - winBounds.x - winBounds.width;
1263 winX = rootW - winBounds.x - winBounds.width;
1264 winY = rootH - winBounds.y - winBounds.height;
1270 evas_object_move(pWinObj, winX, winY);
1271 evas_object_resize(pWinObj, winBounds.width, winBounds.height);
1276 _EcoreEvas::GetEflLayer(const _Window& window) const
1278 _RootVisualElement* pRootVisualElement = null;
1280 #if !defined(MULTI_WINDOW)
1281 if (!window.IsSystemWindow())
1286 pRootVisualElement = (&window)->GetRootVisualElement();
1287 SysTryReturn(NID_UI, pRootVisualElement, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1289 pRootVisualElement = window.GetRootVisualElement();
1290 if (!pRootVisualElement)
1292 SysLog(NID_UI, "The root visual element is null.");
1297 _EflLayer* pEflLayer = static_cast<_EflLayer*>(pRootVisualElement->GetNativeLayer());
1300 SysLog(NID_UI, "The efl layer is null.");
1308 _EcoreEvas::GetFloatingMode(void) const
1310 SysTryReturn(NID_UI, __pForegroundWindow, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1312 Eina_Bool ret = elm_win_floating_mode_get(__pForegroundWindow);
1314 SetLastResult(E_SUCCESS);
1316 return (ret ? true : false);
1320 _EcoreEvas::GetFloatingMode(const _Window& window) const
1322 _EflLayer* pLayer = GetEflLayer(window);
1323 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1325 Evas_Object* pWinObj = pLayer->GetElmWin();
1326 SysTryReturn(NID_UI, pWinObj, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1328 Eina_Bool ret = elm_win_floating_mode_get(pWinObj);
1330 SetLastResult(E_SUCCESS);
1332 return (ret ? true : false);
1336 _EcoreEvas::AddActiveWindowEventListener(const _IActiveWindowEventListener& listener)
1338 result r = E_SUCCESS;
1340 if (__pActiveWindowEvent == null)
1342 __pActiveWindowEvent = _ActiveWindowEvent::CreateInstanceN();
1344 r = GetLastResult();
1345 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1348 r = __pActiveWindowEvent->AddListener(listener);
1349 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1353 Ecore_X_Window* pRoots = null;
1356 pRoots = ecore_x_window_root_list(&num);
1358 for (int i = 0; i < num; i++)
1360 Display* pDisplay = XOpenDisplay(NULL);
1361 XSelectInput(pDisplay, pRoots[i], PropertyChangeMask);
1364 if (!__pWindowPropertyChanged)
1366 __pWindowPropertyChanged = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, OnPropertyChanged, (void*) this);
1367 SysTryReturnVoidResult(NID_UI, __pWindowPropertyChanged, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1370 SetLastResult(E_SUCCESS);
1374 _EcoreEvas::RemoveActiveWindowEventListener(const _IActiveWindowEventListener& listener)
1376 SysTryReturnVoidResult(NID_UI, __pActiveWindowEvent, E_OBJ_NOT_FOUND, "The specified listener doesn't exist in the event listener list.");
1378 result r = __pActiveWindowEvent->RemoveListener(listener);
1379 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1385 ecore_event_handler_del(__pWindowPropertyChanged);
1386 __pWindowPropertyChanged = null;
1389 SetLastResult(E_SUCCESS);
1393 _EcoreEvas::FireActiveWindowEvent(unsigned int xid, int pid, char* pAppName)
1395 if (!__pActiveWindowEvent)
1400 IEventArg* pArg = _ActiveWindowEvent::CreateActiveWindowEventArgN(xid, pid, pAppName);
1401 result r = GetLastResult();
1402 SysTryReturnVoidResult(NID_UI, pArg, r, "[%s] Propagating.", GetErrorMessage(r));
1404 __pActiveWindowEvent->Fire(*pArg);
1408 _EcoreEvas::GetActiveWindow(void)
1410 Ecore_X_Window* pRoots = null;
1413 pRoots = ecore_x_window_root_list(&num);
1414 Ecore_X_Atom activeAtom = ecore_x_atom_get("_NET_ACTIVE_WINDOW");
1416 Ecore_X_Window activeWin = 0;
1417 ecore_x_window_prop_window_get(pRoots[0], activeAtom, &activeWin, 1);
1425 _EcoreEvas::GetProcessId(unsigned int window)
1428 Eina_Bool ret = ecore_x_netwm_pid_get(window, &pid);
1430 if (ret != EINA_TRUE)
1439 _EcoreEvas::SetOwner(NativeWindowHandle ownee, NativeWindowHandle owner)
1441 ecore_x_icccm_transient_for_unset(ownee);
1442 ecore_x_icccm_transient_for_set(ownee, owner);
1446 _EcoreEvas::ActivateWindow(const _Window& window)
1448 #if !defined(MULTI_WINDOW)
1449 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1450 result r = GetLastResult();
1451 SysTryReturnVoidResult(NID_UI, pEcoreEvas, r, "[%s] Propagating.", GetErrorMessage(r));
1453 _EflLayer* pLayer = GetEflLayer(window);
1454 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1456 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1457 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1460 ecore_evas_activate(pEcoreEvas);
1464 _EcoreEvas::SetRenderBackend(_RenderBackend backend)
1466 #if defined(MULTI_WINDOW)
1469 case _RENDER_BACKEND_SW:
1470 elm_config_preferred_engine_set("software_x11");
1472 case _RENDER_BACKEND_GL:
1473 elm_config_preferred_engine_set("opengl_x11");
1475 case _RENDER_BACKEND_DEFAULT:
1478 elm_config_preferred_engine_set(NULL);
1485 _EcoreEvas::GetRenderBackend(void)
1487 _RenderBackend backend = _RENDER_BACKEND_DEFAULT;
1489 const char* pEngine = elm_config_preferred_engine_get();
1491 if (pEngine == NULL)
1493 backend = _RENDER_BACKEND_DEFAULT;
1495 else if (strcmp(pEngine, "software_x11") == 0)
1497 backend = _RENDER_BACKEND_SW;
1499 else if (strcmp(pEngine, "opengl_x11") == 0)
1501 backend = _RENDER_BACKEND_GL;
1507 #if !defined(MULTI_WINDOW)
1509 _EcoreEvas::CopyClip(_ClipFormat format, const char* pChar)
1511 SysTryReturn(NID_UI, IsValidClipFormat(format), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data type is invalid.");
1512 SysTryReturn(NID_UI, pChar, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
1514 Ecore_X_Atom dataType = 0;
1518 case _CLIP_FORMAT_TEXT:
1519 dataType = ecore_x_atom_get("UTF8_STRING");
1521 case _CLIP_FORMAT_IMAGE:
1522 dataType = ecore_x_atom_get("text/uri");
1524 case _CLIP_FORMAT_HTML:
1525 dataType = ecore_x_atom_get("text/html;charset=utf-8");
1531 SetCbhmItem(GetXWindow(), dataType, (char*)pChar);
1537 _EcoreEvas::RetrieveClipN(int index, int* format, char** pData)
1539 Ecore_X_Atom dataType = 0;
1541 GetCbhmItem(index, &dataType, pData);
1543 if ((dataType == ecore_x_atom_get("UTF8_STRING")) || (dataType == ecore_x_atom_get("application/x-elementary-markup")))
1545 *format = _CLIP_FORMAT_TEXT;
1547 else if (dataType == ecore_x_atom_get("text/uri"))
1549 *format = _CLIP_FORMAT_IMAGE;
1551 else if (dataType == ecore_x_atom_get("text/html;charset=utf-8"))
1553 *format = _CLIP_FORMAT_HTML;
1565 _EcoreEvas::GetClipCount(void) const
1567 int count = GetCbhmItemCount();
1573 _EcoreEvas::OpenClipboard(unsigned long clipFormats)
1575 Ecore_X_Window window = GetXWindow();
1576 SysLog(NID_UI, "[Clipboard] window = 0x%x", window);
1578 ecore_x_selection_secondary_set(window, "", 1);
1580 if (_CLIP_FORMAT_IMAGE & clipFormats)
1582 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW_ALL);
1586 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW);
1589 __openClipboard = true;
1593 _EcoreEvas::CloseClipboard(void)
1595 __openClipboard = false;
1596 SendCbhmMessage(GetXWindow(), ATOM_CBHM_CLIPBOARD_HIDE);
1600 _EcoreEvas::IsClipboardOpened(void)
1602 return __openClipboard;
1606 _EcoreEvas::SetEventPropagation(const _Control& control, bool enable)
1608 // Get _EflNode of a control.
1609 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
1610 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1612 // Get a evas object.
1613 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
1614 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1616 // Set the propagation.
1617 evas_object_propagate_events_set(pEvasObject, (enable ? EINA_TRUE : EINA_FALSE));
1623 _EcoreEvas::SetFocus(const _Control& control, bool focus)
1625 // Get _EflNode of a control.
1626 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
1627 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1629 // Get a evas object.
1630 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
1631 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1634 evas_object_focus_set(pEvasObject, (focus ? EINA_TRUE : EINA_FALSE));
1640 _EcoreEvas::SetIndicatorShowState(bool showState)
1642 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1643 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1645 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1649 Ecore_X_Illume_Indicator_State state = ecore_x_e_illume_indicator_state_get(window);
1651 bool showState = true;
1652 if (state == ECORE_X_ILLUME_INDICATOR_STATE_OFF)
1657 ecore_x_e_illume_indicator_state_set(window, ECORE_X_ILLUME_INDICATOR_STATE_ON);
1659 _TouchManager* pTouchManager = _TouchManager::GetInstance();
1660 if (pTouchManager && showState == false)
1662 pTouchManager->ResetTouchInfo();
1667 ecore_x_e_illume_indicator_state_set(window, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
1674 _EcoreEvas::SetFrame(const _Control& control)
1676 __pFrame = const_cast<_Control*>(&control);
1680 _EcoreEvas::GetIndicatorShowState(void) const
1682 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1683 SysTryReturn(NID_UI, pEcoreEvas, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1685 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1688 Ecore_X_Illume_Indicator_State state = ecore_x_e_illume_indicator_state_get(window);
1691 bool showState = true;
1692 if (state == ECORE_X_ILLUME_INDICATOR_STATE_ON)
1696 else if (state == ECORE_X_ILLUME_INDICATOR_STATE_OFF)
1705 _EcoreEvas::GetIndicatorBounds(void) const
1707 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1708 SysTryReturn(NID_UI, pEcoreEvas, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1710 // Get a root window.
1711 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1712 Ecore_X_Window rootWindow = (Ecore_X_Window) ecore_x_window_root_get(window);
1714 // Get the bounds of a indicator.
1720 ret = ecore_x_e_illume_indicator_geometry_get(rootWindow, &x, &y, &width, &height);
1721 SysTryReturn(NID_UI, ret == true, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1723 SetLastResult(E_SUCCESS);
1725 return Rectangle(x, y, width, height);
1729 _EcoreEvas::SetIndicatorOpacity(_IndicatorOpacity opacity)
1731 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1732 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1734 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1737 Ecore_X_Illume_Indicator_Opacity_Mode mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1740 case _INDICATOR_OPACITY_UNKNOWN:
1741 mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1743 case _INDICATOR_OPACITY_OPAQUE:
1744 mode = ECORE_X_ILLUME_INDICATOR_OPAQUE;
1746 case _INDICATOR_OPACITY_TRANSLUCENT:
1747 mode = ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1749 case _INDICATOR_OPACITY_TRANSPARENT:
1750 mode = ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1753 SysLogException(NID_UI, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
1754 return E_INVALID_ARG;
1757 // Set the opacity of a indicator.
1758 ecore_x_e_illume_indicator_opacity_set(window, mode);
1764 _EcoreEvas::GetIndicatorOpacity(void) const
1766 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1767 SysTryReturn(NID_UI, pEcoreEvas, _INDICATOR_OPACITY_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1769 // Get the opacity of a indicator.
1770 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1771 Ecore_X_Illume_Indicator_Opacity_Mode mode = ecore_x_e_illume_indicator_opacity_get(window);
1774 _IndicatorOpacity opacity = _INDICATOR_OPACITY_UNKNOWN;
1777 case ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN:
1778 opacity = _INDICATOR_OPACITY_UNKNOWN;
1780 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1781 opacity = _INDICATOR_OPACITY_OPAQUE;
1783 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1784 opacity = _INDICATOR_OPACITY_TRANSLUCENT;
1786 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1787 opacity = _INDICATOR_OPACITY_TRANSPARENT;
1790 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1791 return _INDICATOR_OPACITY_UNKNOWN;
1794 SetLastResult(E_SUCCESS);
1800 _EcoreEvas::SetFloatingMode(bool enable)
1802 SysTryReturn(NID_UI, __pForegroundWindow, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1804 elm_win_floating_mode_set(__pForegroundWindow, (enable ? EINA_TRUE : EINA_FALSE));
1810 _EcoreEvas::GetEvas(void) const
1816 _EcoreEvas::GetEcoreEvas(void) const
1818 Ecore_Evas* pEcoreEvas = ecore_evas_ecore_evas_get(__pEvas);
1819 SysTryReturn(NID_UI, pEcoreEvas, null, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1821 SetLastResult(E_SUCCESS);
1827 _EcoreEvas::GetWindowObject(void) const
1829 return __pForegroundWindow;
1833 _EcoreEvas::GetXWindow(void) const
1835 Ecore_Evas* pEcore_Evas = GetEcoreEvas();
1836 result r = GetLastResult();
1837 SysTryReturn(NID_UI, pEcore_Evas, 0, r, "[%s] Propagating.", GetErrorMessage(r));
1839 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEcore_Evas);
1841 SetLastResult(E_SUCCESS);
1847 _EcoreEvas::AllowSetWindowBounds(bool allow)
1849 __changeBounds = allow;
1853 _EcoreEvas::SetWindowLevel(_WindowLevel level)
1855 Ecore_X_Window window = GetXWindow();
1856 SysTryReturnVoidResult(NID_UI, window != 0, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1858 if (level == _WINDOW_LEVEL_NORMAL)
1860 ecore_x_netwm_window_type_set(window, ECORE_X_WINDOW_TYPE_NORMAL);
1862 else if (level == _WINDOW_LEVEL_NOTIFICATION_HIGH)
1864 ecore_x_netwm_window_type_set(window, ECORE_X_WINDOW_TYPE_NOTIFICATION);
1865 utilx_set_system_notification_level((Display*)ecore_x_display_get(), window, UTILX_NOTIFICATION_LEVEL_HIGH);
1867 else if (level == _WINDOW_LEVEL_NOTIFICATION_MIDDLE)
1869 ecore_x_netwm_window_type_set(window, ECORE_X_WINDOW_TYPE_NOTIFICATION);
1870 utilx_set_system_notification_level((Display*)ecore_x_display_get(), window, UTILX_NOTIFICATION_LEVEL_NORMAL);
1873 SetLastResult(E_SUCCESS);
1877 _EcoreEvas::GetWindowLevel(void) const
1879 Ecore_X_Window window = GetXWindow();
1880 SysTryReturn(NID_UI, window != 0, _WINDOW_LEVEL_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1882 Ecore_X_Window_Type type = ECORE_X_WINDOW_TYPE_UNKNOWN;
1883 ecore_x_netwm_window_type_get(window, &type);
1885 _WindowLevel winLevel = _WINDOW_LEVEL_UNKNOWN;
1886 if (type == ECORE_X_WINDOW_TYPE_NORMAL)
1888 winLevel = _WINDOW_LEVEL_NORMAL;
1890 else if (type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
1892 Utilx_Notification_Level notificationLevel = utilx_get_system_notification_level((Display*)ecore_x_display_get(), window);
1894 if (notificationLevel == UTILX_NOTIFICATION_LEVEL_HIGH)
1896 winLevel = _WINDOW_LEVEL_NOTIFICATION_HIGH;
1898 else if (notificationLevel == UTILX_NOTIFICATION_LEVEL_NORMAL)
1900 winLevel = _WINDOW_LEVEL_NOTIFICATION_MIDDLE;
1904 SetLastResult(E_SUCCESS);
1910 _EcoreEvas::SetWindowAlwaysOnTop(bool alwaysOnTop)
1912 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1913 result r = GetLastResult();
1914 SysTryReturnVoidResult(NID_UI, pEcoreEvas, r, "[%s] Propagating.", GetErrorMessage(r));
1916 if (alwaysOnTop == true)
1918 ecore_evas_layer_set(pEcoreEvas, 5);
1922 ecore_evas_layer_set(pEcoreEvas, 4);
1927 _EcoreEvas::SetWindowAlwaysAtBottom(bool alwaysAtBottom)
1929 Ecore_Evas* pEcoreEvas = GetEcoreEvas();
1930 result r = GetLastResult();
1931 SysTryReturnVoidResult(NID_UI, pEcoreEvas, r, "[%s] Propagating.", GetErrorMessage(r));
1933 if (alwaysAtBottom == true)
1935 ecore_evas_layer_set(pEcoreEvas, 3);
1939 ecore_evas_layer_set(pEcoreEvas, 4);
1944 _EcoreEvas::SetWindowBounds(const Rectangle& bounds)
1946 if (__changeBounds == false)
1951 // Decide between full and partial.
1952 bool partialScreen = false;
1954 if (GetFloatingMode() == true)
1956 partialScreen = true;
1959 _Frame* pFrame = dynamic_cast<_Frame*>(const_cast<_Control*>(GetFrame()));
1962 FrameShowMode showMode = pFrame->GetShowMode();
1963 if (showMode != FRAME_SHOW_MODE_FULL_SCREEN)
1965 partialScreen = true;
1971 ecore_x_window_size_get(ecore_x_window_root_get(GetXWindow()), &rootW, &rootH);
1973 int rotate = ecore_evas_rotation_get(GetEcoreEvas());
1975 if (partialScreen == false)
1977 // Resize full screen.
1978 evas_object_move(__pForegroundWindow, 0, 0);
1980 if ((rotate == 0) || (rotate == 180))
1982 evas_object_resize(__pForegroundWindow, rootW, rootH);
1986 evas_object_resize(__pForegroundWindow, rootH, rootW);
1991 // Resize partial screen.
1992 Evas_Object* pWinObject = GetWindowObject();
1993 SysTryReturnVoidResult(NID_UI, pWinObject, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1995 Rectangle winBounds = _CoordinateSystemUtils::Transform(bounds);
1997 int winX = winBounds.x;
1998 int winY = winBounds.y;
2003 winX = rootW - winBounds.y - winBounds.height;
2008 winY = rootH - winBounds.x - winBounds.width;
2011 winX = rootW - winBounds.x - winBounds.width;
2012 winY = rootH - winBounds.y - winBounds.height;
2018 evas_object_move(pWinObject, winX, winY);
2019 evas_object_resize(pWinObject, winBounds.width, winBounds.height);
2021 //SysLog(NID_UI, "The window is moved to (%d, %d) and is resized to (%d, %d) with %d degree by setting bounds." , winX, winY, winBounds.width, winBounds.height, rotate);
2025 Rectangle rectangle = GetIndicatorBounds();
2027 SetLastResult(E_SUCCESS);
2031 _EcoreEvas::SetWindowVisibleState(bool visibleState)
2033 Evas_Object* pWindowObject = GetWindowObject();
2034 SysTryReturnVoidResult(NID_UI, pWindowObject, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2038 evas_object_show(pWindowObject);
2042 evas_object_hide(pWindowObject);
2045 SetLastResult(E_SUCCESS);
2049 _EcoreEvas::GetFrame(void) const
2055 _EcoreEvas::GetRootVisualElement(void)const
2061 _EcoreEvas::CopyClip(_ClipFormat format, const char* pChar)
2063 SysTryReturn(NID_UI, IsValidClipFormat(format), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data type is invalid.");
2064 SysTryReturn(NID_UI, pChar, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
2066 Ecore_X_Atom dataType = 0;
2070 case _CLIP_FORMAT_TEXT:
2071 dataType = ecore_x_atom_get("UTF8_STRING");
2073 case _CLIP_FORMAT_IMAGE:
2074 dataType = ecore_x_atom_get("text/uri");
2076 case _CLIP_FORMAT_HTML:
2077 dataType = ecore_x_atom_get("text/html;charset=utf-8");
2083 _ControlManager* pControlManager = _ControlManager::GetInstance();
2085 _Window* pWindow = pControlManager->GetCurrentFrame();
2091 _EflLayer* pLayer = GetEflLayer(*pWindow);
2097 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2100 SetCbhmItem(window, dataType, (char*)pChar);
2106 _EcoreEvas::RetrieveClipN(int index, int* format, char** pData)
2108 Ecore_X_Atom dataType = 0;
2110 _ControlManager* pControlManager = _ControlManager::GetInstance();
2112 _Window* pWindow = pControlManager->GetCurrentFrame();
2118 _EflLayer* pLayer = GetEflLayer(*pWindow);
2124 GetCbhmItem(index, &dataType, pData);
2126 if ((dataType == ecore_x_atom_get("UTF8_STRING"))
2127 ||(dataType == ecore_x_atom_get("application/x-elementary-markup")))
2129 *format = _CLIP_FORMAT_TEXT;
2131 else if (dataType == ecore_x_atom_get("text/uri"))
2133 *format = _CLIP_FORMAT_IMAGE;
2135 else if (dataType == ecore_x_atom_get("text/html;charset=utf-8"))
2137 *format = _CLIP_FORMAT_HTML;
2149 _EcoreEvas::GetClipCount(void) const
2151 _ControlManager* pControlManager = _ControlManager::GetInstance();
2153 _Window* pWindow = pControlManager->GetCurrentFrame();
2159 _EflLayer* pLayer = GetEflLayer(*pWindow);
2165 int count = GetCbhmItemCount();
2171 _EcoreEvas::OpenClipboard(unsigned long clipFormats)
2173 _ControlManager* pControlManager = _ControlManager::GetInstance();
2175 _Window* pWindow = pControlManager->GetCurrentFrame();
2181 _EflLayer* pLayer = GetEflLayer(*pWindow);
2187 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2190 ecore_x_selection_secondary_set(window, "", 1);
2192 if (_CLIP_FORMAT_IMAGE & clipFormats)
2194 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW_ALL);
2198 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW);
2201 __openClipboard = true;
2205 _EcoreEvas::CloseClipboard(void)
2207 _ControlManager* pControlManager = _ControlManager::GetInstance();
2209 _Window* pWindow = pControlManager->GetCurrentFrame();
2215 _EflLayer* pLayer = GetEflLayer(*pWindow);
2221 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2224 __openClipboard = false;
2225 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_HIDE);
2229 _EcoreEvas::IsClipboardOpened(void)
2231 return __openClipboard;
2235 _EcoreEvas::SetEventPropagation(const _Control& control, bool enable)
2237 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
2238 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2240 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
2241 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2243 evas_object_propagate_events_set(pEvasObject, (enable ? EINA_TRUE : EINA_FALSE));
2249 _EcoreEvas::SetFocus(const _Control& control, bool focus)
2251 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
2252 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2254 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
2255 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2257 evas_object_focus_set(pEvasObject, (focus ? EINA_TRUE : EINA_FALSE));
2263 _EcoreEvas::SetIndicatorShowState(const _Window& window, bool showState)
2265 _EflLayer* pLayer = GetEflLayer(window);
2266 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2268 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2269 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2271 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2275 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
2279 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
2286 _EcoreEvas::GetIndicatorShowState(const _Window& window) const
2288 _EflLayer* pLayer = GetEflLayer(window);
2289 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2291 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2292 SysTryReturn(NID_UI, pEcoreEvas, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2294 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2295 Ecore_X_Illume_Indicator_State state = ecore_x_e_illume_indicator_state_get(win);
2297 bool showState = true;
2298 if (state == ECORE_X_ILLUME_INDICATOR_STATE_ON)
2302 else if (state == ECORE_X_ILLUME_INDICATOR_STATE_OFF)
2311 _EcoreEvas::GetIndicatorBounds(const _Window& window) const
2313 _EflLayer* pLayer = GetEflLayer(window);
2314 SysTryReturn(NID_UI, pLayer, Rectangle(0, 0, 0, 0), E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2316 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2317 SysTryReturn(NID_UI, pEcoreEvas, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2319 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2320 Ecore_X_Window rootWin = (Ecore_X_Window) ecore_x_window_root_get(win);
2328 ret = ecore_x_e_illume_indicator_geometry_get(rootWin, &x, &y, &width, &height);
2329 SysTryReturn(NID_UI, ret == true, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2331 SetLastResult(E_SUCCESS);
2333 return Rectangle(x, y, width, height);
2337 _EcoreEvas::SetIndicatorOpacity(const _Window& window, _IndicatorOpacity opacity)
2339 _EflLayer* pLayer = GetEflLayer(window);
2340 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2342 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2343 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2345 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2347 Ecore_X_Illume_Indicator_Opacity_Mode mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
2350 case _INDICATOR_OPACITY_UNKNOWN:
2351 mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
2353 case _INDICATOR_OPACITY_OPAQUE:
2354 mode = ECORE_X_ILLUME_INDICATOR_OPAQUE;
2356 case _INDICATOR_OPACITY_TRANSLUCENT:
2357 mode = ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
2359 case _INDICATOR_OPACITY_TRANSPARENT:
2360 mode = ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
2363 SysLogException(NID_UI, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
2364 return E_INVALID_ARG;
2367 ecore_x_e_illume_indicator_opacity_set(win, mode);
2373 _EcoreEvas::GetIndicatorOpacity(const _Window& window) const
2375 _EflLayer* pLayer = GetEflLayer(window);
2376 SysTryReturn(NID_UI, pLayer, _INDICATOR_OPACITY_UNKNOWN, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2378 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2379 SysTryReturn(NID_UI, pEcoreEvas, _INDICATOR_OPACITY_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2381 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2382 Ecore_X_Illume_Indicator_Opacity_Mode mode = ecore_x_e_illume_indicator_opacity_get(win);
2384 _IndicatorOpacity opacity = _INDICATOR_OPACITY_UNKNOWN;
2387 case ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN:
2388 opacity = _INDICATOR_OPACITY_UNKNOWN;
2390 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
2391 opacity = _INDICATOR_OPACITY_OPAQUE;
2393 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
2394 opacity = _INDICATOR_OPACITY_TRANSLUCENT;
2396 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
2397 opacity = _INDICATOR_OPACITY_TRANSPARENT;
2400 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2401 return _INDICATOR_OPACITY_UNKNOWN;
2404 SetLastResult(E_SUCCESS);
2410 _EcoreEvas::SetWindowActivationEnabled(const _Window& window, bool enable)
2412 _EflLayer* pLayer = GetEflLayer(window);
2413 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2415 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2416 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2418 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2420 Eina_Bool acceptsFocus;
2421 Ecore_X_Window_State_Hint initialState;
2422 Ecore_X_Pixmap iconPixmap;
2423 Ecore_X_Pixmap iconMask;
2424 Ecore_X_Window iconWindow;
2425 Ecore_X_Window windowGroup;
2428 ecore_x_icccm_hints_get(win, &acceptsFocus, &initialState, &iconPixmap, &iconMask, &iconWindow, &windowGroup, &isUrgent);
2429 ecore_x_icccm_hints_set(win, (enable ? EINA_TRUE : EINA_FALSE), initialState, iconPixmap, iconMask, iconWindow, windowGroup, isUrgent);
2433 _EcoreEvas::IsWindowActivationEnabled(const _Window& window)
2435 _EflLayer* pLayer = GetEflLayer(window);
2436 SysTryReturn(NID_UI, pLayer, true, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2438 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2439 SysTryReturn(NID_UI, pEcoreEvas, true, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2441 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2443 Eina_Bool acceptsFocus;
2444 Ecore_X_Window_State_Hint initialState;
2445 Ecore_X_Pixmap iconPixmap;
2446 Ecore_X_Pixmap iconMask;
2447 Ecore_X_Window iconWindow;
2448 Ecore_X_Window windowGroup;
2451 ecore_x_icccm_hints_get(win, &acceptsFocus, &initialState, &iconPixmap, &iconMask, &iconWindow, &windowGroup, &isUrgent);
2453 return (acceptsFocus ? true : false);
2457 _EcoreEvas::SetFloatingMode(const _Window& window, bool enable)
2459 _EflLayer* pLayer = GetEflLayer(window);
2460 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2462 Evas_Object* pWinObj = pLayer->GetElmWin();
2463 SysTryReturn(NID_UI, pWinObj, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2465 elm_win_floating_mode_set(pWinObj, (enable ? EINA_TRUE : EINA_FALSE));
2471 _EcoreEvas::GetEvas(void) const
2473 SysLog(NID_UI, "Do not use.");
2474 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
2480 _EflLayer* pLayer = GetEflLayer(*pWindow);
2486 return pLayer->GetEvas();
2490 _EcoreEvas::GetEcoreEvas(void) const
2492 SysLog(NID_UI, "Do not use.");
2493 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
2499 _EflLayer* pLayer = GetEflLayer(*pWindow);
2505 return pLayer->GetEcoreEvas();
2509 _EcoreEvas::GetWindowObject(void) const
2511 SysLog(NID_UI, "Do not use.");
2512 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
2518 _EflLayer* pLayer = GetEflLayer(*pWindow);
2524 return pLayer->GetElmWin();
2528 _EcoreEvas::GetXWindow(void) const
2530 SysLog(NID_UI, "Do not use.");
2531 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
2537 _EflLayer* pLayer = GetEflLayer(*pWindow);
2543 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2549 _EcoreEvas::AllowSetWindowBounds(bool allow)
2551 __changeBounds = allow;
2555 _EcoreEvas::SetWindowLevel(const _Window& window, _WindowLevel level)
2557 _EflLayer* pLayer = GetEflLayer(window);
2558 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2560 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2561 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2563 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2565 if (level == _WINDOW_LEVEL_NORMAL)
2567 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
2569 else if (level == _WINDOW_LEVEL_NOTIFICATION_HIGH)
2571 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NOTIFICATION);
2572 utilx_set_system_notification_level((Display*)ecore_x_display_get(), win, UTILX_NOTIFICATION_LEVEL_HIGH);
2574 else if (level == _WINDOW_LEVEL_NOTIFICATION_MIDDLE)
2576 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NOTIFICATION);
2577 utilx_set_system_notification_level((Display*)ecore_x_display_get(), win, UTILX_NOTIFICATION_LEVEL_NORMAL);
2580 SetLastResult(E_SUCCESS);
2584 _EcoreEvas::GetWindowLevel(const _Window& window) const
2586 _EflLayer* pLayer = GetEflLayer(window);
2587 SysTryReturn(NID_UI, pLayer, _WINDOW_LEVEL_UNKNOWN, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2589 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2590 SysTryReturn(NID_UI, pEcoreEvas, _WINDOW_LEVEL_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2592 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2594 Ecore_X_Window_Type type = ECORE_X_WINDOW_TYPE_UNKNOWN;
2595 ecore_x_netwm_window_type_get(win, &type);
2597 _WindowLevel winLevel = _WINDOW_LEVEL_UNKNOWN;
2598 if (type == ECORE_X_WINDOW_TYPE_NORMAL)
2600 winLevel = _WINDOW_LEVEL_NORMAL;
2602 else if (type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
2604 Utilx_Notification_Level notificationLevel = utilx_get_system_notification_level((Display*)ecore_x_display_get(), win);
2606 if (notificationLevel == UTILX_NOTIFICATION_LEVEL_HIGH)
2608 winLevel = _WINDOW_LEVEL_NOTIFICATION_HIGH;
2610 else if (notificationLevel == UTILX_NOTIFICATION_LEVEL_NORMAL)
2612 winLevel = _WINDOW_LEVEL_NOTIFICATION_MIDDLE;
2616 SetLastResult(E_SUCCESS);
2622 _EcoreEvas::SetWindowBounds(const _Window& window, const Rectangle& bounds)
2624 if (__changeBounds == false)
2629 _EflLayer* pLayer = GetEflLayer(window);
2630 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2632 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2633 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2635 Evas_Object* pWinObject = pLayer->GetElmWin();
2636 SysTryReturnVoidResult(NID_UI, pWinObject, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2638 Rectangle winBounds = _CoordinateSystemUtils::Transform(bounds);
2640 int winX = winBounds.x;
2641 int winY = winBounds.y;
2645 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
2647 int rotate = ecore_evas_rotation_get(pEcoreEvas);
2651 winX = rootW - winBounds.y - winBounds.height;
2656 winY = rootH - winBounds.x - winBounds.width;
2659 winX = rootW - winBounds.x - winBounds.width;
2660 winY = rootH - winBounds.y - winBounds.height;
2666 evas_object_move(pWinObject, winX, winY);
2667 evas_object_resize(pWinObject, winBounds.width, winBounds.height);
2669 SysLog(NID_UI, "The window is moved to (%d, %d) and is resized to (%d, %d) with %d degree by setting bounds." , winX, winY, winBounds.width, winBounds.height, rotate);
2672 Rectangle rectangle = GetIndicatorBounds(window);
2674 SetLastResult(E_SUCCESS);
2678 _EcoreEvas::SetWindowVisibleState(const _Window& window, bool visibleState)
2680 _EflLayer* pLayer = GetEflLayer(window);
2681 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2683 Evas_Object* pWinObj = pLayer->GetElmWin();
2684 SysTryReturnVoidResult(NID_UI, pWinObj, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2686 pLayer->SetShowState(visibleState);
2688 // if (visibleState)
2690 // evas_object_show(pWinObj);
2694 // evas_object_hide(pWinObj);
2697 SetLastResult(E_SUCCESS);
2701 _EcoreEvas::SetOwner(const _Window& ownee, const _Control& owner)
2703 _EflLayer* pOwneeLayer = GetEflLayer(ownee);
2704 SysTryReturnVoidResult(NID_UI, pOwneeLayer, E_INVALID_ARG, "[E_INVALID_ARG] The ownee doesn't have a elf layer.");
2706 _Window* pOwnerWindow = owner.GetRootWindow();
2707 SysTryReturnVoidResult(NID_UI, pOwnerWindow, E_INVALID_ARG, "[E_INVALID_ARG] The owner doesn't have a root window.");
2709 _EflLayer* pOwnerLayer = GetEflLayer(*pOwnerWindow);
2710 SysTryReturnVoidResult(NID_UI, pOwnerLayer, E_INVALID_ARG, "[E_INVALID_ARG] The owner doesn't have a elf layer.");
2712 Ecore_X_Window owneeWin = (Ecore_X_Window) ecore_evas_window_get(pOwneeLayer->GetEcoreEvas());
2713 Ecore_X_Window ownerWin = (Ecore_X_Window) ecore_evas_window_get(pOwnerLayer->GetEcoreEvas());
2715 ecore_x_icccm_transient_for_unset(owneeWin);
2716 ecore_x_icccm_transient_for_set(owneeWin, ownerWin);
2718 int rotation = GetWindowRotation(*pOwnerWindow);
2719 RotateWindow(ownee, rotation);
2721 SetLastResult(E_SUCCESS);
2725 _EcoreEvas::GetWindowRotation(const _Window& window)
2727 _EflLayer* pLayer = GetEflLayer(window);
2733 int rotation = ecore_evas_rotation_get(pLayer->GetEcoreEvas());
2738 _EcoreEvas::GetFrame(void) const
2740 SysLog(NID_UI, "Do not use.");
2745 _EcoreEvas::GetRootVisualElement(void)const
2747 SysLog(NID_UI, "Do not use.");
2752 _EcoreEvas::SetFrame(const _Control& control)
2754 SysLog(NID_UI, "Do not use.");
2755 __pFrame = const_cast<_Control*>(&control);
2760 _EcoreEvas::GetSelectedCbhmItem(Ecore_X_Atom* pDataType, char** pBuffer) const
2762 Ecore_X_Window cbhmWin = GetCbhmWindow();
2763 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(ATOM_CBHM_SELECTED_ITEM);
2764 Ecore_X_Atom atomItemType = 0;
2766 char* pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmItem, &atomItemType, NULL);
2769 Ecore_X_Atom x_atom_cbhm_error = ecore_x_atom_get(ATOM_CBHM_ERROR);
2770 if (atomItemType == x_atom_cbhm_error)
2787 *pDataType = atomItemType;
2796 _EcoreEvas::IsAccessibilityScreenReaderActivated(void)
2798 Eina_Bool acc = elm_config_access_get();
2802 void* _GetEcoreEvasHandle(void)
2804 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();
2805 if (pEcoreEvasMgr == null)
2810 _EcoreEvas* pUiEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();
2811 if (pUiEcoreEvas == null)
2816 return (void*)pUiEcoreEvas->GetEcoreEvas();
2819 void* _GetEvasHandle(void)
2821 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();
2822 if (pEcoreEvasMgr == null)
2827 _EcoreEvas* pUiEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();
2828 if (pUiEcoreEvas == null)
2833 return (void*)pUiEcoreEvas->GetEvas();
2837 _EcoreEvas::CreateWindow(void)
2839 // Create a win object.
2840 _DisplayManager* pDisplayManager = _DisplayManager::GetInstance();
2841 SysTryReturn(NID_UI, pDisplayManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2843 __pLayer = _NativeLayer::CreateInstanceN();
2844 SysTryReturn(NID_UI, __pLayer, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2845 __pRootVE = __pLayer->GetRootVisualElement();
2847 SysTryReturn(NID_UI, __pRootVE, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2849 _EflLayer* pLayer = static_cast<_EflLayer*>(__pRootVE->GetNativeLayer());
2850 SysTryReturn(NID_UI, pLayer, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2852 __pForegroundWindow = pLayer->GetElmWin();
2856 Ecore_Evas* pEcoreEvas = null;
2857 Ecore_X_Window window = 0;
2860 Evas* pEvas = pLayer->GetEvas();
2861 SysTryCatch(NID_UI, pEvas, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2863 // Get the ecore evas.
2864 pEcoreEvas = pLayer->GetEcoreEvas();
2865 SysTryCatch(NID_UI, pEcoreEvas, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2867 window = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2868 SysTryCatch(NID_UI, window != 0, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2873 ecore_x_window_size_get(ecore_x_window_root_get(window), &width, &height);
2875 pLayer->SetBounds(FloatRectangle(0.0f, 0.0f, (float)width, (float)height));
2876 __pRootVE->SetBounds(FloatRectangle(0.0f, 0.0f, (float)width, (float)height));
2878 _CanvasImpl::SetFrameInfoCallback(_GetEcoreEvasHandle, _GetEvasHandle);
2880 SetLastResult(E_SUCCESS);
2885 evas_object_del(__pForegroundWindow);
2891 _EcoreEvas::InitializeAtomList(void)
2893 __atomList[_ATOM_TARGETS].pName = "TARGETS";
2894 __atomList[_ATOM_TARGETS].formats = _CLIP_FORMAT_TARGETS;
2895 __atomList[_ATOM_TARGETS].convert = ConvertClipIntoTarget;
2896 __atomList[_ATOM_TARGETS].response = RequestClip;
2897 __atomList[_ATOM_TARGETS].notify = NotifyTarget;
2898 __atomList[_ATOM_TARGETS].atom = 0;
2900 __atomList[_ATOM_ATOM].pName = "ATOM";
2901 __atomList[_ATOM_ATOM].formats = _CLIP_FORMAT_TARGETS;
2902 __atomList[_ATOM_ATOM].convert = ConvertClipIntoTarget;
2903 __atomList[_ATOM_ATOM].response = RequestClip;
2904 __atomList[_ATOM_ATOM].notify = NotifyTarget;
2905 __atomList[_ATOM_ATOM].atom = 0;
2907 __atomList[_ATOM_XELM].pName = "application/x-elementary-markup";
2908 __atomList[_ATOM_XELM].formats = _CLIP_FORMAT_MARKUP;
2909 __atomList[_ATOM_XELM].convert = ConvertClipIntoEdje;
2910 __atomList[_ATOM_XELM].response = null;
2911 __atomList[_ATOM_XELM].notify = NotifyEdje;
2912 __atomList[_ATOM_XELM].atom = 0;
2914 __atomList[_ATOM_TEXT_URI].pName = "text/uri";
2915 __atomList[_ATOM_TEXT_URI].formats = _CLIP_FORMAT_IMAGE;
2916 __atomList[_ATOM_TEXT_URI].convert = ConvertClipIntoUri;
2917 __atomList[_ATOM_TEXT_URI].response = null;
2918 __atomList[_ATOM_TEXT_URI].notify = NotifyUri;
2919 __atomList[_ATOM_TEXT_URI].atom = 0;
2921 __atomList[_ATOM_TEXT_URILIST].pName = "text/uri-list";
2922 __atomList[_ATOM_TEXT_URILIST].formats = _CLIP_FORMAT_IMAGE;
2923 __atomList[_ATOM_TEXT_URILIST].convert = ConvertClipIntoUri;
2924 __atomList[_ATOM_TEXT_URILIST].response = null;
2925 __atomList[_ATOM_TEXT_URILIST].notify = NotifyUri;
2926 __atomList[_ATOM_TEXT_URILIST].atom = 0;
2928 __atomList[_ATOM_TEXT_X_VCARD].pName = "text/x-vcard";
2929 __atomList[_ATOM_TEXT_X_VCARD].formats = _CLIP_FORMAT_VCARD;
2930 __atomList[_ATOM_TEXT_X_VCARD].convert = null;
2931 __atomList[_ATOM_TEXT_X_VCARD].response = null;
2932 __atomList[_ATOM_TEXT_X_VCARD].notify = null;
2933 __atomList[_ATOM_TEXT_X_VCARD].atom = 0;
2935 __atomList[_ATOM_IMAGE_PNG].pName = "image/png";
2936 __atomList[_ATOM_IMAGE_PNG].formats = _CLIP_FORMAT_IMAGE;
2937 __atomList[_ATOM_IMAGE_PNG].convert = ConvertClipIntoImage;
2938 __atomList[_ATOM_IMAGE_PNG].response = null;
2939 __atomList[_ATOM_IMAGE_PNG].notify = NotifyImage;
2940 __atomList[_ATOM_IMAGE_PNG].atom = 0;
2942 __atomList[_ATOM_IMAGE_JPEG].pName = "image/jpeg";
2943 __atomList[_ATOM_IMAGE_JPEG].formats = _CLIP_FORMAT_IMAGE;
2944 __atomList[_ATOM_IMAGE_JPEG].convert = ConvertClipIntoImage;
2945 __atomList[_ATOM_IMAGE_JPEG].response = null;
2946 __atomList[_ATOM_IMAGE_JPEG].notify = NotifyImage;
2947 __atomList[_ATOM_IMAGE_JPEG].atom = 0;
2949 __atomList[_ATOM_IMAGE_BMP].pName = "image/x-ms-bmp";
2950 __atomList[_ATOM_IMAGE_BMP].formats = _CLIP_FORMAT_IMAGE;
2951 __atomList[_ATOM_IMAGE_BMP].convert = ConvertClipIntoImage;
2952 __atomList[_ATOM_IMAGE_BMP].response = null;
2953 __atomList[_ATOM_IMAGE_BMP].notify = NotifyImage;
2954 __atomList[_ATOM_IMAGE_BMP].atom = 0;
2956 __atomList[_ATOM_IMAGE_GIF].pName = "image/gif";
2957 __atomList[_ATOM_IMAGE_GIF].formats = _CLIP_FORMAT_IMAGE;
2958 __atomList[_ATOM_IMAGE_GIF].convert = ConvertClipIntoImage;
2959 __atomList[_ATOM_IMAGE_GIF].response = null;
2960 __atomList[_ATOM_IMAGE_GIF].notify = NotifyImage;
2961 __atomList[_ATOM_IMAGE_GIF].atom = 0;
2963 __atomList[_ATOM_IMAGE_TIFF].pName = "image/tiff";
2964 __atomList[_ATOM_IMAGE_TIFF].formats = _CLIP_FORMAT_IMAGE;
2965 __atomList[_ATOM_IMAGE_TIFF].convert = ConvertClipIntoImage;
2966 __atomList[_ATOM_IMAGE_TIFF].response = null;
2967 __atomList[_ATOM_IMAGE_TIFF].notify = NotifyImage;
2968 __atomList[_ATOM_IMAGE_TIFF].atom = 0;
2970 __atomList[_ATOM_IMAGE_SVG].pName = "image/svg+xml";
2971 __atomList[_ATOM_IMAGE_SVG].formats = _CLIP_FORMAT_IMAGE;
2972 __atomList[_ATOM_IMAGE_SVG].convert = ConvertClipIntoImage;
2973 __atomList[_ATOM_IMAGE_SVG].response = null;
2974 __atomList[_ATOM_IMAGE_SVG].notify = NotifyImage;
2975 __atomList[_ATOM_IMAGE_SVG].atom = 0;
2977 __atomList[_ATOM_IMAGE_XPM].pName = "image/x-xpixmap";
2978 __atomList[_ATOM_IMAGE_XPM].formats = _CLIP_FORMAT_IMAGE;
2979 __atomList[_ATOM_IMAGE_XPM].convert = ConvertClipIntoImage;
2980 __atomList[_ATOM_IMAGE_XPM].response = null;
2981 __atomList[_ATOM_IMAGE_XPM].notify = NotifyImage;
2982 __atomList[_ATOM_IMAGE_XPM].atom = 0;
2984 __atomList[_ATOM_IMAGE_TGA].pName = "image/x-tga";
2985 __atomList[_ATOM_IMAGE_TGA].formats = _CLIP_FORMAT_IMAGE;
2986 __atomList[_ATOM_IMAGE_TGA].convert = ConvertClipIntoImage;
2987 __atomList[_ATOM_IMAGE_TGA].response = null;
2988 __atomList[_ATOM_IMAGE_TGA].notify = NotifyImage;
2989 __atomList[_ATOM_IMAGE_TGA].atom = 0;
2991 __atomList[_ATOM_IMAGE_PPM].pName = "image/x-portable-pixmap";
2992 __atomList[_ATOM_IMAGE_PPM].formats = _CLIP_FORMAT_IMAGE;
2993 __atomList[_ATOM_IMAGE_PPM].convert = ConvertClipIntoImage;
2994 __atomList[_ATOM_IMAGE_PPM].response = null;
2995 __atomList[_ATOM_IMAGE_PPM].notify = NotifyImage;
2996 __atomList[_ATOM_IMAGE_PPM].atom = 0;
2998 __atomList[_ATOM_TEXT_HTML_UTF8].pName = "text/html;charset=utf-8";
2999 __atomList[_ATOM_TEXT_HTML_UTF8].formats = _CLIP_FORMAT_HTML;
3000 __atomList[_ATOM_TEXT_HTML_UTF8].convert = ConvertClipIntoHtml;
3001 __atomList[_ATOM_TEXT_HTML_UTF8].response = null;
3002 __atomList[_ATOM_TEXT_HTML_UTF8].notify = NotifyHtml;
3003 __atomList[_ATOM_TEXT_HTML_UTF8].atom = 0;
3005 __atomList[_ATOM_TEXT_HTML].pName = "text/html";
3006 __atomList[_ATOM_TEXT_HTML].formats = _CLIP_FORMAT_HTML;
3007 __atomList[_ATOM_TEXT_HTML].convert = ConvertClipIntoHtml;
3008 __atomList[_ATOM_TEXT_HTML].response = null;
3009 __atomList[_ATOM_TEXT_HTML].notify = NotifyHtml;
3010 __atomList[_ATOM_TEXT_HTML].atom = 0;
3012 __atomList[_ATOM_STRING_UTF8].pName = "UTF8_STRING";
3013 __atomList[_ATOM_STRING_UTF8].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
3014 __atomList[_ATOM_STRING_UTF8].convert = ConvertClipIntoText;
3015 __atomList[_ATOM_STRING_UTF8].response = null;
3016 __atomList[_ATOM_STRING_UTF8].notify = NotifyText;
3017 __atomList[_ATOM_STRING_UTF8].atom = 0;
3019 __atomList[_ATOM_STRING].pName = "STRING";
3020 __atomList[_ATOM_STRING].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
3021 __atomList[_ATOM_STRING].convert = ConvertClipIntoText;
3022 __atomList[_ATOM_STRING].response = null;
3023 __atomList[_ATOM_STRING].notify = NotifyText;
3024 __atomList[_ATOM_STRING].atom = 0;
3026 __atomList[_ATOM_TEXT].pName = "TEXT";
3027 __atomList[_ATOM_TEXT].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
3028 __atomList[_ATOM_TEXT].convert = ConvertClipIntoText;
3029 __atomList[_ATOM_TEXT].response = null;
3030 __atomList[_ATOM_TEXT].notify = null;
3031 __atomList[_ATOM_TEXT].atom = 0;
3033 __atomList[_ATOM_TEXT_PLAIN_UTF8].pName = "text/plain;charset=utf-8";
3034 __atomList[_ATOM_TEXT_PLAIN_UTF8].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
3035 __atomList[_ATOM_TEXT_PLAIN_UTF8].convert = ConvertClipIntoText;
3036 __atomList[_ATOM_TEXT_PLAIN_UTF8].response = null;
3037 __atomList[_ATOM_TEXT_PLAIN_UTF8].notify = null;
3038 __atomList[_ATOM_TEXT_PLAIN_UTF8].atom = 0;
3040 __atomList[_ATOM_TEXT_PLAIN].pName = "text/plain";
3041 __atomList[_ATOM_TEXT_PLAIN].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
3042 __atomList[_ATOM_TEXT_PLAIN].convert = ConvertClipIntoText;
3043 __atomList[_ATOM_TEXT_PLAIN].response = null;
3044 __atomList[_ATOM_TEXT_PLAIN].notify = null;
3045 __atomList[_ATOM_TEXT_PLAIN].atom = 0;
3047 __clipList[_CLIP_TYPE_PRIMARY].selection = ECORE_X_SELECTION_PRIMARY;
3048 __clipList[_CLIP_TYPE_PRIMARY].set = ecore_x_selection_primary_set;
3049 __clipList[_CLIP_TYPE_PRIMARY].clear = ecore_x_selection_primary_clear;
3050 __clipList[_CLIP_TYPE_PRIMARY].request = ecore_x_selection_primary_request;
3051 __clipList[_CLIP_TYPE_PRIMARY].active = false;
3052 __clipList[_CLIP_TYPE_PRIMARY].pBuffer = null;
3053 __clipList[_CLIP_TYPE_PRIMARY].pRetrievedBuffer = null;
3054 __clipList[_CLIP_TYPE_PRIMARY].bufferLength = 0;
3055 __clipList[_CLIP_TYPE_PRIMARY].completed = false;
3057 __clipList[_CLIP_TYPE_SECONDARY].selection = ECORE_X_SELECTION_SECONDARY;
3058 __clipList[_CLIP_TYPE_SECONDARY].set = ecore_x_selection_secondary_set;
3059 __clipList[_CLIP_TYPE_SECONDARY].clear = ecore_x_selection_secondary_clear;
3060 __clipList[_CLIP_TYPE_SECONDARY].request = ecore_x_selection_secondary_request;
3061 __clipList[_CLIP_TYPE_SECONDARY].active = false;
3062 __clipList[_CLIP_TYPE_SECONDARY].pBuffer = null;
3063 __clipList[_CLIP_TYPE_SECONDARY].pRetrievedBuffer = null;
3064 __clipList[_CLIP_TYPE_SECONDARY].bufferLength = 0;
3065 __clipList[_CLIP_TYPE_SECONDARY].completed = false;
3067 __clipList[_CLIP_TYPE_CLIPBOARD].selection = ECORE_X_SELECTION_CLIPBOARD;
3068 __clipList[_CLIP_TYPE_CLIPBOARD].set = ecore_x_selection_clipboard_set;
3069 __clipList[_CLIP_TYPE_CLIPBOARD].clear = ecore_x_selection_clipboard_clear;
3070 __clipList[_CLIP_TYPE_CLIPBOARD].request = ecore_x_selection_clipboard_request;
3071 __clipList[_CLIP_TYPE_CLIPBOARD].active = false;
3072 __clipList[_CLIP_TYPE_CLIPBOARD].pBuffer = null;
3073 __clipList[_CLIP_TYPE_CLIPBOARD].pRetrievedBuffer = null;
3074 __clipList[_CLIP_TYPE_CLIPBOARD].bufferLength = 0;
3075 __clipList[_CLIP_TYPE_CLIPBOARD].completed = false;
3077 __clipList[_CLIP_TYPE_XDND].selection = ECORE_X_SELECTION_XDND;
3078 __clipList[_CLIP_TYPE_XDND].request = ecore_x_selection_xdnd_request;
3079 __clipList[_CLIP_TYPE_XDND].active = false;
3080 __clipList[_CLIP_TYPE_XDND].pBuffer = null;
3081 __clipList[_CLIP_TYPE_XDND].pRetrievedBuffer = null;
3082 __clipList[_CLIP_TYPE_XDND].bufferLength = 0;
3083 __clipList[_CLIP_TYPE_XDND].completed = false;
3085 for (int i = 0; i < _ATOM_MAX; i++)
3087 __atomList[i].atom = ecore_x_atom_get(__atomList[i].pName);
3088 //ecore_x_selection_converter_atom_add(__atomList[i].atom, __atomList[i].convert);
3090 SysLog(NID_UI, "[Clipboard] __atomList[%d] : pName = %s, atom = %d", i, __atomList[i].pName, __atomList[i].atom);
3093 result r = E_SUCCESS;
3095 __pClearClip = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR, ClearClip, NULL);
3096 SysTryCatch(NID_UI, __pClearClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
3098 __pNotifyClip = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, NotifyClip, NULL);
3099 SysTryCatch(NID_UI, __pNotifyClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
3101 __pClipboardClosed = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, OnClipboardClosed, null);
3102 SysTryCatch(NID_UI, __pClipboardClosed, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
3104 __atomRotateRootAngle = ecore_x_atom_get("_E_ILLUME_ROTATE_ROOT_ANGLE");
3105 __atomAccessibility = ecore_x_atom_get("_E_MOD_ACC_SCR_READER_");
3110 for (int i = 0; i < _ATOM_MAX; i++)
3112 if (__atomList[i].atom)
3114 ecore_x_selection_converter_atom_del(__atomList[i].atom);
3120 ecore_event_handler_del(__pClearClip);
3121 __pClearClip = null;
3126 ecore_event_handler_del(__pNotifyClip);
3127 __pNotifyClip = null;
3130 if (__pClipboardClosed)
3132 ecore_event_handler_del(__pClipboardClosed);
3133 __pClipboardClosed = null;
3140 _EcoreEvas::IsValidClipFormat(_ClipFormat clipFormat)
3142 return ((_CLIP_FORMAT_TEXT & clipFormat) ||
3143 (_CLIP_FORMAT_MARKUP & clipFormat) ||
3144 (_CLIP_FORMAT_IMAGE & clipFormat) ||
3145 (_CLIP_FORMAT_VCARD & clipFormat) ||
3146 (_CLIP_FORMAT_HTML & clipFormat));
3150 _EcoreEvas::GetCbhmWindow(void) const
3152 Ecore_X_Atom atomCbhm = ecore_x_atom_get(ATOM_CBHM_WINDOW_NAME);
3153 Ecore_X_Window cbhmWin = 0;
3155 unsigned char* pBuf = NULL;
3157 int ret = ecore_x_window_prop_property_get(0, atomCbhm, XA_WINDOW, 0, &pBuf, &num);
3161 memcpy(&cbhmWin, pBuf, sizeof(Ecore_X_Window));
3173 _EcoreEvas::SendCbhmMessage(Ecore_X_Window xwin, const char* pMsg)
3175 Ecore_X_Window cbhmWin = GetCbhmWindow();
3176 Ecore_X_Atom atomCbhmMsg = ecore_x_atom_get(ATOM_CBHM_MSG);
3178 if (!cbhmWin || !atomCbhmMsg)
3183 XClientMessageEvent m;
3184 memset(&m, 0, sizeof(m));
3185 m.type = ClientMessage;
3186 m.display = (Display*)ecore_x_display_get();
3188 m.message_type = atomCbhmMsg;
3190 snprintf(m.data.b, 20, "%s", pMsg);
3192 XSendEvent((Display*)ecore_x_display_get(), cbhmWin, False, NoEventMask, (XEvent*)&m);
3203 _EcoreEvas::SetCbhmItem(Ecore_X_Window xwin, Ecore_X_Atom dataType, char* pItemData)
3205 Ecore_X_Window cbhmWin = GetCbhmWindow();
3206 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(ATOM_CBHM_ITEM);
3209 ecore_x_window_prop_property_set(cbhmWin, atomCbhmItem, dataType, 8, pItemData, strlen(pItemData) + 1);
3212 if (SendCbhmMessage(xwin, ATOM_CBHM_SET_ITEM))
3221 _EcoreEvas::GetCbhmReply(Ecore_X_Window xwin, Ecore_X_Atom property, Ecore_X_Atom* pDataType, int* pNum) const
3223 unsigned char* pData = null;
3242 long unsigned int numRet = 0;
3243 long unsigned int bytes = 0;
3247 unsigned char* pPropRet = null;
3248 Ecore_X_Atom typeRet;
3250 ret = XGetWindowProperty((Display*)ecore_x_display_get(), xwin, property, 0, LONG_MAX, False,
3251 ecore_x_window_prop_any_type(), (Atom*)&typeRet, &sizeRet, &numRet, &bytes, &pPropRet);
3263 if (!(pData = (unsigned char*)malloc(numRet * sizeRet / 8)))
3272 for (i = 0; i < numRet; i++)
3273 (pData)[i] = pPropRet[i];
3276 for (i = 0; i < numRet; i++)
3277 ((unsigned short *)pData)[i] = ((unsigned short *)pPropRet)[i];
3280 for (i = 0; i < numRet; i++)
3281 ((unsigned int *)pData)[i] = ((unsigned long *)pPropRet)[i];
3297 *pDataType = typeRet;
3304 _EcoreEvas::GetCbhmItemCount(void) const
3309 Ecore_X_Atom atomCbhmCountGet = ecore_x_atom_get(ATOM_CBHM_COUNT_GET);
3310 Ecore_X_Window cbhmWin = GetCbhmWindow();
3312 pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmCountGet, null, null);
3324 _EcoreEvas::GetCbhmItem(int index, Ecore_X_Atom* pDataType, char** pBuffer) const
3333 *(int*)pDataType = 0;
3336 Ecore_X_Window cbhmWin = GetCbhmWindow();
3340 snprintf(sendBuf, 20, "CBHM_ITEM%d", index);
3341 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(sendBuf);
3342 Ecore_X_Atom atomItemType = 0;
3344 pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmItem, &atomItemType, NULL);
3358 *pDataType = atomItemType;
3361 Ecore_X_Atom x_atom_cbhm_error = ecore_x_atom_get(ATOM_CBHM_ERROR);
3362 if (atomItemType == x_atom_cbhm_error)
3381 _AddActiveWindowEventListener(const _IActiveWindowEventListener& listener)
3383 GetEcoreEvasMgr()->GetEcoreEvas()->AddActiveWindowEventListener(listener);
3387 _RemoveActiveWindowEventListener(const _IActiveWindowEventListener& listener)
3389 GetEcoreEvasMgr()->GetEcoreEvas()->RemoveActiveWindowEventListener(listener);
3392 _OSP_EXPORT_ unsigned int
3393 _GetActiveWindow(void)
3395 return GetEcoreEvasMgr()->GetEcoreEvas()->GetActiveWindow();
3399 _GetProcessId(unsigned int window)
3401 return GetEcoreEvasMgr()->GetEcoreEvas()->GetProcessId(window);