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