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.
19 * @file FUi_EcoreEvas.cpp
20 * @brief This is the implementation file for the _EcoreEvas class.
24 #include <appcore-common.h>
25 #include <runtime_info.h>
27 #include <X11/Xatom.h>
29 #include <Elementary.h>
30 #include <FGrpRectangle.h>
31 #include <FGrpFloatRectangle.h>
32 #include <FBaseInteger.h>
33 #include <FBaseErrors.h>
34 #include <FBaseSysLog.h>
35 #include <FBaseRtThread.h>
36 #include <FApp_IActiveWindowEventListener.h>
37 #include <FGrp_CanvasImpl.h>
38 #include "FUi_CoordinateSystemUtils.h"
39 #include "FUi_EcoreEvas.h"
40 #include "FUi_EcoreEvasMgr.h"
41 #include "FUi_Control.h"
43 #include "FUi_UiNotificationEvent.h"
44 #include "FUi_UiEventManager.h"
45 #include "FUi_Window.h"
46 #include "FUiAnim_EflLayer.h"
47 #include "FUiAnim_EflNode.h"
48 #include "FUiAnim_VisualElement.h"
49 #include "FUi_AccessibilityGesture.h"
50 #include "FUi_AccessibilitySystemSettingLoader.h"
51 #include "FUiAnim_RootVisualElement.h"
52 #include "FUiAnim_DisplayManager.h"
53 #include "FUiCtrl_Frame.h"
54 #include "FUi_Clipboard.h"
55 #include "FUi_TouchManager.h"
56 #include "FUi_ControlManager.h"
57 #include "FUi_ActiveWindowEvent.h"
58 #include "FUi_ControlImplManager.h"
60 using namespace Tizen::Base;
61 using namespace Tizen::Base::Runtime;
62 using namespace Tizen::App;
63 using namespace Tizen::Graphics;
64 using namespace Tizen::Ui;
65 using namespace Tizen::Ui::Animations;
66 using namespace Tizen::Ui::Controls;
68 #define ATOM_CBHM_WINDOW_NAME "CBHM_XWIN"
69 #define ATOM_CBHM_MSG "CBHM_MSG"
70 #define ATOM_CBHM_COUNT_GET "CBHM_cCOUNT"
71 #define ATOM_CBHM_SERIAL_NUMBER "CBHM_SERIAL_NUMBER"
72 #define ATOM_CBHM_ERROR "CBHM_ERROR"
73 #define ATOM_CBHM_ITEM "CBHM_ITEM"
74 #define ATOM_CBHM_SET_ITEM "SET_ITEM"
75 #define ATOM_CBHM_CLIPBOARD_SHOW_ALL "show1"
76 #define ATOM_CBHM_CLIPBOARD_SHOW "show0"
77 #define ATOM_CBHM_CLIPBOARD_HIDE "cbhm_hide"
78 #define ATOM_CBHM_SELECTED_ITEM "CBHM_SELECTED_ITEM"
79 #define ATOM_ROTATE_AUTO "_E_WINDOW_ROTATION_SUPPORTED"
81 namespace Tizen { namespace Ui
83 static _EcoreEvas* _pEvas = null;
89 Ecore_X_Atom __atomRotateRootAngle = 0;
90 Ecore_X_Atom __atomAccessibility = 0;
92 int __clipboardHeight = 0;
94 #if defined(WINDOW_BASE_ROTATE)
96 OnWindowStateChanged(Ecore_Evas* pEcoreEvas)
98 _ControlManager* pControlManager = _ControlManager::GetInstance();
104 Ecore_X_Window targetWin = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
106 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x] OnWindowStateChanged is called.", targetWin);
108 int winCount = pControlManager->GetWindowCount();
109 for (int i = 0; i < winCount; i++)
111 _Window* pWindow = pControlManager->GetWindow(i);
117 Ecore_X_Window win = (Ecore_X_Window)pWindow->GetNativeHandle();
119 if (win == targetWin)
121 pWindow->OnWindowStateChanged();
130 OnWindowPropertyChanged(void* pData, int type, void* pEvent)
132 Ecore_X_Event_Window_Property* pEv = (Ecore_X_Event_Window_Property*)pEvent;
135 return ECORE_CALLBACK_PASS_ON;
138 Ecore_X_Window targetWin = pEv->win;
141 return ECORE_CALLBACK_PASS_ON;
144 if (pEv->atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE)
146 Ecore_X_Window zone = ecore_x_e_illume_zone_get(targetWin);
147 Ecore_X_Illume_Clipboard_State clipboardState = ecore_x_e_illume_clipboard_state_get(zone);
149 if (clipboardState == ECORE_X_ILLUME_CLIPBOARD_STATE_ON)
155 ecore_x_e_illume_clipboard_geometry_get(zone, &x, &y, &w, &h);
157 Dimension clipboardDim = _CoordinateSystemUtils::InverseTransform(Dimension(w, h));
159 if (__clipboardHeight == 0)
161 SysLog(NID_UI, "[Clipboard] Clipboard is opened. -> w = %d, h = %d", clipboardDim.width, clipboardDim.height);
162 _Clipboard::GetInstance()->FirePopupEvent(_CLIPBOARD_POPUP_STATE_OPENED, clipboardDim.width, clipboardDim.height);
163 __clipboardHeight = clipboardDim.height;
167 // SysLog(NID_UI, "[Clipboard] The bounds of Clipboard is changed. -> w = %d, h = %d", clipboardDim.width, clipboardDim.height);
168 // _Clipboard::GetInstance()->FirePopupEvent(_CLIPBOARD_POPUP_STATE_BOUNDS_CHANGED, clipboardDim.width, clipboardDim.height);
171 else if (clipboardState == ECORE_X_ILLUME_CLIPBOARD_STATE_OFF)
173 SysLog(NID_UI, "[Clipboard] Clipboard is closed.");
174 _Clipboard::GetInstance()->FirePopupEvent(_CLIPBOARD_POPUP_STATE_CLOSED, 0, 0);
175 __clipboardHeight = 0;
178 else if (pEv->atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY)
180 // Only after opening Clipboard
181 if (__clipboardHeight != 0)
183 Ecore_X_Window zone = ecore_x_e_illume_zone_get(targetWin);
189 ecore_x_e_illume_clipboard_geometry_get(zone, &x, &y, &w, &h);
191 Dimension clipboardDim = _CoordinateSystemUtils::InverseTransform(Dimension(w, h));
193 if (clipboardDim.height != 0)
195 SysLog(NID_UI, "[Clipboard] The bounds of Clipboard is changed. -> w = %d, h = %d", clipboardDim.width, clipboardDim.height);
196 _Clipboard::GetInstance()->FirePopupEvent(_CLIPBOARD_POPUP_STATE_BOUNDS_CHANGED, clipboardDim.width, clipboardDim.height);
200 else if (pEv->atom == ECORE_X_ATOM_WM_STATE)
202 _ControlManager* pControlManager = _ControlManager::GetInstance();
203 if (!pControlManager)
205 return ECORE_CALLBACK_PASS_ON;
208 int winCount = pControlManager->GetWindowCount();
210 for (int i = 0; i < winCount; i++)
212 _Window* pWindow = pControlManager->GetWindow(i);
218 Ecore_X_Window win = (Ecore_X_Window)pWindow->GetNativeHandle();
219 if (win != targetWin)
224 if (pWindow->IsOrientationRoot() == true)
226 _Frame* pFrame = static_cast<_Frame*>(pWindow);
228 Ecore_X_Window_State_Hint state = ecore_x_icccm_state_get(targetWin);
231 case ECORE_X_WINDOW_STATE_HINT_WITHDRAWN:
234 case ECORE_X_WINDOW_STATE_HINT_ICONIC:
235 pFrame->OnFrameMinimized();
237 case ECORE_X_WINDOW_STATE_HINT_NORMAL:
238 pFrame->OnFrameRestored();
249 return ECORE_CALLBACK_PASS_ON;
253 OnWindowVisibilityChanged(void* pData, int type, void* pEvent)
255 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
256 SysTryReturn(NID_UI, pEvent, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
258 Ecore_X_Event_Window_Visibility_Change* pE = (Ecore_X_Event_Window_Visibility_Change*) pEvent;
259 _ControlManager* pControlManager = _ControlManager::GetInstance();
261 int count = pControlManager->GetWindowCount();
263 _Window* pWindow = null;
266 for (int i = 0; i < count; i++)
268 pWindow = pControlManager->GetWindow(i);
271 NativeWindowHandle handle = pWindow->GetNativeHandle();
272 if (handle == pE->win)
280 Tizen::Base::Collection::ArrayList* pArgs = null;
281 String* pType = null;
282 Integer* pObscured = null;
286 const _Control* pDestination = pWindow;
288 pArgs = new (std::nothrow) Tizen::Base::Collection::ArrayList;
289 SysTryReturn(NID_UI, pArgs, EINA_FALSE, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
291 result r = pArgs->Construct();
292 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
294 pType = new (std::nothrow) String(L"VisibilityEvent");
295 r = pArgs->Add(*pType);
296 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
298 pObscured = new (std::nothrow) Integer(pE->fully_obscured);
299 r = pArgs->Add(*pObscured);
300 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
302 _UiNotificationEvent event(pDestination->GetHandle(), pArgs);
304 r = _UiEventManager::GetInstance()->SendEvent(event);
307 return ECORE_CALLBACK_RENEW;
310 pArgs->RemoveAll(true);
327 OnWindowShown(void* pData, int type, void* pEvent)
329 #if !defined(WINDOW_BASE_ROTATE)
330 Ecore_X_Event_Window_Show* pEv = (Ecore_X_Event_Window_Show*) pEvent;
333 return ECORE_CALLBACK_PASS_ON;
336 Ecore_X_Window shownWin = pEv->win;
339 return ECORE_CALLBACK_PASS_ON;
342 _ControlManager* pControlManager = _ControlManager::GetInstance();
343 if (!pControlManager)
345 return ECORE_CALLBACK_PASS_ON;
348 int winCount = pControlManager->GetWindowCount();
350 for (int i = 0; i < winCount; i++)
352 _Window* pWindow = pControlManager->GetWindow(i);
358 Ecore_X_Window win = (Ecore_X_Window)pWindow->GetNativeHandle();
362 bool orientationEnabled = pWindow->IsOrientationEnabled();
364 _EcoreEvas* pEcoreEvas = static_cast<_EcoreEvas*>(pData);
367 pEcoreEvas->SetWindowOrientationEnabled(*pWindow, orientationEnabled);
373 return ECORE_CALLBACK_PASS_ON;
377 OnAccessibilitySettingMessageReceived(void* pData, int type, void* pEvent)
379 Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
380 if (pClientEvent->message_type == __atomAccessibility)
382 if((Eina_Bool)pClientEvent->data.l[0])
384 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
385 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", true);
386 SysLog(NID_UI, "Accessibility Screen reader is activated.");
391 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
392 _AccessibilitySystemSettingLoader::SetSystemSetting(L"AccessibilityActivationStatus", false);
393 SysLog(NID_UI, "Accessibility Screen reader is deactivated.");
396 return ECORE_CALLBACK_PASS_ON;
400 OnClientMessageReceived(void* pData, int type, void* pEvent)
402 Ecore_X_Event_Client_Message* pClientEvent = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
403 SysTryReturn(NID_UI, pClientEvent, ECORE_CALLBACK_RENEW, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
405 if (pClientEvent->message_type == __atomRotateRootAngle)
407 int angle = pClientEvent->data.l[0];
409 _ControlManager* pControlManager = _ControlManager::GetInstance();
410 SysTryReturn(NID_UI, pControlManager, ECORE_CALLBACK_RENEW, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
412 pControlManager->OnWindowRotated(angle);
415 if (pClientEvent->message_type == ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL)
419 if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT)
421 SysLog(NID_UI, "Accessibility action : Move next");
422 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_DOWN);
424 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_NEXT)
426 SysLog(NID_UI, "Accessibility action : Move next");
427 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_RIGHT);
429 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_PREV)
431 SysLog(NID_UI, "Accessibility action : Move previous");
432 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_LEFT);
434 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV)
436 SysLog(NID_UI, "Accessibility action : Move previous");
437 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_FLICK_UP);
439 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE)
441 SysLog(NID_UI, "Accessibility action : Activate");
442 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_ONE_FINGER_DOUBLE_TAP);
444 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ)
446 x = (Evas_Coord)pClientEvent->data.l[2];
447 y = (Evas_Coord)pClientEvent->data.l[3];
448 SysLog(NID_UI, "Accessibility action : Read");
449 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_ONE_FINGER_ONE_TAP, x, y);
451 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP)
453 SysLog(NID_UI, "Accessibility action : value increased");
454 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_VALUE_INCREASED);
456 else if ((unsigned int)pClientEvent->data.l[1] == ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN)
458 SysLog(NID_UI, "Accessibility action : value decreased");
459 _AccessibilityGesture::ProcessGesture(_ACCESSIBILITY_GESTURE_TYPE_VALUE_DECREASED);
463 return ECORE_CALLBACK_RENEW;
473 #if !defined(WINDOW_BASE_ROTATE)
474 Ecore_X_Atom __atomRotateAuto = 0;
480 _CLIP_TYPE_SECONDARY,
481 _CLIP_TYPE_CLIPBOARD,
488 Ecore_X_Selection selection;
489 Eina_Bool (* set)(Ecore_X_Window window, const void* pData, int size);
490 Eina_Bool (* clear)(void);
491 void (* request)(Ecore_X_Window window, const char* pTarget);
497 _ClipFormat requestedFormat;
498 char* pRetrievedBuffer;
503 typedef Eina_Bool (*ClipConverter)(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
504 typedef int (*ClipResponseHandler)(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
505 typedef int (*ClipNotifyHandler)(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
511 _ATOM_LISTING_ATOMS = _ATOM_ATOM,
525 _ATOM_TEXT_HTML_UTF8,
530 _ATOM_TEXT_PLAIN_UTF8,
539 ClipConverter convert;
540 ClipResponseHandler response;
541 ClipNotifyHandler notify;
545 Eina_Bool ClearClip(void* pData __UNUSED__, int type, void* pEvent);
546 Eina_Bool NotifyClip(void* pData __UNUSED__, int type, void* pEvent);
548 Eina_Bool ConvertClipIntoTarget(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
549 Eina_Bool ConvertClipIntoText(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
550 Eina_Bool ConvertClipIntoHtml(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
551 Eina_Bool ConvertClipIntoEdje(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
552 Eina_Bool ConvertClipIntoUri(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
553 Eina_Bool ConvertClipIntoImage(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
554 Eina_Bool ConvertClipIntoVCard(char* pTarget, void* pData, int size, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize);
556 int NotifyTarget(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
557 int NotifyText(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
558 int NotifyImage(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
559 int NotifyUri(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
560 int NotifyEdje(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
561 int NotifyHtml(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
563 int RequestClip(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify);
565 _Atom __atomList[_ATOM_MAX];
566 _Clip __clipList[_CLIP_TYPE_MAX];
569 ClearClip(void* pData __UNUSED__, int type __UNUSED__, void* pEvent)
571 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
573 Ecore_X_Event_Selection_Clear* pE = (Ecore_X_Event_Selection_Clear*) pEvent;
574 Ecore_X_Window window = pE->win;
576 _ClipType clipType = _CLIP_TYPE_SECONDARY;
577 __clipList[clipType].requestedFormat = (_ClipFormat)(_CLIP_FORMAT_TEXT|_CLIP_FORMAT_IMAGE);
579 ecore_x_selection_secondary_request(window, ECORE_X_SELECTION_TARGET_TARGETS);
581 return ECORE_CALLBACK_PASS_ON;
585 ConvertClipIntoTarget(char* pTarget __UNUSED__, void* pData, int size__UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType, int* pTypeSize)
590 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
591 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
592 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
593 SysTryReturn(NID_UI, pType, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
594 SysTryReturn(NID_UI, pTypeSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
596 int index = *((int*) pData);
597 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
600 for (int i = 0; i < _ATOM_MAX; i++)
602 if (__clipList[index].format & __atomList[i].formats)
606 // Make the atom list to be possible to return data.
607 Ecore_X_Atom* pAtoms = null;
610 pAtoms = (Ecore_X_Atom*) malloc(sizeof(Ecore_X_Atom) * count);
611 SysTryReturn(NID_UI, pAtoms, EINA_FALSE, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
613 for (int i = 0, count = 0; i < _ATOM_MAX; i++)
615 if (__clipList[index].format & __atomList[i].formats)
616 pAtoms[count++] = __atomList[i].atom;
623 *pType = ECORE_X_ATOM_ATOM;
630 ConvertClipIntoText(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
632 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
633 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
634 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
636 int index = *((int*) pData);
637 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
638 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
640 if (__clipList[index].format & _CLIP_FORMAT_TEXT)
642 *outData = strdup(__clipList[index].pBuffer);
643 *outSize = strlen(__clipList[index].pBuffer);
650 ConvertClipIntoHtml(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
652 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
653 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
654 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
656 int index = *((int*) pData);
657 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
658 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
660 if (__clipList[index].format & _CLIP_FORMAT_HTML)
662 *outData = strdup(__clipList[index].pBuffer);
663 *outSize = strlen(__clipList[index].pBuffer);
670 ConvertClipIntoEdje(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
676 ConvertClipIntoUri(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData, int* outSize, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
678 SysTryReturn(NID_UI, outData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
679 SysTryReturn(NID_UI, outSize, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
680 SysTryReturn(NID_UI, pData, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
682 int index = *((int*) pData);
683 SysTryReturn(NID_UI, index < _CLIP_TYPE_MAX, EINA_FALSE, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
684 SysTryReturn(NID_UI, __clipList[index].active, EINA_FALSE, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
686 if (__clipList[index].format & _CLIP_FORMAT_IMAGE)
688 *outData = strdup(__clipList[index].pBuffer);
689 *outSize = strlen(__clipList[index].pBuffer);
696 ConvertClipIntoImage(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData __UNUSED__, int* outSize __UNUSED__, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
702 ConvertClipIntoVCard(char* pTarget __UNUSED__, void* pData, int size __UNUSED__, void** outData __UNUSED__, int* outSize __UNUSED__, Ecore_X_Atom* pType __UNUSED__, int* pTypeSize __UNUSED__)
708 RequestClip(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
714 OnClipboardClosed(void* pData __UNUSED__, int type, void* pEvent)
716 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
718 _Clipboard* pClipboard = _Clipboard::GetInstance();
721 bool visible = pClipboard->IsPopupVisible();
725 pClipboard->FireEvent(0, null);
729 return ECORE_CALLBACK_PASS_ON;
733 NotifyClip(void* pData __UNUSED__, int type, void* pEvent)
735 SysTryReturn(NID_UI, pEvent, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
737 Ecore_X_Event_Selection_Notify* pE = (Ecore_X_Event_Selection_Notify*) pEvent;
740 for (i = 0; i < _CLIP_TYPE_MAX; i++)
742 if (__clipList[i].selection == pE->selection)
748 SysTryReturn(NID_UI, i < _CLIP_TYPE_MAX, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
750 _Clip* pClip = __clipList + i;
751 for (i = 0; i < _ATOM_MAX; i++)
753 if (!strcmp(pE->target, __atomList[i].pName))
755 if (__atomList[i].notify)
757 __atomList[i].notify(pClip, pE);
762 return ECORE_CALLBACK_PASS_ON;
766 NotifyTarget(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
768 SysTryReturn(NID_UI, pClip, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
769 SysTryReturn(NID_UI, pNotify, ECORE_CALLBACK_PASS_ON, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
771 _EcoreEvas* pEcoreEvas = GetEcoreEvasMgr()->GetEcoreEvas();
772 SysTryReturn(NID_UI, pEcoreEvas, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
774 _ControlManager* pControlManager = _ControlManager::GetInstance();
775 SysTryReturn(NID_UI, pControlManager, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
777 _Window* pWindow = pControlManager->GetCurrentFrame();
778 SysTryReturn(NID_UI, pWindow, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
780 _RootVisualElement* pRootVE = pWindow->GetRootVisualElement();
781 SysTryReturn(NID_UI, pRootVE, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
783 _EflLayer* pLayer = static_cast<_EflLayer*>(pRootVE->GetNativeLayer());
784 SysTryReturn(NID_UI, pLayer, ECORE_CALLBACK_PASS_ON, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
786 Ecore_Evas* pEE = pLayer->GetEcoreEvas();
787 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pEE);
789 Ecore_X_Atom dataType = 0;
790 char* pBuffer = null;
791 if (pEcoreEvas->GetSelectedCbhmItem(&dataType, &pBuffer))
795 const char* pHtmlAtomName = "text/html;charset=utf-8";
796 Ecore_X_Atom htmlType = ecore_x_atom_get(pHtmlAtomName);
798 if (dataType == htmlType)
800 pClip->request(window, pHtmlAtomName);
801 return ECORE_CALLBACK_PASS_ON;
805 Ecore_X_Selection_Data_Targets* pTargets = (Ecore_X_Selection_Data_Targets*) (pNotify->data);
806 Ecore_X_Atom* pAtomList = (Ecore_X_Atom*) (pTargets->data.data);
809 for (j = (_ATOM_LISTING_ATOMS+1); j < _ATOM_MAX; j++)
811 SysLog(NID_UI, "[Clipboard] __atomList[%d].atom = %d", j, __atomList[j].atom);
813 if (!(__atomList[j].formats & pClip->requestedFormat))
818 for (i = 0; i < pTargets->data.length; i++)
820 SysLog(NID_UI, "[Clipboard] pAtomList[%d] = %d", i, pAtomList[i]);
822 if ((__atomList[j].atom == pAtomList[i]) && (__atomList[j].notify))
824 if ((j == _ATOM_XELM) && (!(pClip->requestedFormat & _CLIP_FORMAT_MARKUP)))
829 SysLog(NID_UI, "[Clipboard] go to __atomList[%d].atom = %d", j, __atomList[j].atom);
835 return ECORE_CALLBACK_PASS_ON;
838 pClip->request(window, __atomList[j].pName);
839 return ECORE_CALLBACK_PASS_ON;
843 NotifyText(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
845 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
846 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
848 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
849 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
851 pClip->bufferLength = (int) pData->length;
853 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
856 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
857 pStr[pClip->bufferLength] = '\0';
861 SysLog(NID_UI, "[Clipboard] pStr is null.");
865 pClip->pRetrievedBuffer = pStr;
867 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_TEXT, pClip->pRetrievedBuffer);
873 NotifyImage(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
875 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
876 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
878 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
879 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
881 pClip->bufferLength = (int) pData->length;
883 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
886 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
887 pStr[pClip->bufferLength] = '\0';
891 SysLog(NID_UI, "[Clipboard] pStr is null.");
895 pClip->pRetrievedBuffer = pStr;
897 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_IMAGE, pClip->pRetrievedBuffer);
903 NotifyUri(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
905 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
906 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
908 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
909 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
911 pClip->bufferLength = (int) pData->length;
913 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
916 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
917 pStr[pClip->bufferLength] = '\0';
921 SysLog(NID_UI, "[Clipboard] pStr is null.");
925 pClip->pRetrievedBuffer = pStr;
927 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_IMAGE, pClip->pRetrievedBuffer);
933 NotifyEdje(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
935 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
936 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
938 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
939 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
941 pClip->bufferLength = (int) pData->length;
943 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
946 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
947 pStr[pClip->bufferLength] = '\0';
951 SysLog(NID_UI, "[Clipboard] pStr is null.");
955 pClip->pRetrievedBuffer = pStr;
957 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_TEXT, pClip->pRetrievedBuffer);
963 NotifyHtml(_Clip* pClip, Ecore_X_Event_Selection_Notify* pNotify)
965 SysTryReturn(NID_UI, pClip, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
966 SysTryReturn(NID_UI, pNotify, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
968 Ecore_X_Selection_Data* pData = (Ecore_X_Selection_Data*) pNotify->data;
969 SysTryReturn(NID_UI, pData->data, 0, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
971 pClip->bufferLength = (int) pData->length;
973 char* pStr = (char*)malloc(sizeof(char) * (pClip->bufferLength + 1));
976 strncpy(pStr, (char*)pData->data, pClip->bufferLength);
977 pStr[pClip->bufferLength] = '\0';
981 SysLog(NID_UI, "[Clipboard] pStr is null.");
985 pClip->pRetrievedBuffer = pStr;
987 _Clipboard::GetInstance()->FireEvent(_CLIP_FORMAT_HTML, pClip->pRetrievedBuffer);
993 namespace Tizen { namespace Ui
997 _EcoreEvas::CreateInstanceN(void)
999 _EcoreEvas* pEcoreEvas = new (std::nothrow) _EcoreEvas;
1000 SysTryReturn(NID_UI, pEcoreEvas, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory is insufficient.");
1002 result r = GetLastResult();
1003 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
1005 SetLastResult(E_SUCCESS);
1014 _EcoreEvas::_EcoreEvas(void)
1015 : __pWindowVisibilityChanged(null)
1016 , __pWindowPropertyChanged(null)
1017 , __pWindowShown(null)
1018 , __pClientMessageReceived(null)
1019 , __pClearClip(null)
1020 , __pNotifyClip(null)
1021 , __pClipboardClosed(null)
1023 , __pForegroundWindow(null)
1025 , __changeBounds(true)
1026 , __openClipboard(false)
1028 #if defined(WINDOW_BASE_ROTATE)
1029 int ret = appcore_unset_rotation_cb();
1030 SysLog(NID_UI, "[Window Manager Rotation] appcore_unset_rotation_cb = %d", ret);
1033 __pWindowVisibilityChanged = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, OnWindowVisibilityChanged, (void*) this);
1034 SysTryReturnVoidResult(NID_UI, __pWindowVisibilityChanged, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1036 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnClientMessageReceived, NULL);
1038 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_CONFIGURE);
1039 ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, OnAccessibilitySettingMessageReceived, NULL);
1040 ecore_x_event_mask_set(ecore_x_window_root_first_get(), ECORE_X_EVENT_MASK_WINDOW_PROPERTY);
1044 GetEcoreEvasMgr()->SetEcoreEvas(*this);
1047 //ret = runtime_info_set_changed_cb(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED, OnAutoRotationChanged, NULL);
1048 //SysTryCatch(NID_UI, ret == 0, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1050 result r = InitializeAtomList();
1051 SysTryCatch(NID_UI, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1053 __pWindowShown = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW, OnWindowShown, (void*) this);
1054 SysTryCatch(NID_UI, __pWindowShown, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1056 __pWindowPropertyChanged = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, OnWindowPropertyChanged, NULL);
1057 SysTryCatch(NID_UI, __pWindowPropertyChanged, , E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1059 SetLastResult(E_SUCCESS);
1064 if (__pWindowVisibilityChanged)
1066 ecore_event_handler_del(__pWindowVisibilityChanged);
1067 __pWindowVisibilityChanged = null;
1072 ecore_event_handler_del(__pWindowShown);
1073 __pWindowShown = null;
1077 _EcoreEvas::~_EcoreEvas(void)
1079 if (__pWindowVisibilityChanged)
1081 ecore_event_handler_del(__pWindowVisibilityChanged);
1082 __pWindowVisibilityChanged = null;
1087 ecore_event_handler_del(__pWindowShown);
1088 __pWindowShown = null;
1091 if (__pClientMessageReceived)
1093 ecore_event_handler_del(__pClientMessageReceived);
1094 __pClientMessageReceived = null;
1097 for (int i = 0; i < _ATOM_MAX; i++)
1099 if (__atomList[i].atom)
1101 ecore_x_selection_converter_atom_del(__atomList[i].atom);
1107 ecore_event_handler_del(__pClearClip);
1108 __pClearClip = null;
1113 ecore_event_handler_del(__pNotifyClip);
1114 __pNotifyClip = null;
1117 if (__pClipboardClosed)
1119 ecore_event_handler_del(__pClipboardClosed);
1120 __pClipboardClosed = null;
1123 if (__pWindowPropertyChanged)
1125 ecore_event_handler_del(__pWindowPropertyChanged);
1126 __pWindowPropertyChanged = null;
1129 //runtime_info_unset_changed_cb(RUNTIME_INFO_KEY_ROTATION_LOCK_ENABLED);
1133 _EcoreEvas::RotateWindow(const _Window& window, int orientation)
1135 _EflLayer* pLayer = GetEflLayer(window);
1141 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1144 int curOrientation = ecore_evas_rotation_get(pEcoreEvas);
1145 if (curOrientation == orientation)
1151 bool rotatePartial = true;
1153 _Frame* pFrame = dynamic_cast<_Frame*>(const_cast<_Window*>(&window));
1156 FrameShowMode showMode = pFrame->GetShowMode();
1157 if (showMode == FRAME_SHOW_MODE_FULL_SCREEN)
1159 rotatePartial = false;
1163 _Window* pWindow = const_cast<_Window*>(&window);
1164 if (pWindow->IsLayoutChangable() == true)
1166 rotatePartial = false;
1169 Evas_Object* pWinObj = pLayer->GetElmWin();
1170 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1174 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
1176 if (rotatePartial == false)
1178 ecore_evas_rotation_with_resize_set(pEcoreEvas, orientation);
1180 evas_object_move(pWinObj, 0, 0);
1182 if ((orientation == 0) || (orientation == 180))
1184 evas_object_resize(pWinObj, rootW, rootH);
1188 evas_object_resize(pWinObj, rootH, rootW);
1191 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x, FULL SCREEN] Rotate bounds(rot = %d).", win, orientation);
1195 ecore_evas_rotation_set(pEcoreEvas, orientation);
1197 Rectangle winBounds = _CoordinateSystemUtils::Transform(window.GetBounds());
1198 int rotate = ecore_evas_rotation_get(pEcoreEvas);
1200 int winX = winBounds.x;
1201 int winY = winBounds.y;
1206 winX = rootW - winBounds.y - winBounds.height;
1211 winY = rootH - winBounds.x - winBounds.width;
1214 winX = rootW - winBounds.x - winBounds.width;
1215 winY = rootH - winBounds.y - winBounds.height;
1221 evas_object_move(pWinObj, winX, winY);
1222 evas_object_resize(pWinObj, winBounds.width, winBounds.height);
1224 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x, PARTIAL SCREEN] Rotate bounds(rot = %d, %d, %d, %d, %d).", win, orientation, winX, winY, winBounds.width, winBounds.height);
1228 #if !defined(WINDOW_BASE_ROTATE)
1230 _EcoreEvas::SetWindowOrientationEnabled(const _Window& window, bool enable)
1232 _EflLayer* pLayer = GetEflLayer(window);
1238 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1244 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1250 if (__atomRotateAuto == 0)
1252 __atomRotateAuto = ecore_x_atom_get(ATOM_ROTATE_AUTO);
1255 unsigned int supportRotation = (unsigned int)enable;
1256 ecore_x_window_prop_card32_set(win, __atomRotateAuto, &supportRotation, 1);
1261 _EcoreEvas::GetEflLayer(const _Window& window) const
1263 _RootVisualElement* pRootVisualElement = null;
1265 pRootVisualElement = window.GetRootVisualElement();
1266 if (!pRootVisualElement)
1268 SysLog(NID_UI, "The root visual element is null.");
1272 _EflLayer* pEflLayer = static_cast<_EflLayer*>(pRootVisualElement->GetNativeLayer());
1275 SysLog(NID_UI, "The efl layer is null.");
1283 _EcoreEvas::GetFloatingMode(void) const
1285 SysTryReturn(NID_UI, __pForegroundWindow, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1287 Eina_Bool ret = elm_win_floating_mode_get(__pForegroundWindow);
1289 SetLastResult(E_SUCCESS);
1291 return (ret ? true : false);
1294 // [ToDo] Remove API
1296 _EcoreEvas::GetFloatingMode(const _Window& window) const
1298 _EflLayer* pLayer = GetEflLayer(window);
1299 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1301 Evas_Object* pWinObj = pLayer->GetElmWin();
1302 SysTryReturn(NID_UI, pWinObj, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1304 Eina_Bool ret = elm_win_floating_mode_get(pWinObj);
1306 SetLastResult(E_SUCCESS);
1308 return (ret ? true : false);
1311 // [ToDo] Remove API
1313 _EcoreEvas::AddActiveWindowEventListener(const _IActiveWindowEventListener& listener)
1317 // [ToDo] Remove API
1319 _EcoreEvas::RemoveActiveWindowEventListener(const _IActiveWindowEventListener& listener)
1324 _EcoreEvas::GetActiveWindow(void)
1326 Ecore_X_Window* pRoots = null;
1327 Ecore_X_Window activeWin = 0;
1330 pRoots = ecore_x_window_root_list(&num);
1333 Ecore_X_Atom activeAtom = ecore_x_atom_get("_NET_ACTIVE_WINDOW");
1334 int ret = ecore_x_window_prop_window_get(pRoots[0], activeAtom, &activeWin, 1);
1348 _EcoreEvas::GetProcessId(unsigned int window)
1351 Eina_Bool ret = ecore_x_netwm_pid_get(window, &pid);
1353 if (ret != EINA_TRUE)
1362 _EcoreEvas::SetOwner(NativeWindowHandle ownee, NativeWindowHandle owner)
1364 ecore_x_icccm_transient_for_unset(ownee);
1365 ecore_x_icccm_transient_for_set(ownee, owner);
1367 SysLog(NID_UI, "SetZOrderGroup");
1371 _EcoreEvas::ActivateWindow(const _Window& window)
1373 _EflLayer* pLayer = GetEflLayer(window);
1374 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1376 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1377 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1379 ecore_evas_activate(pEcoreEvas);
1381 NativeWindowHandle currentWindow = window.GetNativeHandle();
1382 unsigned int activeWindow = GetActiveWindow();
1383 int pid = GetProcessId(activeWindow);
1384 SysLog(NID_UI, "currentWindow = 0x%x, activeWindow = 0x%x, pid = %d", currentWindow, activeWindow, pid);
1386 SetLastResult(E_SUCCESS);
1390 _EcoreEvas::MinimizeWindow(_Window& window)
1392 _EflLayer* pLayer = GetEflLayer(window);
1393 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1395 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1396 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1398 //ecore_evas_lower(pEcoreEvas);
1399 ecore_evas_iconified_set(pEcoreEvas, EINA_TRUE);
1401 SetLastResult(E_SUCCESS);
1405 _EcoreEvas::SetRenderBackend(_RenderBackend backend)
1409 case _RENDER_BACKEND_SW:
1410 elm_config_preferred_engine_set("software_x11");
1412 case _RENDER_BACKEND_GL:
1413 elm_config_preferred_engine_set("opengl_x11");
1415 case _RENDER_BACKEND_DEFAULT:
1418 elm_config_preferred_engine_set(NULL);
1424 _EcoreEvas::GetRenderBackend(void)
1426 _RenderBackend backend = _RENDER_BACKEND_DEFAULT;
1428 const char* pEngine = elm_config_preferred_engine_get();
1430 if (pEngine == NULL)
1432 backend = _RENDER_BACKEND_DEFAULT;
1434 else if (strcmp(pEngine, "software_x11") == 0)
1436 backend = _RENDER_BACKEND_SW;
1438 else if (strcmp(pEngine, "opengl_x11") == 0)
1440 backend = _RENDER_BACKEND_GL;
1447 _EcoreEvas::CopyClip(_ClipFormat format, const char* pChar)
1449 SysTryReturn(NID_UI, IsValidClipFormat(format), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data type is invalid.");
1450 SysTryReturn(NID_UI, pChar, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The data is invalid.");
1452 Ecore_X_Atom dataType = 0;
1456 case _CLIP_FORMAT_TEXT:
1457 dataType = ecore_x_atom_get("UTF8_STRING");
1459 case _CLIP_FORMAT_IMAGE:
1460 dataType = ecore_x_atom_get("text/uri");
1462 case _CLIP_FORMAT_HTML:
1463 dataType = ecore_x_atom_get("text/html;charset=utf-8");
1469 _ControlManager* pControlManager = _ControlManager::GetInstance();
1471 _Window* pWindow = pControlManager->GetCurrentFrame();
1477 _EflLayer* pLayer = GetEflLayer(*pWindow);
1483 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
1486 SetCbhmItem(window, dataType, (char*)pChar);
1492 _EcoreEvas::RetrieveClipN(int index, int* format, char** pData)
1494 Ecore_X_Atom dataType = 0;
1496 _ControlManager* pControlManager = _ControlManager::GetInstance();
1498 _Window* pWindow = pControlManager->GetCurrentFrame();
1504 _EflLayer* pLayer = GetEflLayer(*pWindow);
1510 GetCbhmItem(index, &dataType, pData);
1512 if ((dataType == ecore_x_atom_get("UTF8_STRING"))
1513 ||(dataType == ecore_x_atom_get("application/x-elementary-markup")))
1515 *format = _CLIP_FORMAT_TEXT;
1517 else if (dataType == ecore_x_atom_get("text/uri"))
1519 *format = _CLIP_FORMAT_IMAGE;
1521 else if (dataType == ecore_x_atom_get("text/html;charset=utf-8"))
1523 *format = _CLIP_FORMAT_HTML;
1531 // Convert markup to utf8.
1532 if (dataType == ecore_x_atom_get("application/x-elementary-markup"))
1534 char* pTempChar = evas_textblock_text_markup_to_utf8(NULL, *pData);
1535 SysLog(NID_UI, "[Clipboard] markup[%s] -> utf8[%s]", *pData, pTempChar);
1545 _EcoreEvas::GetClipCount(void) const
1547 _ControlManager* pControlManager = _ControlManager::GetInstance();
1549 _Window* pWindow = pControlManager->GetCurrentFrame();
1555 _EflLayer* pLayer = GetEflLayer(*pWindow);
1561 int count = GetCbhmItemCount();
1567 _EcoreEvas::OpenClipboard(unsigned long clipFormats)
1569 _ControlManager* pControlManager = _ControlManager::GetInstance();
1571 _Window* pWindow = pControlManager->GetCurrentFrame();
1577 _EflLayer* pLayer = GetEflLayer(*pWindow);
1583 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
1586 ecore_x_selection_secondary_set(window, "", 1);
1588 if (_CLIP_FORMAT_IMAGE & clipFormats)
1590 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW_ALL);
1594 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_SHOW);
1597 __openClipboard = true;
1601 _EcoreEvas::CloseClipboard(void)
1603 _ControlManager* pControlManager = _ControlManager::GetInstance();
1605 _Window* pWindow = pControlManager->GetCurrentFrame();
1611 _EflLayer* pLayer = GetEflLayer(*pWindow);
1617 Ecore_X_Window window = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
1620 __openClipboard = false;
1621 SendCbhmMessage(window, ATOM_CBHM_CLIPBOARD_HIDE);
1625 _EcoreEvas::IsClipboardOpened(void)
1627 return __openClipboard;
1631 _EcoreEvas::SetEventPropagation(const _Control& control, bool enable)
1633 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
1634 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1636 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
1637 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1639 evas_object_propagate_events_set(pEvasObject, (enable ? EINA_TRUE : EINA_FALSE));
1645 _EcoreEvas::SetFocus(const _Control& control, bool focus)
1647 _EflNode* pEflNode = dynamic_cast<_EflNode*>(control.GetVisualElement()->GetNativeNode());
1648 SysTryReturn(NID_UI, pEflNode, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1650 Evas_Object* pEvasObject = (Evas_Object*) pEflNode->GetGroupContainer();
1651 SysTryReturn(NID_UI, pEvasObject, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1653 evas_object_focus_set(pEvasObject, (focus ? EINA_TRUE : EINA_FALSE));
1659 _EcoreEvas::SetIndicatorShowState(const _Window& window, bool showState)
1661 _EflLayer* pLayer = GetEflLayer(window);
1662 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1664 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1665 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1667 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1671 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_ON);
1675 ecore_x_e_illume_indicator_state_set(win, ECORE_X_ILLUME_INDICATOR_STATE_OFF);
1682 _EcoreEvas::GetIndicatorShowState(const _Window& window) const
1684 _EflLayer* pLayer = GetEflLayer(window);
1685 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1687 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1688 SysTryReturn(NID_UI, pEcoreEvas, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1690 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1691 Ecore_X_Illume_Indicator_State state = ecore_x_e_illume_indicator_state_get(win);
1693 bool showState = true;
1694 if (state == ECORE_X_ILLUME_INDICATOR_STATE_ON)
1698 else if (state == ECORE_X_ILLUME_INDICATOR_STATE_OFF)
1706 // [ToDo] Remove API
1708 _EcoreEvas::GetIndicatorBounds(const _Window& window) const
1710 _EflLayer* pLayer = GetEflLayer(window);
1711 SysTryReturn(NID_UI, pLayer, Rectangle(0, 0, 0, 0), E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1713 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1714 SysTryReturn(NID_UI, pEcoreEvas, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1716 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1717 Ecore_X_Window rootWin = (Ecore_X_Window) ecore_x_window_root_get(win);
1725 ret = ecore_x_e_illume_indicator_geometry_get(rootWin, &x, &y, &width, &height);
1726 SysTryReturn(NID_UI, ret == true, Rectangle(0, 0, 0, 0), E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1728 SetLastResult(E_SUCCESS);
1730 return Rectangle(x, y, width, height);
1733 // [ToDo] Remove API
1735 _EcoreEvas::SetIndicatorOpacity(const _Window& window, _IndicatorOpacity opacity)
1737 _EflLayer* pLayer = GetEflLayer(window);
1738 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1740 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1741 SysTryReturn(NID_UI, pEcoreEvas, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1743 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1745 Ecore_X_Illume_Indicator_Opacity_Mode mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1748 case _INDICATOR_OPACITY_UNKNOWN:
1749 mode = ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1751 case _INDICATOR_OPACITY_OPAQUE:
1752 mode = ECORE_X_ILLUME_INDICATOR_OPAQUE;
1754 case _INDICATOR_OPACITY_TRANSLUCENT:
1755 mode = ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1757 case _INDICATOR_OPACITY_TRANSPARENT:
1758 mode = ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1761 SysLogException(NID_UI, E_INVALID_ARG, "[E_INVALID_ARG] The specified data is not valid.");
1762 return E_INVALID_ARG;
1765 ecore_x_e_illume_indicator_opacity_set(win, mode);
1770 // [ToDo] Remove API
1772 _EcoreEvas::GetIndicatorOpacity(const _Window& window) const
1774 _EflLayer* pLayer = GetEflLayer(window);
1775 SysTryReturn(NID_UI, pLayer, _INDICATOR_OPACITY_UNKNOWN, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1777 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1778 SysTryReturn(NID_UI, pEcoreEvas, _INDICATOR_OPACITY_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1780 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1781 Ecore_X_Illume_Indicator_Opacity_Mode mode = ecore_x_e_illume_indicator_opacity_get(win);
1783 _IndicatorOpacity opacity = _INDICATOR_OPACITY_UNKNOWN;
1786 case ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN:
1787 opacity = _INDICATOR_OPACITY_UNKNOWN;
1789 case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1790 opacity = _INDICATOR_OPACITY_OPAQUE;
1792 case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1793 opacity = _INDICATOR_OPACITY_TRANSLUCENT;
1795 case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1796 opacity = _INDICATOR_OPACITY_TRANSPARENT;
1799 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1800 return _INDICATOR_OPACITY_UNKNOWN;
1803 SetLastResult(E_SUCCESS);
1809 _EcoreEvas::SetWindowActivationEnabled(const _Window& window, bool enable)
1811 _EflLayer* pLayer = GetEflLayer(window);
1812 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1814 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1815 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1817 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1819 Eina_Bool acceptsFocus;
1820 Ecore_X_Window_State_Hint initialState;
1821 Ecore_X_Pixmap iconPixmap;
1822 Ecore_X_Pixmap iconMask;
1823 Ecore_X_Window iconWindow;
1824 Ecore_X_Window windowGroup;
1827 ecore_x_icccm_hints_get(win, &acceptsFocus, &initialState, &iconPixmap, &iconMask, &iconWindow, &windowGroup, &isUrgent);
1828 ecore_x_icccm_hints_set(win, (enable ? EINA_TRUE : EINA_FALSE), initialState, iconPixmap, iconMask, iconWindow, windowGroup, isUrgent);
1832 _EcoreEvas::IsWindowActivationEnabled(const _Window& window)
1834 _EflLayer* pLayer = GetEflLayer(window);
1835 SysTryReturn(NID_UI, pLayer, true, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1837 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1838 SysTryReturn(NID_UI, pEcoreEvas, true, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1840 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1842 Eina_Bool acceptsFocus;
1843 Ecore_X_Window_State_Hint initialState;
1844 Ecore_X_Pixmap iconPixmap;
1845 Ecore_X_Pixmap iconMask;
1846 Ecore_X_Window iconWindow;
1847 Ecore_X_Window windowGroup;
1850 ecore_x_icccm_hints_get(win, &acceptsFocus, &initialState, &iconPixmap, &iconMask, &iconWindow, &windowGroup, &isUrgent);
1852 return (acceptsFocus ? true : false);
1856 _EcoreEvas::SetFloatingMode(const _Window& window, bool enable)
1858 _EflLayer* pLayer = GetEflLayer(window);
1859 SysTryReturn(NID_UI, pLayer, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1861 Evas_Object* pWinObj = pLayer->GetElmWin();
1862 SysTryReturn(NID_UI, pWinObj, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1864 elm_win_floating_mode_set(pWinObj, (enable ? EINA_TRUE : EINA_FALSE));
1869 // [ToDo] Remove API
1871 _EcoreEvas::GetEvas(void) const
1873 SysLog(NID_UI, "Do not use.");
1874 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
1880 _EflLayer* pLayer = GetEflLayer(*pWindow);
1886 return pLayer->GetEvas();
1889 // [ToDo] Remove API
1891 _EcoreEvas::GetEcoreEvas(void) const
1893 SysLog(NID_UI, "Do not use.");
1894 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
1900 _EflLayer* pLayer = GetEflLayer(*pWindow);
1906 return pLayer->GetEcoreEvas();
1909 // [ToDo] Remove API
1911 _EcoreEvas::GetWindowObject(void) const
1913 SysLog(NID_UI, "Do not use.");
1914 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
1920 _EflLayer* pLayer = GetEflLayer(*pWindow);
1926 return pLayer->GetElmWin();
1929 // [ToDo] Remove API
1931 _EcoreEvas::GetXWindow(void) const
1933 SysLog(NID_UI, "Do not use.");
1934 _Window* pWindow = _ControlManager::GetInstance()->GetCurrentFrame();
1940 _EflLayer* pLayer = GetEflLayer(*pWindow);
1946 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
1952 _EcoreEvas::AllowSetWindowBounds(bool allow)
1954 __changeBounds = allow;
1958 _EcoreEvas::IsWindowVisible(const _Window& window)
1960 _EflLayer* pLayer = GetEflLayer(window);
1961 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1963 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1964 SysTryReturn(NID_UI, pEcoreEvas, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1966 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1968 int ret = ecore_x_window_visible_get(win);
1979 // [ToDo] Remove API
1981 _EcoreEvas::SetQuickPanelScrollEnabled(const _Window& window, bool enable)
1984 _EflLayer* pLayer = GetEflLayer(window);
1985 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
1987 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
1988 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
1990 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
1991 Ecore_X_Atom atomPanelScrollable = ecore_x_atom_get("_E_MOVE_PANEL_SCROLLABLE_STATE");
1993 unsigned int val[3];
1994 ecore_x_window_prop_card32_get(win, atomPanelScrollable, val, 3);
2005 ecore_x_window_prop_card32_set(win, atomPanelScrollable, val, 3);
2009 // [ToDo] Remove API
2011 _EcoreEvas::IsQuickPanelScrollEnabled(const _Window& window)
2014 _EflLayer* pLayer = GetEflLayer(window);
2015 SysTryReturn(NID_UI, pLayer, false, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2017 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2018 SysTryReturn(NID_UI, pEcoreEvas, false, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2020 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2021 Ecore_X_Atom atomPanelScrollable = ecore_x_atom_get("_E_MOVE_PANEL_SCROLLABLE_STATE");
2023 unsigned int val[3];
2024 ecore_x_window_prop_card32_get(win, atomPanelScrollable, val, 3);
2040 _EcoreEvas::SetWindowLevel(const _Window& window, _WindowLevel level)
2042 _EflLayer* pLayer = GetEflLayer(window);
2043 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2045 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2046 SysTryReturnVoidResult(NID_UI, pEcoreEvas, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2048 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2049 ecore_x_icccm_transient_for_unset(win);
2051 if (level == _WINDOW_LEVEL_NORMAL)
2053 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NORMAL);
2055 else if (level == _WINDOW_LEVEL_NOTIFICATION_HIGH)
2057 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NOTIFICATION);
2058 utilx_set_system_notification_level((Display*)ecore_x_display_get(), win, UTILX_NOTIFICATION_LEVEL_HIGH);
2060 else if (level == _WINDOW_LEVEL_NOTIFICATION_MIDDLE)
2062 ecore_x_netwm_window_type_set(win, ECORE_X_WINDOW_TYPE_NOTIFICATION);
2063 utilx_set_system_notification_level((Display*)ecore_x_display_get(), win, UTILX_NOTIFICATION_LEVEL_NORMAL);
2066 SetLastResult(E_SUCCESS);
2070 _EcoreEvas::GetWindowLevel(const _Window& window) const
2072 _EflLayer* pLayer = GetEflLayer(window);
2073 SysTryReturn(NID_UI, pLayer, _WINDOW_LEVEL_UNKNOWN, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2075 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2076 SysTryReturn(NID_UI, pEcoreEvas, _WINDOW_LEVEL_UNKNOWN, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2078 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2080 Ecore_X_Window_Type type = ECORE_X_WINDOW_TYPE_UNKNOWN;
2081 ecore_x_netwm_window_type_get(win, &type);
2083 _WindowLevel winLevel = _WINDOW_LEVEL_UNKNOWN;
2084 if (type == ECORE_X_WINDOW_TYPE_NORMAL)
2086 winLevel = _WINDOW_LEVEL_NORMAL;
2088 else if (type == ECORE_X_WINDOW_TYPE_NOTIFICATION)
2090 Utilx_Notification_Level notificationLevel = utilx_get_system_notification_level((Display*)ecore_x_display_get(), win);
2092 if (notificationLevel == UTILX_NOTIFICATION_LEVEL_HIGH)
2094 winLevel = _WINDOW_LEVEL_NOTIFICATION_HIGH;
2096 else if (notificationLevel == UTILX_NOTIFICATION_LEVEL_NORMAL)
2098 winLevel = _WINDOW_LEVEL_NOTIFICATION_MIDDLE;
2102 SetLastResult(E_SUCCESS);
2108 _EcoreEvas::SetWindowBounds(const _Window& window, const Rectangle& bounds)
2110 if (__changeBounds == false)
2115 _EflLayer* pLayer = GetEflLayer(window);
2116 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2118 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2119 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2121 Evas_Object* pWinObject = pLayer->GetElmWin();
2122 SysTryReturnVoidResult(NID_UI, pWinObject, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2124 Rectangle winBounds = _CoordinateSystemUtils::Transform(bounds);
2126 int winX = winBounds.x;
2127 int winY = winBounds.y;
2131 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
2133 int rotate = ecore_evas_rotation_get(pEcoreEvas);
2137 winX = rootW - winBounds.y - winBounds.height;
2142 winY = rootH - winBounds.x - winBounds.width;
2145 winX = rootW - winBounds.x - winBounds.width;
2146 winY = rootH - winBounds.y - winBounds.height;
2152 evas_object_move(pWinObject, winX, winY);
2153 evas_object_resize(pWinObject, winBounds.width, winBounds.height);
2155 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x] Set bounds(rot = %d, %d, %d, %d, %d).", win, rotate, winX, winY, winBounds.width, winBounds.height);
2157 SetLastResult(E_SUCCESS);
2161 _EcoreEvas::SetWindowBounds(const _Window& window, const FloatRectangle& bounds)
2163 if (__changeBounds == false)
2168 _EflLayer* pLayer = GetEflLayer(window);
2169 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2171 Ecore_Evas* pEcoreEvas = pLayer->GetEcoreEvas();
2172 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pEcoreEvas);
2174 Evas_Object* pWinObject = pLayer->GetElmWin();
2175 SysTryReturnVoidResult(NID_UI, pWinObject, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2177 FloatRectangle winBoundsF = _CoordinateSystemUtils::Transform(bounds);
2178 Rectangle winBounds = _CoordinateSystemUtils::ConvertToInteger(winBoundsF);
2180 int winX = winBounds.x;
2181 int winY = winBounds.y;
2185 ecore_x_window_size_get(ecore_x_window_root_get(win), &rootW, &rootH);
2187 int rotate = ecore_evas_rotation_get(pEcoreEvas);
2191 winX = rootW - winBounds.y - winBounds.height;
2196 winY = rootH - winBounds.x - winBounds.width;
2199 winX = rootW - winBounds.x - winBounds.width;
2200 winY = rootH - winBounds.y - winBounds.height;
2206 evas_object_move(pWinObject, winX, winY);
2207 evas_object_resize(pWinObject, winBounds.width, winBounds.height);
2209 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x] Set bounds(rot = %d, %d, %d, %d, %d).", win, rotate, winX, winY, winBounds.width, winBounds.height);
2211 SetLastResult(E_SUCCESS);
2215 _EcoreEvas::SetWindowVisibleState(const _Window& window, bool visibleState)
2217 _EflLayer* pLayer = GetEflLayer(window);
2218 SysTryReturnVoidResult(NID_UI, pLayer, E_INVALID_ARG, "[E_INVALID_ARG] The window doesn't have a elf layer.");
2220 Evas_Object* pWinObj = pLayer->GetElmWin();
2221 SysTryReturnVoidResult(NID_UI, pWinObj, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2223 pLayer->SetShowState(visibleState);
2225 SetLastResult(E_SUCCESS);
2229 _EcoreEvas::SetOwner(const _Window& ownee, const _Control& owner)
2231 _Window* pOwnerWindow = owner.GetRootWindow();
2232 SysTryReturnVoidResult(NID_UI, pOwnerWindow, E_INVALID_ARG, "[E_INVALID_ARG] The owner doesn't have a root window.");
2234 _EflLayer* pOwnerLayer = GetEflLayer(*pOwnerWindow);
2235 SysTryReturnVoidResult(NID_UI, pOwnerLayer, E_INVALID_ARG, "[E_INVALID_ARG] The owner doesn't have a elf layer.");
2237 _EflLayer* pOwneeLayer = GetEflLayer(ownee);
2238 SysTryReturnVoidResult(NID_UI, pOwneeLayer, E_INVALID_ARG, "[E_INVALID_ARG] The ownee doesn't have a elf layer.");
2240 Ecore_X_Window ownerWin = (Ecore_X_Window) ecore_evas_window_get(pOwnerLayer->GetEcoreEvas());
2241 Ecore_X_Window owneeWin = (Ecore_X_Window) ecore_evas_window_get(pOwneeLayer->GetEcoreEvas());
2243 Ecore_X_Window_Type type;
2244 ecore_x_netwm_window_type_get(owneeWin, &type);
2245 if (type == ECORE_X_WINDOW_TYPE_NORMAL)
2247 SysLog(NID_UI, "SetZOrderGroup : 0x%x, NORMAL", owneeWin);
2248 ecore_x_icccm_transient_for_unset(owneeWin);
2249 ecore_x_icccm_transient_for_set(owneeWin, ownerWin);
2253 SysLog(NID_UI, "SetZOrderGroup : 0x%x, NOT NORMAL", owneeWin);
2256 #if !defined(WINDOW_BASE_ROTATE)
2257 int rotation = GetWindowRotation(*pOwnerWindow);
2258 RotateWindow(ownee, rotation);
2260 int* rotations = null;
2261 unsigned int count = 0;
2262 Eina_Bool ret = ecore_evas_wm_rotation_available_rotations_get(pOwnerLayer->GetEcoreEvas(), &rotations, &count);
2268 SetWindowAvailabledRotation(ownee, rotations, count);
2273 bool preferredRoation = pOwnerWindow->GetPreferredRotation();
2274 if (preferredRoation == true)
2276 int preferredRotation = ecore_evas_wm_rotation_preferred_rotation_get(pOwnerLayer->GetEcoreEvas());
2277 SetWindowPreferredRotation(ownee, preferredRotation);
2281 SetWindowPreferredRotation(ownee, -1);
2285 SetLastResult(E_SUCCESS);
2289 _EcoreEvas::GetWindowRotation(const _Window& window)
2291 _EflLayer* pLayer = GetEflLayer(window);
2297 int rotation = ecore_evas_rotation_get(pLayer->GetEcoreEvas());
2301 #if defined(WINDOW_BASE_ROTATE)
2303 _EcoreEvas::SetWindowPreferredRotation(const _Window& window, int rotation)
2305 _EflLayer* pLayer = GetEflLayer(window);
2311 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2312 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x] Set window preferred rotation(%d).", win, rotation);
2313 ecore_evas_wm_rotation_preferred_rotation_set(pLayer->GetEcoreEvas(), rotation);
2315 _Window* pWindow = const_cast<_Window*>(&window);
2320 pWindow->SetPreferredRotation(false);
2324 pWindow->SetPreferredRotation(true);
2330 _EcoreEvas::SetWindowAvailabledRotation(const _Window& window, int* rotations, unsigned int count)
2332 _EflLayer* pLayer = GetEflLayer(window);
2338 Ecore_X_Window win = (Ecore_X_Window) ecore_evas_window_get(pLayer->GetEcoreEvas());
2339 SysLog(NID_UI, "[Window Manager Rotation][Window : 0x%x] Set window available rotation(%d).", win, count);
2340 ecore_evas_wm_rotation_available_rotations_set(pLayer->GetEcoreEvas(), rotations, count);
2344 _EcoreEvas::RegisterWindowStateCallback(const _Window& window)
2346 _EflLayer* pLayer = GetEflLayer(window);
2352 ecore_evas_callback_state_change_set(pLayer->GetEcoreEvas(), OnWindowStateChanged);
2356 // [ToDo] Remove API
2358 _EcoreEvas::GetFrame(void) const
2360 SysLog(NID_UI, "Do not use.");
2364 // [ToDo] Remove API
2366 _EcoreEvas::GetRootVisualElement(void)const
2368 SysLog(NID_UI, "Do not use.");
2372 // [ToDo] Remove API
2374 _EcoreEvas::SetFrame(const _Control& control)
2376 SysLog(NID_UI, "Do not use.");
2377 __pFrame = const_cast<_Control*>(&control);
2381 _EcoreEvas::GetSelectedCbhmItem(Ecore_X_Atom* pDataType, char** pBuffer) const
2383 Ecore_X_Window cbhmWin = GetCbhmWindow();
2384 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(ATOM_CBHM_SELECTED_ITEM);
2385 Ecore_X_Atom atomItemType = 0;
2387 char* pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmItem, &atomItemType, NULL);
2390 Ecore_X_Atom x_atom_cbhm_error = ecore_x_atom_get(ATOM_CBHM_ERROR);
2391 if (atomItemType == x_atom_cbhm_error)
2408 *pDataType = atomItemType;
2418 _EcoreEvas::IsAccessibilityScreenReaderActivated(void)
2420 Eina_Bool acc = elm_config_access_get();
2424 void* _GetEcoreEvasHandle(void)
2426 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();
2427 if (pEcoreEvasMgr == null)
2432 _EcoreEvas* pUiEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();
2433 if (pUiEcoreEvas == null)
2438 return (void*)pUiEcoreEvas->GetEcoreEvas();
2441 void* _GetEvasHandle(void)
2443 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();
2444 if (pEcoreEvasMgr == null)
2449 _EcoreEvas* pUiEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();
2450 if (pUiEcoreEvas == null)
2455 return (void*)pUiEcoreEvas->GetEvas();
2459 _EcoreEvas::InitializeAtomList(void)
2461 __atomList[_ATOM_TARGETS].pName = "TARGETS";
2462 __atomList[_ATOM_TARGETS].formats = _CLIP_FORMAT_TARGETS;
2463 __atomList[_ATOM_TARGETS].convert = ConvertClipIntoTarget;
2464 __atomList[_ATOM_TARGETS].response = RequestClip;
2465 __atomList[_ATOM_TARGETS].notify = NotifyTarget;
2466 __atomList[_ATOM_TARGETS].atom = 0;
2468 __atomList[_ATOM_ATOM].pName = "ATOM";
2469 __atomList[_ATOM_ATOM].formats = _CLIP_FORMAT_TARGETS;
2470 __atomList[_ATOM_ATOM].convert = ConvertClipIntoTarget;
2471 __atomList[_ATOM_ATOM].response = RequestClip;
2472 __atomList[_ATOM_ATOM].notify = NotifyTarget;
2473 __atomList[_ATOM_ATOM].atom = 0;
2475 __atomList[_ATOM_XELM].pName = "application/x-elementary-markup";
2476 __atomList[_ATOM_XELM].formats = _CLIP_FORMAT_MARKUP;
2477 __atomList[_ATOM_XELM].convert = ConvertClipIntoEdje;
2478 __atomList[_ATOM_XELM].response = null;
2479 __atomList[_ATOM_XELM].notify = NotifyEdje;
2480 __atomList[_ATOM_XELM].atom = 0;
2482 __atomList[_ATOM_TEXT_URI].pName = "text/uri";
2483 __atomList[_ATOM_TEXT_URI].formats = _CLIP_FORMAT_IMAGE;
2484 __atomList[_ATOM_TEXT_URI].convert = ConvertClipIntoUri;
2485 __atomList[_ATOM_TEXT_URI].response = null;
2486 __atomList[_ATOM_TEXT_URI].notify = NotifyUri;
2487 __atomList[_ATOM_TEXT_URI].atom = 0;
2489 __atomList[_ATOM_TEXT_URILIST].pName = "text/uri-list";
2490 __atomList[_ATOM_TEXT_URILIST].formats = _CLIP_FORMAT_IMAGE;
2491 __atomList[_ATOM_TEXT_URILIST].convert = ConvertClipIntoUri;
2492 __atomList[_ATOM_TEXT_URILIST].response = null;
2493 __atomList[_ATOM_TEXT_URILIST].notify = NotifyUri;
2494 __atomList[_ATOM_TEXT_URILIST].atom = 0;
2496 __atomList[_ATOM_TEXT_X_VCARD].pName = "text/x-vcard";
2497 __atomList[_ATOM_TEXT_X_VCARD].formats = _CLIP_FORMAT_VCARD;
2498 __atomList[_ATOM_TEXT_X_VCARD].convert = null;
2499 __atomList[_ATOM_TEXT_X_VCARD].response = null;
2500 __atomList[_ATOM_TEXT_X_VCARD].notify = null;
2501 __atomList[_ATOM_TEXT_X_VCARD].atom = 0;
2503 __atomList[_ATOM_IMAGE_PNG].pName = "image/png";
2504 __atomList[_ATOM_IMAGE_PNG].formats = _CLIP_FORMAT_IMAGE;
2505 __atomList[_ATOM_IMAGE_PNG].convert = ConvertClipIntoImage;
2506 __atomList[_ATOM_IMAGE_PNG].response = null;
2507 __atomList[_ATOM_IMAGE_PNG].notify = NotifyImage;
2508 __atomList[_ATOM_IMAGE_PNG].atom = 0;
2510 __atomList[_ATOM_IMAGE_JPEG].pName = "image/jpeg";
2511 __atomList[_ATOM_IMAGE_JPEG].formats = _CLIP_FORMAT_IMAGE;
2512 __atomList[_ATOM_IMAGE_JPEG].convert = ConvertClipIntoImage;
2513 __atomList[_ATOM_IMAGE_JPEG].response = null;
2514 __atomList[_ATOM_IMAGE_JPEG].notify = NotifyImage;
2515 __atomList[_ATOM_IMAGE_JPEG].atom = 0;
2517 __atomList[_ATOM_IMAGE_BMP].pName = "image/x-ms-bmp";
2518 __atomList[_ATOM_IMAGE_BMP].formats = _CLIP_FORMAT_IMAGE;
2519 __atomList[_ATOM_IMAGE_BMP].convert = ConvertClipIntoImage;
2520 __atomList[_ATOM_IMAGE_BMP].response = null;
2521 __atomList[_ATOM_IMAGE_BMP].notify = NotifyImage;
2522 __atomList[_ATOM_IMAGE_BMP].atom = 0;
2524 __atomList[_ATOM_IMAGE_GIF].pName = "image/gif";
2525 __atomList[_ATOM_IMAGE_GIF].formats = _CLIP_FORMAT_IMAGE;
2526 __atomList[_ATOM_IMAGE_GIF].convert = ConvertClipIntoImage;
2527 __atomList[_ATOM_IMAGE_GIF].response = null;
2528 __atomList[_ATOM_IMAGE_GIF].notify = NotifyImage;
2529 __atomList[_ATOM_IMAGE_GIF].atom = 0;
2531 __atomList[_ATOM_IMAGE_TIFF].pName = "image/tiff";
2532 __atomList[_ATOM_IMAGE_TIFF].formats = _CLIP_FORMAT_IMAGE;
2533 __atomList[_ATOM_IMAGE_TIFF].convert = ConvertClipIntoImage;
2534 __atomList[_ATOM_IMAGE_TIFF].response = null;
2535 __atomList[_ATOM_IMAGE_TIFF].notify = NotifyImage;
2536 __atomList[_ATOM_IMAGE_TIFF].atom = 0;
2538 __atomList[_ATOM_IMAGE_SVG].pName = "image/svg+xml";
2539 __atomList[_ATOM_IMAGE_SVG].formats = _CLIP_FORMAT_IMAGE;
2540 __atomList[_ATOM_IMAGE_SVG].convert = ConvertClipIntoImage;
2541 __atomList[_ATOM_IMAGE_SVG].response = null;
2542 __atomList[_ATOM_IMAGE_SVG].notify = NotifyImage;
2543 __atomList[_ATOM_IMAGE_SVG].atom = 0;
2545 __atomList[_ATOM_IMAGE_XPM].pName = "image/x-xpixmap";
2546 __atomList[_ATOM_IMAGE_XPM].formats = _CLIP_FORMAT_IMAGE;
2547 __atomList[_ATOM_IMAGE_XPM].convert = ConvertClipIntoImage;
2548 __atomList[_ATOM_IMAGE_XPM].response = null;
2549 __atomList[_ATOM_IMAGE_XPM].notify = NotifyImage;
2550 __atomList[_ATOM_IMAGE_XPM].atom = 0;
2552 __atomList[_ATOM_IMAGE_TGA].pName = "image/x-tga";
2553 __atomList[_ATOM_IMAGE_TGA].formats = _CLIP_FORMAT_IMAGE;
2554 __atomList[_ATOM_IMAGE_TGA].convert = ConvertClipIntoImage;
2555 __atomList[_ATOM_IMAGE_TGA].response = null;
2556 __atomList[_ATOM_IMAGE_TGA].notify = NotifyImage;
2557 __atomList[_ATOM_IMAGE_TGA].atom = 0;
2559 __atomList[_ATOM_IMAGE_PPM].pName = "image/x-portable-pixmap";
2560 __atomList[_ATOM_IMAGE_PPM].formats = _CLIP_FORMAT_IMAGE;
2561 __atomList[_ATOM_IMAGE_PPM].convert = ConvertClipIntoImage;
2562 __atomList[_ATOM_IMAGE_PPM].response = null;
2563 __atomList[_ATOM_IMAGE_PPM].notify = NotifyImage;
2564 __atomList[_ATOM_IMAGE_PPM].atom = 0;
2566 __atomList[_ATOM_TEXT_HTML_UTF8].pName = "text/html;charset=utf-8";
2567 __atomList[_ATOM_TEXT_HTML_UTF8].formats = _CLIP_FORMAT_HTML;
2568 __atomList[_ATOM_TEXT_HTML_UTF8].convert = ConvertClipIntoHtml;
2569 __atomList[_ATOM_TEXT_HTML_UTF8].response = null;
2570 __atomList[_ATOM_TEXT_HTML_UTF8].notify = NotifyHtml;
2571 __atomList[_ATOM_TEXT_HTML_UTF8].atom = 0;
2573 __atomList[_ATOM_TEXT_HTML].pName = "text/html";
2574 __atomList[_ATOM_TEXT_HTML].formats = _CLIP_FORMAT_HTML;
2575 __atomList[_ATOM_TEXT_HTML].convert = ConvertClipIntoHtml;
2576 __atomList[_ATOM_TEXT_HTML].response = null;
2577 __atomList[_ATOM_TEXT_HTML].notify = NotifyHtml;
2578 __atomList[_ATOM_TEXT_HTML].atom = 0;
2580 __atomList[_ATOM_STRING_UTF8].pName = "UTF8_STRING";
2581 __atomList[_ATOM_STRING_UTF8].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
2582 __atomList[_ATOM_STRING_UTF8].convert = ConvertClipIntoText;
2583 __atomList[_ATOM_STRING_UTF8].response = null;
2584 __atomList[_ATOM_STRING_UTF8].notify = NotifyText;
2585 __atomList[_ATOM_STRING_UTF8].atom = 0;
2587 __atomList[_ATOM_STRING].pName = "STRING";
2588 __atomList[_ATOM_STRING].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
2589 __atomList[_ATOM_STRING].convert = ConvertClipIntoText;
2590 __atomList[_ATOM_STRING].response = null;
2591 __atomList[_ATOM_STRING].notify = NotifyText;
2592 __atomList[_ATOM_STRING].atom = 0;
2594 __atomList[_ATOM_TEXT].pName = "TEXT";
2595 __atomList[_ATOM_TEXT].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
2596 __atomList[_ATOM_TEXT].convert = ConvertClipIntoText;
2597 __atomList[_ATOM_TEXT].response = null;
2598 __atomList[_ATOM_TEXT].notify = null;
2599 __atomList[_ATOM_TEXT].atom = 0;
2601 __atomList[_ATOM_TEXT_PLAIN_UTF8].pName = "text/plain;charset=utf-8";
2602 __atomList[_ATOM_TEXT_PLAIN_UTF8].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
2603 __atomList[_ATOM_TEXT_PLAIN_UTF8].convert = ConvertClipIntoText;
2604 __atomList[_ATOM_TEXT_PLAIN_UTF8].response = null;
2605 __atomList[_ATOM_TEXT_PLAIN_UTF8].notify = null;
2606 __atomList[_ATOM_TEXT_PLAIN_UTF8].atom = 0;
2608 __atomList[_ATOM_TEXT_PLAIN].pName = "text/plain";
2609 __atomList[_ATOM_TEXT_PLAIN].formats = (_ClipFormat) (_CLIP_FORMAT_TEXT | _CLIP_FORMAT_MARKUP | _CLIP_FORMAT_HTML);
2610 __atomList[_ATOM_TEXT_PLAIN].convert = ConvertClipIntoText;
2611 __atomList[_ATOM_TEXT_PLAIN].response = null;
2612 __atomList[_ATOM_TEXT_PLAIN].notify = null;
2613 __atomList[_ATOM_TEXT_PLAIN].atom = 0;
2615 __clipList[_CLIP_TYPE_PRIMARY].selection = ECORE_X_SELECTION_PRIMARY;
2616 __clipList[_CLIP_TYPE_PRIMARY].set = ecore_x_selection_primary_set;
2617 __clipList[_CLIP_TYPE_PRIMARY].clear = ecore_x_selection_primary_clear;
2618 __clipList[_CLIP_TYPE_PRIMARY].request = ecore_x_selection_primary_request;
2619 __clipList[_CLIP_TYPE_PRIMARY].active = false;
2620 __clipList[_CLIP_TYPE_PRIMARY].pBuffer = null;
2621 __clipList[_CLIP_TYPE_PRIMARY].pRetrievedBuffer = null;
2622 __clipList[_CLIP_TYPE_PRIMARY].bufferLength = 0;
2623 __clipList[_CLIP_TYPE_PRIMARY].completed = false;
2625 __clipList[_CLIP_TYPE_SECONDARY].selection = ECORE_X_SELECTION_SECONDARY;
2626 __clipList[_CLIP_TYPE_SECONDARY].set = ecore_x_selection_secondary_set;
2627 __clipList[_CLIP_TYPE_SECONDARY].clear = ecore_x_selection_secondary_clear;
2628 __clipList[_CLIP_TYPE_SECONDARY].request = ecore_x_selection_secondary_request;
2629 __clipList[_CLIP_TYPE_SECONDARY].active = false;
2630 __clipList[_CLIP_TYPE_SECONDARY].pBuffer = null;
2631 __clipList[_CLIP_TYPE_SECONDARY].pRetrievedBuffer = null;
2632 __clipList[_CLIP_TYPE_SECONDARY].bufferLength = 0;
2633 __clipList[_CLIP_TYPE_SECONDARY].completed = false;
2635 __clipList[_CLIP_TYPE_CLIPBOARD].selection = ECORE_X_SELECTION_CLIPBOARD;
2636 __clipList[_CLIP_TYPE_CLIPBOARD].set = ecore_x_selection_clipboard_set;
2637 __clipList[_CLIP_TYPE_CLIPBOARD].clear = ecore_x_selection_clipboard_clear;
2638 __clipList[_CLIP_TYPE_CLIPBOARD].request = ecore_x_selection_clipboard_request;
2639 __clipList[_CLIP_TYPE_CLIPBOARD].active = false;
2640 __clipList[_CLIP_TYPE_CLIPBOARD].pBuffer = null;
2641 __clipList[_CLIP_TYPE_CLIPBOARD].pRetrievedBuffer = null;
2642 __clipList[_CLIP_TYPE_CLIPBOARD].bufferLength = 0;
2643 __clipList[_CLIP_TYPE_CLIPBOARD].completed = false;
2645 __clipList[_CLIP_TYPE_XDND].selection = ECORE_X_SELECTION_XDND;
2646 __clipList[_CLIP_TYPE_XDND].request = ecore_x_selection_xdnd_request;
2647 __clipList[_CLIP_TYPE_XDND].active = false;
2648 __clipList[_CLIP_TYPE_XDND].pBuffer = null;
2649 __clipList[_CLIP_TYPE_XDND].pRetrievedBuffer = null;
2650 __clipList[_CLIP_TYPE_XDND].bufferLength = 0;
2651 __clipList[_CLIP_TYPE_XDND].completed = false;
2653 for (int i = 0; i < _ATOM_MAX; i++)
2655 __atomList[i].atom = ecore_x_atom_get(__atomList[i].pName);
2656 //ecore_x_selection_converter_atom_add(__atomList[i].atom, __atomList[i].convert);
2658 SysLog(NID_UI, "[Clipboard] __atomList[%d] : pName = %s, atom = %d", i, __atomList[i].pName, __atomList[i].atom);
2661 result r = E_SUCCESS;
2663 __pClearClip = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_CLEAR, ClearClip, NULL);
2664 SysTryCatch(NID_UI, __pClearClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2666 __pNotifyClip = ecore_event_handler_add(ECORE_X_EVENT_SELECTION_NOTIFY, NotifyClip, NULL);
2667 SysTryCatch(NID_UI, __pNotifyClip, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2669 __pClipboardClosed = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, OnClipboardClosed, null);
2670 SysTryCatch(NID_UI, __pClipboardClosed, r = E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error occurred.");
2672 __atomRotateRootAngle = ecore_x_atom_get("_E_ILLUME_ROTATE_ROOT_ANGLE");
2673 __atomAccessibility = ecore_x_atom_get("_E_MOD_ACC_SCR_READER_");
2678 for (int i = 0; i < _ATOM_MAX; i++)
2680 if (__atomList[i].atom)
2682 ecore_x_selection_converter_atom_del(__atomList[i].atom);
2688 ecore_event_handler_del(__pClearClip);
2689 __pClearClip = null;
2694 ecore_event_handler_del(__pNotifyClip);
2695 __pNotifyClip = null;
2698 if (__pClipboardClosed)
2700 ecore_event_handler_del(__pClipboardClosed);
2701 __pClipboardClosed = null;
2708 _EcoreEvas::IsValidClipFormat(_ClipFormat clipFormat)
2710 return ((_CLIP_FORMAT_TEXT & clipFormat) ||
2711 (_CLIP_FORMAT_MARKUP & clipFormat) ||
2712 (_CLIP_FORMAT_IMAGE & clipFormat) ||
2713 (_CLIP_FORMAT_VCARD & clipFormat) ||
2714 (_CLIP_FORMAT_HTML & clipFormat));
2718 _EcoreEvas::GetCbhmWindow(void) const
2720 Ecore_X_Atom atomCbhm = ecore_x_atom_get(ATOM_CBHM_WINDOW_NAME);
2721 Ecore_X_Window cbhmWin = 0;
2723 unsigned char* pBuf = NULL;
2725 int ret = ecore_x_window_prop_property_get(0, atomCbhm, XA_WINDOW, 0, &pBuf, &num);
2729 memcpy(&cbhmWin, pBuf, sizeof(Ecore_X_Window));
2741 _EcoreEvas::SendCbhmMessage(Ecore_X_Window xwin, const char* pMsg)
2743 Ecore_X_Window cbhmWin = GetCbhmWindow();
2744 Ecore_X_Atom atomCbhmMsg = ecore_x_atom_get(ATOM_CBHM_MSG);
2746 if (!cbhmWin || !atomCbhmMsg)
2751 XClientMessageEvent m;
2752 memset(&m, 0, sizeof(m));
2753 m.type = ClientMessage;
2754 m.display = (Display*)ecore_x_display_get();
2756 m.message_type = atomCbhmMsg;
2758 snprintf(m.data.b, 20, "%s", pMsg);
2760 XSendEvent((Display*)ecore_x_display_get(), cbhmWin, False, NoEventMask, (XEvent*)&m);
2771 _EcoreEvas::SetCbhmItem(Ecore_X_Window xwin, Ecore_X_Atom dataType, char* pItemData)
2773 Ecore_X_Window cbhmWin = GetCbhmWindow();
2774 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(ATOM_CBHM_ITEM);
2777 ecore_x_window_prop_property_set(cbhmWin, atomCbhmItem, dataType, 8, pItemData, strlen(pItemData) + 1);
2780 if (SendCbhmMessage(xwin, ATOM_CBHM_SET_ITEM))
2789 _EcoreEvas::GetCbhmReply(Ecore_X_Window xwin, Ecore_X_Atom property, Ecore_X_Atom* pDataType, int* pNum) const
2791 unsigned char* pData = null;
2810 long unsigned int numRet = 0;
2811 long unsigned int bytes = 0;
2815 unsigned char* pPropRet = null;
2816 Ecore_X_Atom typeRet;
2818 ret = XGetWindowProperty((Display*)ecore_x_display_get(), xwin, property, 0, LONG_MAX, False,
2819 ecore_x_window_prop_any_type(), (Atom*)&typeRet, &sizeRet, &numRet, &bytes, &pPropRet);
2831 if (!(pData = (unsigned char*)malloc(numRet * sizeRet / 8)))
2840 for (i = 0; i < numRet; i++)
2841 (pData)[i] = pPropRet[i];
2844 for (i = 0; i < numRet; i++)
2845 ((unsigned short *)pData)[i] = ((unsigned short *)pPropRet)[i];
2848 for (i = 0; i < numRet; i++)
2849 ((unsigned int *)pData)[i] = ((unsigned long *)pPropRet)[i];
2865 *pDataType = typeRet;
2872 _EcoreEvas::GetCbhmItemCount(void) const
2877 Ecore_X_Atom atomCbhmCountGet = ecore_x_atom_get(ATOM_CBHM_COUNT_GET);
2878 Ecore_X_Window cbhmWin = GetCbhmWindow();
2880 pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmCountGet, null, null);
2892 _EcoreEvas::GetCbhmItem(int index, Ecore_X_Atom* pDataType, char** pBuffer) const
2901 *(int*)pDataType = 0;
2904 Ecore_X_Window cbhmWin = GetCbhmWindow();
2908 snprintf(sendBuf, 20, "CBHM_ITEM%d", index);
2909 Ecore_X_Atom atomCbhmItem = ecore_x_atom_get(sendBuf);
2910 Ecore_X_Atom atomItemType = 0;
2912 pRet = (char*)GetCbhmReply(cbhmWin, atomCbhmItem, &atomItemType, NULL);
2926 *pDataType = atomItemType;
2929 Ecore_X_Atom x_atom_cbhm_error = ecore_x_atom_get(ATOM_CBHM_ERROR);
2930 if (atomItemType == x_atom_cbhm_error)
2948 // [ToDo] Remove API
2950 _AddActiveWindowEventListener(const _IActiveWindowEventListener& listener)
2952 GetEcoreEvasMgr()->GetEcoreEvas()->AddActiveWindowEventListener(listener);
2955 // [ToDo] Remove API
2957 _RemoveActiveWindowEventListener(const _IActiveWindowEventListener& listener)
2959 GetEcoreEvasMgr()->GetEcoreEvas()->RemoveActiveWindowEventListener(listener);
2962 // [ToDo] Remove API
2963 _OSP_EXPORT_ unsigned int
2964 _GetActiveWindow(void)
2966 return GetEcoreEvasMgr()->GetEcoreEvas()->GetActiveWindow();
2969 // [ToDo] Remove API
2971 _GetProcessId(unsigned int window)
2973 return GetEcoreEvasMgr()->GetEcoreEvas()->GetProcessId(window);