2 // Open Service Platform
\r
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
\r
5 // Licensed under the Apache License, Version 2.0 (the License);
\r
6 // you may not use this file except in compliance with the License.
\r
7 // You may obtain a copy of the License at
\r
9 // http://www.apache.org/licenses/LICENSE-2.0
\r
11 // Unless required by applicable law or agreed to in writing, software
\r
12 // distributed under the License is distributed on an "AS IS" BASIS,
\r
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
14 // See the License for the specific language governing permissions and
\r
15 // limitations under the License.
\r
19 * @file FUiIme_EcoreEventHandler.cpp
\r
20 * @brief This is the implementation file for the %_EcoreEventHandler class.
\r
22 * This implementation file contains definition of the %_EcoreEventHandler class.
\r
27 #include <Ecore_X.h>
\r
28 #include <Elementary.h>
\r
30 #include <FBaseSysLog.h>
\r
32 #include "FUi_EcoreEvas.h"
\r
33 #include "FUi_EcoreEvasMgr.h"
\r
34 #include "FUiIme_EcoreEventHandler.h"
\r
35 #include "FUiIme_TargetWindowAgent.h"
\r
37 using namespace Tizen::Ui;
\r
39 namespace Tizen { namespace Ui { namespace Ime {
\r
41 _EcoreEventHandler* _EcoreEventHandler::__pEcoreEventHandler = null;
\r
43 _EcoreEventHandler::_EcoreEventHandler(void)
\r
44 :__pClientMessageHandler(null)
\r
48 _EcoreEventHandler::~_EcoreEventHandler(void)
\r
50 __pEcoreEventHandler = null;
\r
52 if (__pClientMessageHandler)
\r
54 ecore_event_handler_del(__pClientMessageHandler);
\r
55 __pClientMessageHandler = null;
\r
60 _EcoreEventHandler::GetInstance(void)
\r
62 if (__pEcoreEventHandler == null)
\r
64 __pEcoreEventHandler = new(std::nothrow) _EcoreEventHandler();
\r
65 SysTryReturn(NID_UI_IME, __pEcoreEventHandler, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
\r
68 return __pEcoreEventHandler;
\r
72 _EcoreEventHandler::Activate(void)
\r
74 result r = E_SUCCESS;
\r
77 SysTryReturnResult(NID_UI_IME, r == E_SUCCESS, r, "Propagating.");
\r
79 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();
\r
80 SysTryReturnResult(NID_UI_IME, pEcoreEvasMgr, E_OBJ_NOT_FOUND, "The required instance does not exist.");
\r
81 _EcoreEvas* pEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();
\r
82 SysTryReturnResult(NID_UI_IME, pEcoreEvas, E_OBJ_NOT_FOUND, "The required instance does not exist.");
\r
83 Evas_Object* pEvasObject = pEcoreEvas->GetWindowObject();
\r
84 SysTryReturnResult(NID_UI_IME, pEvasObject, E_OBJ_NOT_FOUND, "The required instance does not exist.");
\r
86 __pClientMessageHandler = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE, ClientMessageCallback, pEvasObject);
\r
87 SysTryReturnResult(NID_UI_IME, __pClientMessageHandler, E_SYSTEM, "A failure occurs from the underlying system.");
\r
93 _EcoreEventHandler::Deactivate(void)
\r
95 result r = E_SUCCESS;
\r
97 if (__pClientMessageHandler)
\r
100 pData = ecore_event_handler_del(__pClientMessageHandler);
\r
101 SysTryReturnResult(NID_UI_IME, pData, E_SYSTEM, "A failure occurs from the underlying system.");
\r
103 __pClientMessageHandler = null;
\r
110 _EcoreEventHandler::ClientMessageCallback(void* pData, int type, void* pEvent)
\r
112 SysLog(NID_UI_IME, "The client message callback has been called.");
\r
114 result r = E_SUCCESS;
\r
116 Ecore_X_Event_Client_Message* pMessage = null;
\r
117 pMessage = static_cast<Ecore_X_Event_Client_Message*>(pEvent);
\r
118 SysTryReturn(NID_UI_IME, pMessage, ECORE_CALLBACK_CANCEL, E_SYSTEM, "[E_SYSTEM] A failure occurs from the underlying system.");
\r
120 if (pMessage->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE)
\r
122 Evas_Object* pEvasObject = null;
\r
123 pEvasObject = reinterpret_cast<Evas_Object*>(pData);
\r
124 SysTryReturn(NID_UI_IME, pEvasObject, ECORE_CALLBACK_CANCEL, E_SYSTEM, "[E_SYSTEM] A failure occurs from the underlying system.");
\r
126 Ecore_X_Window keyboardWindow = elm_win_xwindow_get(pEvasObject);
\r
127 Ecore_X_Window activeWindow = pMessage->data.l[1];
\r
129 _TargetWindowAgent* pTargetWindowAgent = _TargetWindowAgent::GetInstance();
\r
130 r = GetLastResult();
\r
131 SysTryReturn(NID_UI_IME, pTargetWindowAgent, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));
\r
133 if (pTargetWindowAgent->IsActive(keyboardWindow, activeWindow))
\r
135 int angle = pMessage->data.l[0];
\r
137 r = pTargetWindowAgent->SetOrientation(angle);
\r
138 SysTryReturn(NID_UI_IME, r == E_SUCCESS, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));
\r
142 return ECORE_CALLBACK_RENEW;
\r
145 }}} // Tizen::Ui::Ime
\r