1 
2 #ifdef HAVE_CONFIG_H
3 # include <config.h>
4 #endif
5 
6 #include <Ecore.h>
7 #include "ecore_private.h"
8 #include "Ecore_IMF_Evas.h"
9 
10 static const char *_ecore_imf_evas_event_empty = "";
11 
12 /* Converts the Evas modifiers to Ecore_IMF keyboard modifiers */
13 static void
_ecore_imf_evas_event_modifiers_wrap(Evas_Modifier * evas_modifiers,Ecore_IMF_Keyboard_Modifiers * imf_keyboard_modifiers)14 _ecore_imf_evas_event_modifiers_wrap(Evas_Modifier *evas_modifiers,
15                                      Ecore_IMF_Keyboard_Modifiers *imf_keyboard_modifiers)
16 {
17    if (!evas_modifiers || !imf_keyboard_modifiers)
18      return;
19 
20    *imf_keyboard_modifiers = ECORE_IMF_KEYBOARD_MODIFIER_NONE;
21    if (evas_key_modifier_is_set(evas_modifiers, "Control"))
22      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_CTRL;
23    if (evas_key_modifier_is_set(evas_modifiers, "Alt"))
24      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_ALT;
25    if (evas_key_modifier_is_set(evas_modifiers, "Shift"))
26      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_SHIFT;
27    if (evas_key_modifier_is_set(evas_modifiers, "Super") || evas_key_modifier_is_set(evas_modifiers, "Hyper"))
28      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_WIN;
29    if (evas_key_modifier_is_set(evas_modifiers, "AltGr"))
30      *imf_keyboard_modifiers |= ECORE_IMF_KEYBOARD_MODIFIER_ALTGR;
31 }
32 
33 /* Converts the Evas locks to Ecore_IMF keyboard locks */
34 static void
_ecore_imf_evas_event_locks_wrap(Evas_Lock * evas_locks,Ecore_IMF_Keyboard_Locks * imf_keyboard_locks)35 _ecore_imf_evas_event_locks_wrap(Evas_Lock *evas_locks,
36                                  Ecore_IMF_Keyboard_Locks *imf_keyboard_locks)
37 {
38    if (!evas_locks || !imf_keyboard_locks)
39      return;
40 
41    *imf_keyboard_locks = ECORE_IMF_KEYBOARD_LOCK_NONE;
42    if (evas_key_lock_is_set(evas_locks, "Num_Lock"))
43      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_NUM;
44    if (evas_key_lock_is_set(evas_locks, "Caps_Lock"))
45      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_CAPS;
46    if (evas_key_lock_is_set(evas_locks, "Scroll_Lock"))
47      *imf_keyboard_locks |= ECORE_IMF_KEYBOARD_LOCK_SCROLL;
48 }
49 
50 /* Converts the Evas mouse flags to Ecore_IMF mouse flags */
51 static void
_ecore_imf_evas_event_mouse_flags_wrap(Evas_Button_Flags evas_flags,Ecore_IMF_Mouse_Flags * imf_flags)52 _ecore_imf_evas_event_mouse_flags_wrap(Evas_Button_Flags evas_flags,
53                                        Ecore_IMF_Mouse_Flags *imf_flags)
54 {
55    if (!imf_flags)
56      return;
57 
58    *imf_flags = ECORE_IMF_MOUSE_NONE;
59    if (evas_flags & EVAS_BUTTON_DOUBLE_CLICK)
60      *imf_flags |= ECORE_IMF_MOUSE_DOUBLE_CLICK;
61    if (evas_flags & EVAS_BUTTON_TRIPLE_CLICK)
62      *imf_flags |= ECORE_IMF_MOUSE_TRIPLE_CLICK;
63 }
64 
65 EAPI void
ecore_imf_evas_event_mouse_in_wrap(Evas_Event_Mouse_In * evas_event,Ecore_IMF_Event_Mouse_In * imf_event)66 ecore_imf_evas_event_mouse_in_wrap(Evas_Event_Mouse_In *evas_event,
67                                    Ecore_IMF_Event_Mouse_In *imf_event)
68 {
69    if (!evas_event || !imf_event)
70      return;
71 
72    imf_event->buttons = evas_event->buttons;
73    imf_event->output.x = evas_event->output.x;
74    imf_event->output.y = evas_event->output.y;
75    imf_event->canvas.x = evas_event->canvas.x;
76    imf_event->canvas.y = evas_event->canvas.y;
77    imf_event->timestamp = evas_event->timestamp;
78    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
79    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
80 }
81 
82 EAPI void
ecore_imf_evas_event_mouse_out_wrap(Evas_Event_Mouse_Out * evas_event,Ecore_IMF_Event_Mouse_Out * imf_event)83 ecore_imf_evas_event_mouse_out_wrap(Evas_Event_Mouse_Out *evas_event,
84                                     Ecore_IMF_Event_Mouse_Out *imf_event)
85 {
86    if (!evas_event || !imf_event)
87      return;
88 
89    imf_event->buttons = evas_event->buttons;
90    imf_event->output.x = evas_event->output.x;
91    imf_event->output.y = evas_event->output.y;
92    imf_event->canvas.x = evas_event->canvas.x;
93    imf_event->canvas.y = evas_event->canvas.y;
94    imf_event->timestamp = evas_event->timestamp;
95    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
96    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
97 }
98 
99 EAPI void
ecore_imf_evas_event_mouse_move_wrap(Evas_Event_Mouse_Move * evas_event,Ecore_IMF_Event_Mouse_Move * imf_event)100 ecore_imf_evas_event_mouse_move_wrap(Evas_Event_Mouse_Move *evas_event,
101                                      Ecore_IMF_Event_Mouse_Move *imf_event)
102 {
103    if (!evas_event || !imf_event)
104      return;
105 
106    imf_event->buttons = evas_event->buttons;
107    imf_event->cur.output.x = evas_event->cur.output.x;
108    imf_event->cur.output.y = evas_event->cur.output.y;
109    imf_event->prev.output.x = evas_event->prev.output.x;
110    imf_event->prev.output.y = evas_event->prev.output.y;
111    imf_event->cur.canvas.x = evas_event->cur.canvas.x;
112    imf_event->cur.canvas.y = evas_event->cur.canvas.y;
113    imf_event->prev.canvas.x = evas_event->prev.canvas.x;
114    imf_event->prev.canvas.y = evas_event->prev.canvas.y;
115    imf_event->timestamp = evas_event->timestamp;
116    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
117    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
118 }
119 
120 EAPI void
ecore_imf_evas_event_mouse_down_wrap(Evas_Event_Mouse_Down * evas_event,Ecore_IMF_Event_Mouse_Down * imf_event)121 ecore_imf_evas_event_mouse_down_wrap(Evas_Event_Mouse_Down *evas_event,
122                                      Ecore_IMF_Event_Mouse_Down *imf_event)
123 {
124    if (!evas_event || !imf_event)
125       return;
126 
127    imf_event->button = evas_event->button;
128    imf_event->output.x = evas_event->output.x;
129    imf_event->output.y = evas_event->output.y;
130    imf_event->canvas.x = evas_event->canvas.x;
131    imf_event->canvas.y = evas_event->canvas.y;
132    imf_event->timestamp = evas_event->timestamp;
133    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
134    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
135    _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
136 }
137 
138 EAPI void
ecore_imf_evas_event_mouse_up_wrap(Evas_Event_Mouse_Up * evas_event,Ecore_IMF_Event_Mouse_Up * imf_event)139 ecore_imf_evas_event_mouse_up_wrap(Evas_Event_Mouse_Up *evas_event,
140                                    Ecore_IMF_Event_Mouse_Up *imf_event)
141 {
142    if (!evas_event || !imf_event)
143      return;
144 
145    imf_event->button = evas_event->button;
146    imf_event->output.x = evas_event->output.x;
147    imf_event->output.y = evas_event->output.y;
148    imf_event->canvas.x = evas_event->canvas.x;
149    imf_event->canvas.y = evas_event->canvas.y;
150    imf_event->timestamp = evas_event->timestamp;
151    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
152    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
153    _ecore_imf_evas_event_mouse_flags_wrap(evas_event->flags, &imf_event->flags);
154 }
155 
156 EAPI void
ecore_imf_evas_event_mouse_wheel_wrap(Evas_Event_Mouse_Wheel * evas_event,Ecore_IMF_Event_Mouse_Wheel * imf_event)157 ecore_imf_evas_event_mouse_wheel_wrap(Evas_Event_Mouse_Wheel *evas_event,
158                                       Ecore_IMF_Event_Mouse_Wheel *imf_event)
159 {
160    if (!evas_event || !imf_event)
161      return;
162 
163    imf_event->direction = evas_event->direction;
164    imf_event->z = evas_event->z;
165    imf_event->output.x = evas_event->output.x;
166    imf_event->output.y = evas_event->output.y;
167    imf_event->canvas.x = evas_event->canvas.x;
168    imf_event->canvas.y = evas_event->canvas.y;
169    imf_event->timestamp = evas_event->timestamp;
170    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
171    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
172    imf_event->timestamp = evas_event->timestamp;
173 }
174 
175 EAPI void
ecore_imf_evas_event_key_down_wrap(Evas_Event_Key_Down * evas_event,Ecore_IMF_Event_Key_Down * imf_event)176 ecore_imf_evas_event_key_down_wrap(Evas_Event_Key_Down *evas_event,
177                                    Ecore_IMF_Event_Key_Down *imf_event)
178 {
179    if (!evas_event || !imf_event)
180      return;
181 
182    imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
183    imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
184    imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
185    imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
186    imf_event->timestamp = evas_event->timestamp;
187    imf_event->keycode = evas_event->keycode;
188 
189    if (evas_event->dev)
190      {
191         imf_event->dev_name = evas_device_name_get(evas_event->dev) ? evas_device_name_get(evas_event->dev) : _ecore_imf_evas_event_empty;
192         imf_event->dev_class = (Ecore_IMF_Device_Class)evas_device_class_get(evas_event->dev);
193         imf_event->dev_subclass = (Ecore_IMF_Device_Subclass)evas_device_subclass_get(evas_event->dev);
194      }
195    else
196      {
197         imf_event->dev_name = _ecore_imf_evas_event_empty;
198         imf_event->dev_class = ECORE_IMF_DEVICE_CLASS_NONE;
199         imf_event->dev_subclass = ECORE_IMF_DEVICE_SUBCLASS_NONE;
200      }
201 
202    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
203    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
204 }
205 
206 EAPI void
ecore_imf_evas_event_key_up_wrap(Evas_Event_Key_Up * evas_event,Ecore_IMF_Event_Key_Up * imf_event)207 ecore_imf_evas_event_key_up_wrap(Evas_Event_Key_Up *evas_event,
208                                  Ecore_IMF_Event_Key_Up *imf_event)
209 {
210    if (!evas_event)
211      {
212         EINA_LOG_ERR("Evas event is missing");
213         return;
214      }
215 
216    if (!imf_event)
217      {
218         EINA_LOG_ERR("Imf event is missing");
219         return;
220      }
221 
222    imf_event->keyname = evas_event->keyname ? evas_event->keyname : _ecore_imf_evas_event_empty;
223    imf_event->key = evas_event->key ? evas_event->key : _ecore_imf_evas_event_empty;
224    imf_event->string = evas_event->string ? evas_event->string : _ecore_imf_evas_event_empty;
225    imf_event->compose = evas_event->compose ? evas_event->compose : _ecore_imf_evas_event_empty;
226    imf_event->timestamp = evas_event->timestamp;
227    imf_event->keycode = evas_event->keycode;
228 
229    if (evas_event->dev)
230      {
231         imf_event->dev_name = evas_device_name_get(evas_event->dev) ? evas_device_name_get(evas_event->dev) : _ecore_imf_evas_event_empty;
232         imf_event->dev_class = (Ecore_IMF_Device_Class)evas_device_class_get(evas_event->dev);
233         imf_event->dev_subclass = (Ecore_IMF_Device_Subclass)evas_device_subclass_get(evas_event->dev);
234      }
235    else
236      {
237         imf_event->dev_name = _ecore_imf_evas_event_empty;
238         imf_event->dev_class = ECORE_IMF_DEVICE_CLASS_NONE;
239         imf_event->dev_subclass = ECORE_IMF_DEVICE_SUBCLASS_NONE;
240      }
241 
242    _ecore_imf_evas_event_modifiers_wrap(evas_event->modifiers, &imf_event->modifiers);
243    _ecore_imf_evas_event_locks_wrap(evas_event->locks, &imf_event->locks);
244 }
245