IME rotation sync related works.
[framework/osp/ime.git] / src / FUiIme_EcoreEventHandler.cpp
1 //\r
2 // Open Service Platform\r
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.\r
4 //\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
8 //\r
9 //     http://www.apache.org/licenses/LICENSE-2.0\r
10 //\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
16 //\r
17 \r
18 /**\r
19  * @file        FUiIme_EcoreEventHandler.cpp\r
20  * @brief       This is the implementation file for the %_EcoreEventHandler class.\r
21  *\r
22  * This implementation file contains definition of the %_EcoreEventHandler class.\r
23  */\r
24 \r
25 #include <new>\r
26 \r
27 #include <Ecore_X.h>\r
28 #include <Elementary.h>\r
29 \r
30 #include <FBaseSysLog.h>\r
31 \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
36 \r
37 using namespace Tizen::Ui;\r
38 \r
39 namespace Tizen { namespace Ui { namespace Ime {\r
40 \r
41 _EcoreEventHandler* _EcoreEventHandler::__pEcoreEventHandler = null;\r
42 \r
43 _EcoreEventHandler::_EcoreEventHandler(void)\r
44         :__pClientMessageHandler(null)\r
45 {\r
46 }\r
47 \r
48 _EcoreEventHandler::~_EcoreEventHandler(void)\r
49 {\r
50         __pEcoreEventHandler = null;\r
51 \r
52         if (__pClientMessageHandler)\r
53         {\r
54                 ecore_event_handler_del(__pClientMessageHandler);\r
55                 __pClientMessageHandler = null;\r
56         }\r
57 }\r
58 \r
59 _EcoreEventHandler*\r
60 _EcoreEventHandler::GetInstance(void)\r
61 {\r
62         if (__pEcoreEventHandler == null)\r
63         {\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
66         }\r
67 \r
68         return __pEcoreEventHandler;\r
69 }\r
70 \r
71 result\r
72 _EcoreEventHandler::Activate(void)\r
73 {\r
74         result r = E_SUCCESS;\r
75 \r
76         r = Deactivate();\r
77         SysTryReturnResult(NID_UI_IME, r == E_SUCCESS, r, "Propagating.");\r
78 \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
85 \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
88 \r
89         return r;\r
90 }\r
91 \r
92 result\r
93 _EcoreEventHandler::Deactivate(void)\r
94 {\r
95         result r = E_SUCCESS;\r
96 \r
97         if (__pClientMessageHandler)\r
98         {\r
99                 void* pData = null;\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
102 \r
103                 __pClientMessageHandler = null;\r
104         }\r
105 \r
106         return r;\r
107 }\r
108 \r
109 Eina_Bool\r
110 _EcoreEventHandler::ClientMessageCallback(void* pData, int type, void* pEvent)\r
111 {\r
112         SysLog(NID_UI_IME, "The client message callback has been called.");\r
113 \r
114         Ecore_X_Event_Client_Message* pMessage = null;\r
115         pMessage = static_cast<Ecore_X_Event_Client_Message*>(pEvent);\r
116         SysTryReturn(NID_UI_IME, pMessage, ECORE_CALLBACK_CANCEL, E_SYSTEM, "[E_SYSTEM] A failure occurs from the underlying system.");\r
117 \r
118 /* set orientation of the input panel\r
119         result r = E_SUCCESS;\r
120 \r
121     if (pMessage->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE)\r
122         {\r
123                 Evas_Object* pEvasObject = null;\r
124                 pEvasObject = reinterpret_cast<Evas_Object*>(pData);\r
125                 SysTryReturn(NID_UI_IME, pEvasObject, ECORE_CALLBACK_CANCEL, E_SYSTEM, "[E_SYSTEM] A failure occurs from the underlying system.");\r
126 \r
127                 Ecore_X_Window inputPanelWindow = elm_win_xwindow_get(pEvasObject);\r
128                 Ecore_X_Window activeWindow = pMessage->data.l[1];\r
129 \r
130                 _TargetWindowAgent* pTargetWindowAgent = _TargetWindowAgent::GetInstance();\r
131                 r = GetLastResult();\r
132                 SysTryReturn(NID_UI_IME, pTargetWindowAgent, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));\r
133 \r
134                 if (pTargetWindowAgent->IsActive(inputPanelWindow, activeWindow))\r
135                 {\r
136                         int angle = pMessage->data.l[0];\r
137 \r
138                         r = pTargetWindowAgent->SetOrientation(angle);\r
139                         SysTryReturn(NID_UI_IME, r == E_SUCCESS, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));\r
140                 }\r
141         }\r
142 */\r
143         if (pMessage->message_type == ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST)\r
144         {\r
145                 SysLog(NID_UI_IME, "The client message callback related to the ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST has been called.");\r
146 \r
147                 _EcoreEvasMgr* pEcoreEvasMgr = GetEcoreEvasMgr();\r
148                 SysTryReturn(NID_UI_IME, pEcoreEvasMgr, ECORE_CALLBACK_CANCEL, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The required instance does not exist.");\r
149                 _EcoreEvas* pEcoreEvas = pEcoreEvasMgr->GetEcoreEvas();\r
150                 SysTryReturn(NID_UI_IME, pEcoreEvas, ECORE_CALLBACK_CANCEL, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The required instance does not exist.");\r
151                 Evas_Object* pEvasObject = pEcoreEvas->GetWindowObject();\r
152                 SysTryReturn(NID_UI_IME, pEvasObject, ECORE_CALLBACK_CANCEL, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The required instance does not exist.");\r
153                 Ecore_X_Window inputPanelWindow = elm_win_xwindow_get(pEvasObject);\r
154 \r
155                 SysLog(NID_UI_IME, "The handle of the window which is requested to rotate is %x and that of the input panel window is %x.", pMessage->win, inputPanelWindow);\r
156                 if (pMessage->win == inputPanelWindow)\r
157                 {\r
158 /* set orientation of the input panel\r
159                         int angle = pMessage->data.l[1];\r
160 \r
161                         _TargetWindowAgent* pTargetWindowAgent = _TargetWindowAgent::GetInstance();\r
162                         r = GetLastResult();\r
163                         SysTryReturn(NID_UI_IME, pTargetWindowAgent, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));\r
164 \r
165                         r = pTargetWindowAgent->SetOrientation(angle);\r
166                         SysTryReturn(NID_UI_IME, r == E_SUCCESS, ECORE_CALLBACK_CANCEL, r, "[%s] Propagating.", GetErrorMessage(r));\r
167 */\r
168                 }\r
169         }\r
170 \r
171         return ECORE_CALLBACK_RENEW;\r
172 }\r
173 \r
174 }}} // Tizen::Ui::Ime\r