1 /*
2  * OLD E hints
3  */
4 
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8 
9 #ifdef STDC_HEADERS
10 # include <stdlib.h>
11 # include <stddef.h>
12 #else
13 # ifdef HAVE_STDLIB_H
14 #  include <stdlib.h>
15 # endif
16 #endif
17 
18 #include "Ecore.h"
19 #include "ecore_x_private.h"
20 #include "Ecore_X.h"
21 #include "Ecore_X_Atoms.h"
22 
23 EAPI void
ecore_x_e_init(void)24 ecore_x_e_init(void)
25 {
26 }
27 
28 EAPI void
ecore_x_e_frame_size_set(Ecore_X_Window win,int fl,int fr,int ft,int fb)29 ecore_x_e_frame_size_set(Ecore_X_Window win,
30                          int fl,
31                          int fr,
32                          int ft,
33                          int fb)
34 {
35    unsigned int frames[4];
36 
37    LOGFN;
38    frames[0] = fl;
39    frames[1] = fr;
40    frames[2] = ft;
41    frames[3] = fb;
42    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
43 }
44 
45 EAPI void
ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,unsigned int is_keyboard)46 ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
47                                unsigned int is_keyboard)
48 {
49    LOGFN;
50    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
51                                   &is_keyboard, 1);
52 }
53 
54 EAPI Eina_Bool
ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)55 ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
56 {
57    unsigned int val = 0;
58    int ret = 0;
59 
60    LOGFN;
61    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
62                                         &val, 1);
63    if ((ret == 0) || (ret == -1))
64      return EINA_FALSE;
65 
66    return val ? EINA_TRUE : EINA_FALSE;
67 }
68 
69 static Ecore_X_Virtual_Keyboard_State
_ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)70 _ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)
71 {
72    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
73      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
74 
75    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
76      return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
77 
78    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
79      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
80 
81    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
82      return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
83 
84    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
85      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
86 
87    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
88      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
89 
90    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
91      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
92 
93    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
94      return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
95 
96    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
97      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
98 
99    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
100      return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
101 
102    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
103      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
104 
105    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
106      return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
107 
108    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
109      return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
110 
111    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
112      return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
113 
114    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
115      return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
116 
117    return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
118 }
119 
120 static Ecore_X_Atom
_ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)121 _ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
122 {
123    switch (state)
124      {
125       case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
126         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
127 
128       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
129         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
130 
131       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
132         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
133 
134       case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
135         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
136 
137       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
138         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
139 
140       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
141         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
142 
143       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
144         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
145 
146       case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
147         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
148 
149       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
150         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
151 
152       case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
153         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
154 
155       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
156         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
157 
158       case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
159         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
160 
161       case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
162         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
163 
164       case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
165         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
166 
167       case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
168         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
169 
170       default: break;
171      }
172    return 0;
173 }
174 
175 EAPI void
ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,Ecore_X_Virtual_Keyboard_State state)176 ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
177                                      Ecore_X_Virtual_Keyboard_State state)
178 {
179    Ecore_X_Atom atom = 0;
180 
181    LOGFN;
182    atom = _ecore_x_e_vkbd_atom_get(state);
183    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
184                                 &atom, 1);
185 }
186 
187 EAPI Ecore_X_Virtual_Keyboard_State
ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)188 ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
189 {
190    Ecore_X_Atom atom = 0;
191 
192    LOGFN;
193    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
194                                      &atom, 1))
195      return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
196 
197    return _ecore_x_e_vkbd_state_get(atom);
198 }
199 
200 EAPI void
ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,Ecore_X_Virtual_Keyboard_State state)201 ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
202                                       Ecore_X_Virtual_Keyboard_State state)
203 {
204    LOGFN;
205    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
206                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
207                                  _ecore_x_e_vkbd_atom_get(state),
208                                  0, 0, 0, 0);
209 }
210 
211 static Ecore_X_Atom
_ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)212 _ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)
213 {
214    switch (mode)
215      {
216       case ECORE_X_ILLUME_MODE_SINGLE:
217         return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
218 
219       case ECORE_X_ILLUME_MODE_DUAL_TOP:
220         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
221 
222       case ECORE_X_ILLUME_MODE_DUAL_LEFT:
223         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
224 
225       default:
226         break;
227      }
228    return ECORE_X_ILLUME_MODE_UNKNOWN;
229 }
230 
231 static Ecore_X_Illume_Mode
_ecore_x_e_illume_mode_get(Ecore_X_Atom atom)232 _ecore_x_e_illume_mode_get(Ecore_X_Atom atom)
233 {
234    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
235      return ECORE_X_ILLUME_MODE_SINGLE;
236 
237    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
238      return ECORE_X_ILLUME_MODE_DUAL_TOP;
239 
240    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
241      return ECORE_X_ILLUME_MODE_DUAL_LEFT;
242 
243    return ECORE_X_ILLUME_MODE_UNKNOWN;
244 }
245 
246 EAPI void
ecore_x_e_illume_zone_set(Ecore_X_Window win,Ecore_X_Window zone)247 ecore_x_e_illume_zone_set(Ecore_X_Window win,
248                           Ecore_X_Window zone)
249 {
250    LOGFN;
251    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
252                                   &zone, 1);
253 }
254 
255 EAPI Ecore_X_Window
ecore_x_e_illume_zone_get(Ecore_X_Window win)256 ecore_x_e_illume_zone_get(Ecore_X_Window win)
257 {
258    Ecore_X_Window zone = 0;
259    int ret;
260 
261    LOGFN;
262    ret = ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
263                                         &zone, 1);
264    if ((ret == 0) || (ret == -1))
265      return 0;
266 
267    return zone;
268 }
269 
270 EAPI void
ecore_x_e_illume_zone_list_set(Ecore_X_Window win,Ecore_X_Window * zones,unsigned int n_zones)271 ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
272                                Ecore_X_Window *zones,
273                                unsigned int n_zones)
274 {
275    LOGFN;
276    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
277                                   zones, n_zones);
278 }
279 
280 EAPI void
ecore_x_e_illume_conformant_set(Ecore_X_Window win,unsigned int is_conformant)281 ecore_x_e_illume_conformant_set(Ecore_X_Window win,
282                                 unsigned int is_conformant)
283 {
284    LOGFN;
285    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
286                                   &is_conformant, 1);
287 }
288 
289 EAPI Eina_Bool
ecore_x_e_illume_conformant_get(Ecore_X_Window win)290 ecore_x_e_illume_conformant_get(Ecore_X_Window win)
291 {
292    unsigned int val = 0;
293    int ret = 0;
294 
295    LOGFN;
296    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
297                                         &val, 1);
298    if ((ret == 0) || (ret == -1))
299      return EINA_FALSE;
300 
301    return val ? EINA_TRUE : EINA_FALSE;
302 }
303 
304 EAPI void
ecore_x_e_illume_mode_set(Ecore_X_Window win,Ecore_X_Illume_Mode mode)305 ecore_x_e_illume_mode_set(Ecore_X_Window win,
306                           Ecore_X_Illume_Mode mode)
307 {
308    Ecore_X_Atom atom = 0;
309 
310    LOGFN;
311    atom = _ecore_x_e_illume_atom_get(mode);
312    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
313                                 &atom, 1);
314 }
315 
316 EAPI Ecore_X_Illume_Mode
ecore_x_e_illume_mode_get(Ecore_X_Window win)317 ecore_x_e_illume_mode_get(Ecore_X_Window win)
318 {
319    Ecore_X_Atom atom = 0;
320 
321    LOGFN;
322    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
323      return ECORE_X_ILLUME_MODE_UNKNOWN;
324 
325    return _ecore_x_e_illume_mode_get(atom);
326 }
327 
328 EAPI void
ecore_x_e_illume_mode_send(Ecore_X_Window win,Ecore_X_Illume_Mode mode)329 ecore_x_e_illume_mode_send(Ecore_X_Window win,
330                            Ecore_X_Illume_Mode mode)
331 {
332    LOGFN;
333    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
334                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
335                                  _ecore_x_e_illume_atom_get(mode),
336                                  0, 0, 0, 0);
337 }
338 
339 EAPI void
ecore_x_e_illume_focus_back_send(Ecore_X_Window win)340 ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
341 {
342    LOGFN;
343    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
344                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
345                                  1, 0, 0, 0, 0);
346 }
347 
348 EAPI void
ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)349 ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
350 {
351    LOGFN;
352    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
353                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
354                                  1, 0, 0, 0, 0);
355 }
356 
357 EAPI void
ecore_x_e_illume_focus_home_send(Ecore_X_Window win)358 ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
359 {
360    LOGFN;
361    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
362                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
363                                  1, 0, 0, 0, 0);
364 }
365 
366 EAPI void
ecore_x_e_illume_close_send(Ecore_X_Window win)367 ecore_x_e_illume_close_send(Ecore_X_Window win)
368 {
369    LOGFN;
370    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
371                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
372                                  1, 0, 0, 0, 0);
373 }
374 
375 EAPI void
ecore_x_e_illume_home_new_send(Ecore_X_Window win)376 ecore_x_e_illume_home_new_send(Ecore_X_Window win)
377 {
378    LOGFN;
379    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
380                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
381                                  1, 0, 0, 0, 0);
382 }
383 
384 EAPI void
ecore_x_e_illume_home_del_send(Ecore_X_Window win)385 ecore_x_e_illume_home_del_send(Ecore_X_Window win)
386 {
387    LOGFN;
388    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
389                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
390                                  1, 0, 0, 0, 0);
391 }
392 
393 EAPI void
ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)394 ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)
395 {
396    LOGFN;
397    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
398                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
399                                  win,
400                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT,
401                                  0, 0, 0);
402 }
403 
404 EAPI void
ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)405 ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)
406 {
407    LOGFN;
408    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
409                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
410                                  win,
411                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV,
412                                  0, 0, 0);
413 }
414 
415 EAPI void
ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)416 ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)
417 {
418    LOGFN;
419    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
420                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
421                                  win,
422                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE,
423                                  0, 0, 0);
424 }
425 
426 EAPI void
ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)427 ecore_x_e_illume_access_action_over_send(Ecore_X_Window win)
428 {
429    LOGFN;
430    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
431                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
432                                  win,
433                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_OVER,
434                                  0, 0, 0);
435 }
436 
437 EAPI void
ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)438 ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)
439 {
440    LOGFN;
441    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
442                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
443                                  win,
444                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ,
445                                  0, 0, 0);
446 }
447 
448 EAPI void
ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)449 ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)
450 {
451    LOGFN;
452    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
453                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
454                                  win,
455                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_NEXT,
456                                  0, 0, 0);
457 }
458 
459 EAPI void
ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)460 ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)
461 {
462    LOGFN;
463    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
464                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
465                                  win,
466                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_PREV,
467                                  0, 0, 0);
468 }
469 
470 EAPI void
ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)471 ecore_x_e_illume_access_action_up_send(Ecore_X_Window win)
472 {
473    LOGFN;
474    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
475                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
476                                  win,
477                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP,
478                                  0, 0, 0);
479 }
480 
481 EAPI void
ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)482 ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)
483 {
484    LOGFN;
485    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
486                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
487                                  win,
488                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN,
489                                  0, 0, 0);
490 }
491 
492 EAPI void
ecore_x_e_illume_drag_set(Ecore_X_Window win,unsigned int drag)493 ecore_x_e_illume_drag_set(Ecore_X_Window win,
494                           unsigned int drag)
495 {
496    LOGFN;
497    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
498 }
499 
500 EAPI Eina_Bool
ecore_x_e_illume_drag_get(Ecore_X_Window win)501 ecore_x_e_illume_drag_get(Ecore_X_Window win)
502 {
503    unsigned int val = 0;
504    int ret = 0;
505 
506    LOGFN;
507    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG,
508                                         &val, 1);
509    if ((ret == 0) || (ret == -1))
510      return EINA_FALSE;
511 
512    return val ? EINA_TRUE : EINA_FALSE;
513 }
514 
515 EAPI void
ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,unsigned int is_locked)516 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
517                                  unsigned int is_locked)
518 {
519    LOGFN;
520    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
521                                   &is_locked, 1);
522 }
523 
524 EAPI Eina_Bool
ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)525 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
526 {
527    unsigned int val = 0;
528    int ret = 0;
529 
530    LOGFN;
531    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
532                                         &val, 1);
533    if ((ret == 0) || (ret == -1))
534      return EINA_FALSE;
535 
536    return val ? EINA_TRUE : EINA_FALSE;
537 }
538 
539 EAPI void
ecore_x_e_illume_drag_start_send(Ecore_X_Window win)540 ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
541 {
542    LOGFN;
543    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
544                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
545                                  1, 0, 0, 0, 0);
546 }
547 
548 EAPI void
ecore_x_e_illume_drag_end_send(Ecore_X_Window win)549 ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
550 {
551    LOGFN;
552    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
553                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
554                                  1, 0, 0, 0, 0);
555 }
556 
557 EAPI void
ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)558 ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
559                                         int x,
560                                         int y,
561                                         int w,
562                                         int h)
563 {
564    unsigned int geom[4];
565 
566    LOGFN;
567    geom[0] = x;
568    geom[1] = y;
569    geom[2] = w;
570    geom[3] = h;
571    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
572                                   geom, 4);
573 }
574 
575 EAPI Eina_Bool
ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)576 ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
577                                         int *x,
578                                         int *y,
579                                         int *w,
580                                         int *h)
581 {
582    int ret = 0;
583    unsigned int geom[4];
584 
585    LOGFN;
586    ret =
587      ecore_x_window_prop_card32_get(win,
588                                     ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
589                                     geom, 4);
590    if (ret != 4)
591      return EINA_FALSE;
592 
593    if (x)
594      *x = geom[0];
595 
596    if (y)
597      *y = geom[1];
598 
599    if (w)
600      *w = geom[2];
601 
602    if (h)
603      *h = geom[3];
604 
605    return EINA_TRUE;
606 }
607 
608 EAPI void
ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)609 ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
610                                       int x,
611                                       int y,
612                                       int w,
613                                       int h)
614 {
615    unsigned int geom[4];
616 
617    LOGFN;
618    geom[0] = x;
619    geom[1] = y;
620    geom[2] = w;
621    geom[3] = h;
622    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
623                                   geom, 4);
624 }
625 
626 EAPI Eina_Bool
ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)627 ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
628                                       int *x,
629                                       int *y,
630                                       int *w,
631                                       int *h)
632 {
633    int ret = 0;
634    unsigned int geom[4];
635 
636    LOGFN;
637    ret =
638      ecore_x_window_prop_card32_get(win,
639                                     ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
640                                     geom, 4);
641    if (ret != 4)
642      return EINA_FALSE;
643 
644    if (x)
645      *x = geom[0];
646 
647    if (y)
648      *y = geom[1];
649 
650    if (w)
651      *w = geom[2];
652 
653    if (h)
654      *h = geom[3];
655 
656    return EINA_TRUE;
657 }
658 
659 EAPI void
ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)660 ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
661                                        int x,
662                                        int y,
663                                        int w,
664                                        int h)
665 {
666    unsigned int geom[4];
667 
668    LOGFN;
669    geom[0] = x;
670    geom[1] = y;
671    geom[2] = w;
672    geom[3] = h;
673    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
674                                   geom, 4);
675 }
676 
677 EAPI Eina_Bool
ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)678 ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
679                                        int *x,
680                                        int *y,
681                                        int *w,
682                                        int *h)
683 {
684    int ret = 0;
685    unsigned int geom[4];
686 
687    LOGFN;
688    ret =
689      ecore_x_window_prop_card32_get(win,
690                                     ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
691                                     geom, 4);
692    if (ret != 4)
693      return EINA_FALSE;
694 
695    if (x)
696      *x = geom[0];
697 
698    if (y)
699      *y = geom[1];
700 
701    if (w)
702      *w = geom[2];
703 
704    if (h)
705      *h = geom[3];
706 
707    return EINA_TRUE;
708 }
709 
710 static Ecore_X_Atom
_ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)711 _ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
712 {
713    switch (state)
714      {
715       case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
716         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
717 
718       case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
719         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
720 
721       default:
722         break;
723      }
724    return 0;
725 }
726 
727 static Ecore_X_Illume_Quickpanel_State
_ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)728 _ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)
729 {
730    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
731      return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
732 
733    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
734      return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
735 
736    return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
737 }
738 
739 EAPI void
ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,unsigned int is_quickpanel)740 ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
741                                 unsigned int is_quickpanel)
742 {
743    LOGFN;
744    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
745                                   &is_quickpanel, 1);
746 }
747 
748 EAPI Eina_Bool
ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)749 ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
750 {
751    unsigned int val = 0;
752    int ret = 0;
753 
754    LOGFN;
755    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
756                                         &val, 1);
757    if ((ret == 0) || (ret == -1))
758      return EINA_FALSE;
759 
760    return val ? EINA_TRUE : EINA_FALSE;
761 }
762 
763 EAPI void
ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,Ecore_X_Illume_Quickpanel_State state)764 ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
765                                       Ecore_X_Illume_Quickpanel_State state)
766 {
767    Ecore_X_Atom atom = 0;
768 
769    LOGFN;
770    atom = _ecore_x_e_quickpanel_atom_get(state);
771    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
772                                 &atom, 1);
773 }
774 
775 EAPI Ecore_X_Illume_Quickpanel_State
ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)776 ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
777 {
778    Ecore_X_Atom atom = 0;
779 
780    LOGFN;
781    if (!ecore_x_window_prop_atom_get(win,
782                                      ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
783                                      &atom, 1))
784      return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
785 
786    return _ecore_x_e_quickpanel_state_get(atom);
787 }
788 
789 EAPI void
ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,Ecore_X_Illume_Quickpanel_State state)790 ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
791                                        Ecore_X_Illume_Quickpanel_State state)
792 {
793    LOGFN;
794    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
795                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
796                                  _ecore_x_e_quickpanel_atom_get(state),
797                                  0, 0, 0, 0);
798 }
799 
800 EAPI void
ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)801 ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
802 {
803    LOGFN;
804    ecore_x_client_message32_send(win,
805                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
806                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
807                                  0, 0, 0, 0, 0);
808 }
809 
810 EAPI void
ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,unsigned int priority)811 ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
812                                                unsigned int priority)
813 {
814    LOGFN;
815    ecore_x_window_prop_card32_set(win,
816                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
817                                   &priority, 1);
818 }
819 
820 EAPI int
ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)821 ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
822 {
823    unsigned int val = 0;
824    int ret = 0;
825 
826    LOGFN;
827    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
828                                        &val, 1);
829    if ((ret == 0) || (ret == -1))
830      return EINA_FALSE;
831 
832    return val;
833 }
834 
835 EAPI void
ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,unsigned int priority)836 ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
837                                                unsigned int priority)
838 {
839    LOGFN;
840    ecore_x_window_prop_card32_set(win,
841                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
842                                   &priority, 1);
843 }
844 
845 EAPI int
ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)846 ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
847 {
848    unsigned int val = 0;
849    int ret = 0;
850 
851    LOGFN;
852    ret = ecore_x_window_prop_card32_get(win,
853                                         ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
854                                         &val, 1);
855    if ((ret == 0) || (ret == -1))
856      return 0;
857 
858    return val;
859 }
860 
861 EAPI void
ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,unsigned int zone)862 ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
863                                      unsigned int zone)
864 {
865    LOGFN;
866    ecore_x_window_prop_card32_set(win,
867                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
868                                   &zone, 1);
869 }
870 
871 EAPI int
ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)872 ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
873 {
874    unsigned int val = 0;
875    int ret = 0;
876 
877    LOGFN;
878    ret = ecore_x_window_prop_card32_get(win,
879                                         ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
880                                         &val, 1);
881    if ((ret == 0) || (ret == -1))
882      return 0;
883 
884    return val;
885 }
886 
887 EAPI void
ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)888 ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
889 {
890    LOGFN;
891    ecore_x_client_message32_send(win,
892                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
893                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
894                                  1, 0, 0, 0, 0);
895 }
896 
897 static Ecore_X_Atom
_ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)898 _ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)
899 {
900    switch (state)
901      {
902       case ECORE_X_ILLUME_CLIPBOARD_STATE_ON:
903         return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
904       case ECORE_X_ILLUME_CLIPBOARD_STATE_OFF:
905         return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
906       default:
907         break;
908      }
909    return 0;
910 }
911 
912 static Ecore_X_Illume_Clipboard_State
_ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)913 _ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)
914 {
915    if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON)
916      return ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
917 
918    if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF)
919      return ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
920 
921    return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
922 }
923 
924 EAPI void
ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,Ecore_X_Illume_Clipboard_State state)925 ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
926                                      Ecore_X_Illume_Clipboard_State state)
927 {
928    Ecore_X_Atom atom = 0;
929 
930    LOGFN;
931    atom = _ecore_x_e_clipboard_atom_get(state);
932 
933    ecore_x_window_prop_atom_set(win,
934                                 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
935                                 &atom, 1);
936 }
937 
938 EAPI Ecore_X_Illume_Clipboard_State
ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)939 ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
940 {
941    Ecore_X_Atom atom = 0;
942 
943    LOGFN;
944 
945    if (!ecore_x_window_prop_atom_get(win,
946                                      ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
947                                      &atom, 1))
948      return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
949    return _ecore_x_e_clipboard_state_get(atom);
950 }
951 
952 EAPI void
ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)953 ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
954                                         int x, int y, int w, int h)
955 {
956    unsigned int geom[4];
957 
958    LOGFN;
959    geom[0] = x;
960    geom[1] = y;
961    geom[2] = w;
962    geom[3] = h;
963    ecore_x_window_prop_card32_set(win,
964                                   ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
965                                   geom, 4);
966 }
967 
968 EAPI Eina_Bool
ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)969 ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
970                                         int *x, int *y, int *w, int *h)
971 {
972    int ret = 0;
973    unsigned int geom[4];
974 
975    LOGFN;
976    ret =
977       ecore_x_window_prop_card32_get(win,
978                                      ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
979                                      geom, 4);
980    if (ret != 4) return EINA_FALSE;
981 
982    if (x) *x = geom[0];
983    if (y) *y = geom[1];
984    if (w) *w = geom[2];
985    if (h) *h = geom[3];
986 
987    return EINA_TRUE;
988 }
989 
990 /* for sliding window */
991 EAPI void
ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,unsigned int is_visible)992 ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
993                                        unsigned int   is_visible)
994 {
995    LOGFN;
996    ecore_x_window_prop_card32_set(win,
997                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
998                                   &is_visible, 1);
999 } /* ecore_x_e_illume_sliding_win_state_set */
1000 
1001 EAPI int
ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)1002 ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
1003 {
1004    unsigned int is_visible = 0;
1005    int ret = 0;
1006 
1007    LOGFN;
1008    ret = ecore_x_window_prop_card32_get(win,
1009                                         ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE,
1010                                         &is_visible, 1);
1011    if ((ret == 0) || (ret == -1))
1012      return 0;
1013 
1014    return is_visible;
1015 }
1016 
1017 EAPI void
ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,int x,int y,int w,int h)1018 ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
1019                                           int            x,
1020                                           int            y,
1021                                           int            w,
1022                                           int            h)
1023 {
1024    unsigned int geom[4];
1025 
1026    LOGFN;
1027    geom[0] = x;
1028    geom[1] = y;
1029    geom[2] = w;
1030    geom[3] = h;
1031    ecore_x_window_prop_card32_set(win,
1032                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
1033                                   geom, 4);
1034 } /* ecore_x_e_illume_sliding_win_geometry_set */
1035 
1036 EAPI int
ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,int * x,int * y,int * w,int * h)1037 ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
1038                                           int           *x,
1039                                           int           *y,
1040                                           int           *w,
1041                                           int           *h)
1042 {
1043    int ret = 0;
1044    unsigned int geom[4];
1045 
1046    LOGFN;
1047    ret =
1048      ecore_x_window_prop_card32_get(win,
1049                                     ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY,
1050                                     geom, 4);
1051    if (ret != 4)
1052       return 0;
1053 
1054    if (x)
1055       *x = geom[0];
1056 
1057    if (y)
1058       *y = geom[1];
1059 
1060    if (w)
1061       *w = geom[2];
1062 
1063    if (h)
1064       *h = geom[3];
1065 
1066    return 1;
1067 }/* ecore_x_e_illume_sliding_win_geometry_get */
1068 
1069 EAPI void
ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,Ecore_X_Sync_Counter counter)1070 ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
1071                                 Ecore_X_Sync_Counter counter)
1072 {
1073    LOGFN;
1074    if (counter)
1075      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1076                                  ECORE_X_ATOM_CARDINAL, &counter, 1);
1077    else
1078      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
1079 }
1080 
1081 EAPI Ecore_X_Sync_Counter
ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)1082 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
1083 {
1084    int ret = 0;
1085    Ecore_X_Sync_Counter counter = 0;
1086 
1087    LOGFN;
1088    ret =
1089      ecore_x_window_prop_xid_get(win,
1090                                  ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1091                                  ECORE_X_ATOM_CARDINAL,
1092                                  &counter, 1);
1093    if (ret != 1)
1094      return 0;
1095 
1096    return counter;
1097 }
1098 
1099 EAPI void
ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,Ecore_X_Window win)1100 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
1101                                    Ecore_X_Window win)
1102 {
1103    XEvent xev = { 0 };
1104 
1105    LOGFN;
1106 
1107    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1108 
1109    if (!root)
1110      root = DefaultRootWindow(_ecore_x_disp);
1111 
1112    xev.xclient.type = ClientMessage;
1113    xev.xclient.display = _ecore_x_disp;
1114    xev.xclient.window = win;
1115    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1116    xev.xclient.format = 32;
1117    xev.xclient.data.l[0] = win;
1118    xev.xclient.data.l[1] = 0; // version
1119    xev.xclient.data.l[2] = 0; // later
1120    xev.xclient.data.l[3] = 0; // later
1121    xev.xclient.data.l[4] = 0; // later
1122 
1123    XSendEvent(_ecore_x_disp, root, False,
1124               SubstructureRedirectMask | SubstructureNotifyMask,
1125               &xev);
1126    if (_ecore_xlib_sync) ecore_x_sync();
1127 }
1128 
1129 EAPI void
ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,Ecore_X_Window win,int w,int h)1130 ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
1131                                         Ecore_X_Window win,
1132                                         int w,
1133                                         int h)
1134 {
1135    XEvent xev = { 0 };
1136 
1137    LOGFN;
1138 
1139    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1140 
1141    if (!root)
1142      root = DefaultRootWindow(_ecore_x_disp);
1143 
1144    xev.xclient.type = ClientMessage;
1145    xev.xclient.display = _ecore_x_disp;
1146    xev.xclient.window = win;
1147    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1148    xev.xclient.format = 32;
1149    xev.xclient.data.l[0] = win;
1150    xev.xclient.data.l[1] = 1; // version
1151    xev.xclient.data.l[2] = w; // win width at draw time
1152    xev.xclient.data.l[3] = h; // win height at draw time
1153    xev.xclient.data.l[4] = 0; // later
1154 
1155    XSendEvent(_ecore_x_disp, root, False,
1156               SubstructureRedirectMask | SubstructureNotifyMask,
1157               &xev);
1158    if (_ecore_xlib_sync) ecore_x_sync();
1159 }
1160 
1161 /*
1162  * @since 1.3
1163  * @deprecated use ecore_x_e_window_available_profiles_set
1164  */
1165 EAPI void
ecore_x_e_window_profile_list_set(Ecore_X_Window win,const char ** profiles,unsigned int num_profiles)1166 ecore_x_e_window_profile_list_set(Ecore_X_Window  win,
1167                                   const char    **profiles,
1168                                   unsigned int    num_profiles)
1169 {
1170    Ecore_X_Atom *atoms;
1171 
1172    LOGFN;
1173    if (!win)
1174      return;
1175 
1176    if ((!profiles) || (num_profiles == 0))
1177      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST);
1178    else
1179      {
1180         atoms = alloca(num_profiles * sizeof(Ecore_X_Atom));
1181         ecore_x_atoms_get(profiles, num_profiles, atoms);
1182         ecore_x_window_prop_property_set(win,
1183                                          ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1184                                          XA_ATOM, 32, (void *)atoms,
1185                                          num_profiles);
1186      }
1187 }
1188 
1189 /*
1190  * @since 1.3
1191  * @deprecated use ecore_x_e_window_available_profiles_get
1192  */
1193 EAPI Eina_Bool
ecore_x_e_window_profile_list_get(Ecore_X_Window win,const char *** profiles,int * ret_num)1194 ecore_x_e_window_profile_list_get(Ecore_X_Window   win,
1195                                   const char    ***profiles,
1196                                   int             *ret_num)
1197 {
1198    unsigned char *data;
1199    Ecore_X_Atom *atoms;
1200    int num, i;
1201 
1202    LOGFN;
1203 
1204    if (ret_num)
1205      *ret_num = 0;
1206 
1207    if (profiles)
1208      *profiles = NULL;
1209 
1210    if (!win)
1211      return EINA_FALSE;
1212 
1213    if (!ecore_x_window_prop_property_get(win,
1214                                          ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1215                                          XA_ATOM, 32, &data, &num))
1216      {
1217         if (data) free(data);
1218         return EINA_FALSE;
1219      }
1220 
1221    if (ret_num)
1222      *ret_num = num;
1223 
1224    if (profiles)
1225      {
1226         (*profiles) = calloc(num, sizeof(char *));
1227         if (!(*profiles))
1228           {
1229              if (ret_num)
1230                *ret_num = 0;
1231 
1232              if (data)
1233                free(data);
1234 
1235              return EINA_FALSE;
1236           }
1237 
1238         atoms = (Ecore_X_Atom *)data;
1239         for (i = 0; i < num; i++)
1240            (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
1241      }
1242 
1243    if (data) free(data);
1244 
1245    return EINA_TRUE;
1246 }
1247 
1248 /*
1249  * @since 1.3
1250  */
1251 EAPI void
ecore_x_e_window_profile_set(Ecore_X_Window win,const char * profile)1252 ecore_x_e_window_profile_set(Ecore_X_Window win,
1253                              const char    *profile)
1254 {
1255    Ecore_X_Atom atom;
1256 
1257    LOGFN;
1258    if (!win)
1259      return;
1260 
1261    if (!profile)
1262      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE);
1263    else
1264      {
1265         atom = ecore_x_atom_get(profile);
1266         ecore_x_window_prop_property_set(win, ECORE_X_ATOM_E_WINDOW_PROFILE,
1267                                          XA_ATOM, 32, (void *)&atom, 1);
1268      }
1269 }
1270 
1271 /*
1272  * @since 1.3
1273  */
1274 EAPI char *
ecore_x_e_window_profile_get(Ecore_X_Window win)1275 ecore_x_e_window_profile_get(Ecore_X_Window win)
1276 {
1277    Ecore_X_Atom *atom = NULL;
1278    unsigned char *data;
1279    char *profile = NULL;
1280    int num;
1281 
1282    LOGFN;
1283    if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_WINDOW_PROFILE,
1284                                          XA_ATOM, 32, &data, &num))
1285      {
1286         if (data) free(data);
1287         return NULL;
1288      }
1289 
1290    if (data)
1291      atom = (Ecore_X_Atom *)data;
1292 
1293    if (atom)
1294      profile = ecore_x_atom_name_get(atom[0]);
1295 
1296    if (data) free(data);
1297 
1298    return profile;
1299 }
1300 
1301 EAPI void
ecore_x_e_window_profile_supported_set(Ecore_X_Window root,Eina_Bool enabled)1302 ecore_x_e_window_profile_supported_set(Ecore_X_Window root,
1303                                        Eina_Bool      enabled)
1304 {
1305    Ecore_X_Window win;
1306 
1307    LOGFN;
1308 
1309    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1310 
1311    if (!root)
1312      root = DefaultRootWindow(_ecore_x_disp);
1313 
1314    if (enabled)
1315      {
1316         win = ecore_x_window_new(root, 1, 2, 3, 4);
1317         ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1318                                     ECORE_X_ATOM_WINDOW, &win, 1);
1319         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1320                                     ECORE_X_ATOM_WINDOW, &win, 1);
1321      }
1322    else
1323      {
1324         int ret;
1325 
1326         ret =
1327           ecore_x_window_prop_xid_get(root,
1328                                       ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1329                                       ECORE_X_ATOM_WINDOW,
1330                                       &win, 1);
1331         if ((ret == 1) && (win))
1332           {
1333              ecore_x_window_prop_property_del(
1334                root,
1335                ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED);
1336              ecore_x_window_free(win);
1337           }
1338      }
1339 }
1340 
1341 EAPI Eina_Bool
ecore_x_e_window_profile_supported_get(Ecore_X_Window root)1342 ecore_x_e_window_profile_supported_get(Ecore_X_Window root)
1343 {
1344    Ecore_X_Window win, win2;
1345    int ret;
1346 
1347    LOGFN;
1348 
1349    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
1350 
1351    if (!root)
1352      root = DefaultRootWindow(_ecore_x_disp);
1353 
1354    ret =
1355      ecore_x_window_prop_xid_get(root,
1356                                  ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1357                                  ECORE_X_ATOM_WINDOW,
1358                                  &win, 1);
1359    if ((ret == 1) && (win))
1360      {
1361         ret =
1362           ecore_x_window_prop_xid_get(win,
1363                                       ECORE_X_ATOM_E_WINDOW_PROFILE_SUPPORTED,
1364                                       ECORE_X_ATOM_WINDOW,
1365                                       &win2, 1);
1366         if ((ret == 1) && (win2 == win))
1367           return EINA_TRUE;
1368      }
1369 
1370    return EINA_FALSE;
1371 }
1372 
1373 EAPI void
ecore_x_e_window_available_profiles_set(Ecore_X_Window win,const char ** profiles,unsigned int count)1374 ecore_x_e_window_available_profiles_set(Ecore_X_Window  win,
1375                                         const char    **profiles,
1376                                         unsigned int    count)
1377 {
1378    Ecore_X_Atom *atoms;
1379 
1380    LOGFN;
1381 
1382    if (!win)
1383      return;
1384 
1385    if ((!profiles) || (count == 0))
1386      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST);
1387    else
1388      {
1389         atoms = alloca(count * sizeof(Ecore_X_Atom));
1390         ecore_x_atoms_get(profiles, count, atoms);
1391         ecore_x_window_prop_property_set(win,
1392                                          ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1393                                          XA_ATOM, 32, (void *)atoms,
1394                                          count);
1395      }
1396 }
1397 
1398 EAPI Eina_Bool
ecore_x_e_window_available_profiles_get(Ecore_X_Window win,const char *** profiles,int * count)1399 ecore_x_e_window_available_profiles_get(Ecore_X_Window   win,
1400                                         const char    ***profiles,
1401                                         int             *count)
1402 {
1403    unsigned char *data;
1404    Ecore_X_Atom *atoms;
1405    int num, i;
1406 
1407    LOGFN;
1408 
1409    if (count)
1410      *count = 0;
1411 
1412    if (profiles)
1413      *profiles = NULL;
1414 
1415    if (!win)
1416      return EINA_FALSE;
1417 
1418    if (!ecore_x_window_prop_property_get(win,
1419                                          ECORE_X_ATOM_E_WINDOW_PROFILE_AVAILABLE_LIST,
1420                                          XA_ATOM, 32, &data, &num))
1421    {
1422      if (data)
1423        free(data);
1424      return EINA_FALSE;
1425    }
1426 
1427    if (count)
1428      *count = num;
1429 
1430    if (profiles)
1431      {
1432         (*profiles) = calloc(num, sizeof(char *));
1433         if (!(*profiles))
1434           {
1435              if (count)
1436                *count = 0;
1437 
1438              if (data)
1439                free(data);
1440 
1441              return EINA_FALSE;
1442           }
1443 
1444         atoms = (Ecore_X_Atom *)data;
1445         for (i = 0; i < num; i++)
1446            (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
1447      }
1448 
1449    if (data)
1450      XFree(data);
1451 
1452    return EINA_TRUE;
1453 }
1454 
1455 EAPI void
ecore_x_e_window_profile_change_send(Ecore_X_Window root,Ecore_X_Window win,const char * profile)1456 ecore_x_e_window_profile_change_send(Ecore_X_Window  root,
1457                                      Ecore_X_Window  win,
1458                                      const char     *profile)
1459 {
1460    XEvent xev = { 0 };
1461    Ecore_X_Atom atom;
1462 
1463    LOGFN;
1464 
1465    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1466 
1467    if (!root)
1468      root = DefaultRootWindow(_ecore_x_disp);
1469 
1470    if (!win)
1471      return;
1472 
1473    atom = ecore_x_atom_get(profile);
1474 
1475    xev.xclient.type = ClientMessage;
1476    xev.xclient.display = _ecore_x_disp;
1477    xev.xclient.window = win;
1478    xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE;
1479    xev.xclient.format = 32;
1480    xev.xclient.data.l[0] = win;
1481    xev.xclient.data.l[1] = atom;
1482    xev.xclient.data.l[2] = 0; // later
1483    xev.xclient.data.l[3] = 0; // later
1484    xev.xclient.data.l[4] = 0; // later
1485 
1486    XSendEvent(_ecore_x_disp, root, False,
1487               SubstructureRedirectMask | SubstructureNotifyMask,
1488               &xev);
1489    if (_ecore_xlib_sync) ecore_x_sync();
1490 }
1491 
1492 EAPI void
ecore_x_e_window_profile_change_request_send(Ecore_X_Window win,const char * profile)1493 ecore_x_e_window_profile_change_request_send(Ecore_X_Window win,
1494                                              const char    *profile)
1495 {
1496    XEvent xev = { 0 };
1497    Ecore_X_Atom atom;
1498 
1499    LOGFN;
1500 
1501    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1502 
1503    if (!win)
1504      return;
1505 
1506    atom = ecore_x_atom_get(profile);
1507 
1508    xev.xclient.type = ClientMessage;
1509    xev.xclient.display = _ecore_x_disp;
1510    xev.xclient.window = win;
1511    xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE_REQUEST;
1512    xev.xclient.format = 32;
1513    xev.xclient.data.l[0] = win;
1514    xev.xclient.data.l[1] = atom;
1515    xev.xclient.data.l[2] = 0; // later
1516    xev.xclient.data.l[3] = 0; // later
1517    xev.xclient.data.l[4] = 0; // later
1518 
1519    XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
1520    if (_ecore_xlib_sync) ecore_x_sync();
1521 }
1522 
1523 
1524 EAPI void
ecore_x_e_window_profile_change_done_send(Ecore_X_Window root,Ecore_X_Window win,const char * profile)1525 ecore_x_e_window_profile_change_done_send(Ecore_X_Window root,
1526                                           Ecore_X_Window win,
1527                                           const char    *profile)
1528 {
1529    XEvent xev = { 0 };
1530    Ecore_X_Atom atom;
1531 
1532    LOGFN;
1533 
1534    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1535 
1536    if (!root)
1537      root = DefaultRootWindow(_ecore_x_disp);
1538 
1539    atom = ecore_x_atom_get(profile);
1540 
1541    xev.xclient.type = ClientMessage;
1542    xev.xclient.display = _ecore_x_disp;
1543    xev.xclient.window = win;
1544    xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_PROFILE_CHANGE_DONE;
1545    xev.xclient.format = 32;
1546    xev.xclient.data.l[0] = win;
1547    xev.xclient.data.l[1] = atom;
1548    xev.xclient.data.l[2] = 0; // later
1549    xev.xclient.data.l[3] = 0; // later
1550    xev.xclient.data.l[4] = 0; // later
1551 
1552    XSendEvent(_ecore_x_disp, root, False,
1553               SubstructureRedirectMask | SubstructureNotifyMask,
1554               &xev);
1555    if (_ecore_xlib_sync) ecore_x_sync();
1556 }
1557 
1558 EAPI void
ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,Eina_Bool enabled)1559 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
1560                                   Eina_Bool enabled)
1561 {
1562    Ecore_X_Window win;
1563 
1564    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1565 
1566    if (!root)
1567      root = DefaultRootWindow(_ecore_x_disp);
1568 
1569    LOGFN;
1570    if (enabled)
1571      {
1572         win = ecore_x_window_new(root, 1, 2, 3, 4);
1573         ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1574                                     ECORE_X_ATOM_WINDOW, &win, 1);
1575         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1576                                     ECORE_X_ATOM_WINDOW, &win, 1);
1577      }
1578    else
1579      {
1580         int ret;
1581 
1582         ret =
1583           ecore_x_window_prop_xid_get(root,
1584                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1585                                       ECORE_X_ATOM_WINDOW,
1586                                       &win, 1);
1587         if ((ret == 1) && (win))
1588           {
1589              ecore_x_window_prop_property_del(
1590                root,
1591                ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
1592              ecore_x_window_free(win);
1593           }
1594      }
1595 }
1596 
1597 EAPI Eina_Bool
ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)1598 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
1599 {
1600    Ecore_X_Window win, win2;
1601    int ret;
1602 
1603    LOGFN;
1604 
1605    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
1606 
1607    if (!root)
1608      root = DefaultRootWindow(_ecore_x_disp);
1609 
1610    ret =
1611      ecore_x_window_prop_xid_get(root,
1612                                  ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1613                                  ECORE_X_ATOM_WINDOW,
1614                                  &win, 1);
1615    if ((ret == 1) && (win))
1616      {
1617         ret =
1618           ecore_x_window_prop_xid_get(win,
1619                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1620                                       ECORE_X_ATOM_WINDOW,
1621                                       &win2, 1);
1622         if ((ret == 1) && (win2 == win))
1623           return EINA_TRUE;
1624      }
1625 
1626    return EINA_FALSE;
1627 }
1628 
1629 EAPI void
ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)1630 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
1631 {
1632    XEvent xev = { 0 };
1633 
1634    LOGFN;
1635 
1636    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1637 
1638    xev.xclient.type = ClientMessage;
1639    xev.xclient.display = _ecore_x_disp;
1640    xev.xclient.window = win;
1641    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
1642    xev.xclient.format = 32;
1643    xev.xclient.data.l[0] = win;
1644    xev.xclient.data.l[1] = 0; // later
1645    xev.xclient.data.l[2] = 0; // later
1646    xev.xclient.data.l[3] = 0; // later
1647    xev.xclient.data.l[4] = 0; // later
1648 
1649    XSendEvent(_ecore_x_disp, win, False,
1650               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1651               &xev);
1652    if (_ecore_xlib_sync) ecore_x_sync();
1653 }
1654 
1655 EAPI void
ecore_x_e_comp_sync_end_send(Ecore_X_Window win)1656 ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
1657 {
1658    XEvent xev = { 0 };
1659 
1660    LOGFN;
1661 
1662    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1663 
1664    xev.xclient.type = ClientMessage;
1665    xev.xclient.display = _ecore_x_disp;
1666    xev.xclient.window = win;
1667    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
1668    xev.xclient.format = 32;
1669    xev.xclient.data.l[0] = win;
1670    xev.xclient.data.l[1] = 0; // later
1671    xev.xclient.data.l[2] = 0; // later
1672    xev.xclient.data.l[3] = 0; // later
1673    xev.xclient.data.l[4] = 0; // later
1674 
1675    XSendEvent(_ecore_x_disp, win, False,
1676               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1677               &xev);
1678    if (_ecore_xlib_sync) ecore_x_sync();
1679 }
1680 
1681 EAPI void
ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)1682 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
1683 {
1684    XEvent xev = { 0 };
1685 
1686    LOGFN;
1687 
1688    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1689 
1690    xev.xclient.type = ClientMessage;
1691    xev.xclient.display = _ecore_x_disp;
1692    xev.xclient.window = win;
1693    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
1694    xev.xclient.format = 32;
1695    xev.xclient.data.l[0] = win;
1696    xev.xclient.data.l[1] = 0; // later
1697    xev.xclient.data.l[2] = 0; // later
1698    xev.xclient.data.l[3] = 0; // later
1699    xev.xclient.data.l[4] = 0; // later
1700 
1701    XSendEvent(_ecore_x_disp, win, False,
1702               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1703               &xev);
1704    if (_ecore_xlib_sync) ecore_x_sync();
1705 }
1706 
1707 EAPI void
ecore_x_e_comp_flush_send(Ecore_X_Window win)1708 ecore_x_e_comp_flush_send(Ecore_X_Window win)
1709 {
1710    XEvent xev = { 0 };
1711 
1712    LOGFN;
1713 
1714    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1715 
1716    xev.xclient.type = ClientMessage;
1717    xev.xclient.display = _ecore_x_disp;
1718    xev.xclient.window = win;
1719    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
1720    xev.xclient.format = 32;
1721    xev.xclient.data.l[0] = win;
1722    xev.xclient.data.l[1] = 0; // later
1723    xev.xclient.data.l[2] = 0; // later
1724    xev.xclient.data.l[3] = 0; // later
1725    xev.xclient.data.l[4] = 0; // later
1726 
1727    XSendEvent(_ecore_x_disp, win, False,
1728               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1729               &xev);
1730    if (_ecore_xlib_sync) ecore_x_sync();
1731 }
1732 
1733 EAPI void
ecore_x_e_comp_dump_send(Ecore_X_Window win)1734 ecore_x_e_comp_dump_send(Ecore_X_Window win)
1735 {
1736    XEvent xev = { 0 };
1737 
1738    LOGFN;
1739 
1740    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
1741 
1742    xev.xclient.type = ClientMessage;
1743    xev.xclient.display = _ecore_x_disp;
1744    xev.xclient.window = win;
1745    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1746    xev.xclient.format = 32;
1747    xev.xclient.data.l[0] = win;
1748    xev.xclient.data.l[1] = 0; // later
1749    xev.xclient.data.l[2] = 0; // later
1750    xev.xclient.data.l[3] = 0; // later
1751    xev.xclient.data.l[4] = 0; // later
1752 
1753    XSendEvent(_ecore_x_disp, win, False,
1754               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1755               &xev);
1756    if (_ecore_xlib_sync) ecore_x_sync();
1757 }
1758 
1759 EAPI void
ecore_x_e_comp_pixmap_set(Ecore_X_Window win,Ecore_X_Pixmap pixmap)1760 ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
1761                           Ecore_X_Pixmap pixmap)
1762 {
1763    LOGFN;
1764    if (pixmap)
1765      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
1766                                  ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1767    else
1768      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_PIXMAP);
1769 }
1770 
1771 EAPI Ecore_X_Pixmap
ecore_x_e_comp_pixmap_get(Ecore_X_Window win)1772 ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1773 {
1774    int ret = 0;
1775    Ecore_X_Pixmap pixmap = 0;
1776 
1777    LOGFN;
1778    ret =
1779      ecore_x_window_prop_xid_get(win,
1780                                  ECORE_X_ATOM_E_COMP_PIXMAP,
1781                                  ECORE_X_ATOM_PIXMAP,
1782                                  &pixmap, 1);
1783    if (ret != 1)
1784      return 0;
1785 
1786    return pixmap;
1787 }
1788 
1789 static Ecore_X_Atom
_ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)1790 _ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1791 {
1792    switch (state)
1793      {
1794       case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1795         return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1796 
1797       case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1798         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1799 
1800       default:
1801         break;
1802      }
1803    return 0;
1804 }
1805 
1806 static Ecore_X_Illume_Indicator_State
_ecore_x_e_indicator_state_get(Ecore_X_Atom atom)1807 _ecore_x_e_indicator_state_get(Ecore_X_Atom atom)
1808 {
1809    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1810      return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1811 
1812    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1813      return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1814 
1815    return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1816 }
1817 
1818 EAPI void
ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_State state)1819 ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
1820                                      Ecore_X_Illume_Indicator_State state)
1821 {
1822    Ecore_X_Atom atom = 0;
1823 
1824    LOGFN;
1825    atom = _ecore_x_e_indicator_atom_get(state);
1826    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1827                                 &atom, 1);
1828 }
1829 
1830 EAPI Ecore_X_Illume_Indicator_State
ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)1831 ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1832 {
1833    Ecore_X_Atom atom = 0;
1834 
1835    LOGFN;
1836    if (!ecore_x_window_prop_atom_get(win,
1837                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1838                                      &atom, 1))
1839      return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1840 
1841    return _ecore_x_e_indicator_state_get(atom);
1842 }
1843 
1844 EAPI void
ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_State state)1845 ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
1846                                       Ecore_X_Illume_Indicator_State state)
1847 {
1848    LOGFN;
1849    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1850                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1851                                  _ecore_x_e_indicator_atom_get(state),
1852                                  0, 0, 0, 0);
1853 }
1854 
1855 static Ecore_X_Atom
_ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)1856 _ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1857 {
1858    switch (mode)
1859      {
1860       case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1861         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1862 
1863       case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1864         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1865 
1866       case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1867         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1868 
1869       default:
1870         break;
1871      }
1872    return 0;
1873 }
1874 
1875 static Ecore_X_Illume_Indicator_Opacity_Mode
_ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)1876 _ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1877 {
1878    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1879      return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1880 
1881    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1882      return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1883 
1884    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1885      return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1886 
1887    return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1888 }
1889 
1890 EAPI void
ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_Opacity_Mode mode)1891 ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1892                                      Ecore_X_Illume_Indicator_Opacity_Mode mode)
1893 {
1894    Ecore_X_Atom atom = 0;
1895 
1896    LOGFN;
1897    atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1898    ecore_x_window_prop_atom_set(win,
1899                                 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1900                                 &atom, 1);
1901 }
1902 
1903 EAPI Ecore_X_Illume_Indicator_Opacity_Mode
ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)1904 ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1905 {
1906    Ecore_X_Atom atom = 0;
1907 
1908    LOGFN;
1909    if (!ecore_x_window_prop_atom_get(win,
1910                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1911                                      &atom, 1))
1912      return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1913 
1914    return _ecore_x_e_indicator_opacity_get(atom);
1915 }
1916 
1917 EAPI void
ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_Opacity_Mode mode)1918 ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1919                                       Ecore_X_Illume_Indicator_Opacity_Mode mode)
1920 {
1921    LOGFN;
1922    ecore_x_client_message32_send(win,
1923                                  ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1924                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1925                                  _ecore_x_e_indicator_opacity_atom_get(mode),
1926                                  0, 0, 0, 0);
1927 }
1928 
1929 static Ecore_X_Atom
_ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode)1930 _ecore_x_e_indicator_type_atom_get(Ecore_X_Illume_Indicator_Type_Mode mode)
1931 {
1932    switch (mode)
1933      {
1934       case ECORE_X_ILLUME_INDICATOR_TYPE_1:
1935         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1;
1936 
1937       case ECORE_X_ILLUME_INDICATOR_TYPE_2:
1938         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2;
1939 
1940       case ECORE_X_ILLUME_INDICATOR_TYPE_3:
1941         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_3;
1942 
1943       default:
1944         break;
1945      }
1946    return 0;
1947 }
1948 
1949 static Ecore_X_Illume_Indicator_Type_Mode
_ecore_x_e_indicator_type_get(Ecore_X_Atom atom)1950 _ecore_x_e_indicator_type_get(Ecore_X_Atom atom)
1951 {
1952    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_1)
1953      return ECORE_X_ILLUME_INDICATOR_TYPE_1;
1954 
1955    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_2)
1956      return ECORE_X_ILLUME_INDICATOR_TYPE_2;
1957 
1958    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_3)
1959      return ECORE_X_ILLUME_INDICATOR_TYPE_3;
1960 
1961    return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN;
1962 }
1963 
1964 EAPI void
ecore_x_e_illume_indicator_type_set(Ecore_X_Window win,Ecore_X_Illume_Indicator_Type_Mode mode)1965 ecore_x_e_illume_indicator_type_set(Ecore_X_Window win,
1966                                      Ecore_X_Illume_Indicator_Type_Mode mode)
1967 {
1968    Ecore_X_Atom atom = 0;
1969 
1970    LOGFN;
1971    atom = _ecore_x_e_indicator_type_atom_get(mode);
1972    ecore_x_window_prop_atom_set(win,
1973                                 ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1974                                 &atom, 1);
1975 }
1976 
1977 EAPI Ecore_X_Illume_Indicator_Type_Mode
ecore_x_e_illume_indicator_type_get(Ecore_X_Window win)1978 ecore_x_e_illume_indicator_type_get(Ecore_X_Window win)
1979 {
1980    Ecore_X_Atom atom = 0;
1981 
1982    LOGFN;
1983    if (!ecore_x_window_prop_atom_get(win,
1984                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1985                                      &atom, 1))
1986      return ECORE_X_ILLUME_INDICATOR_TYPE_UNKNOWN;
1987 
1988    return _ecore_x_e_indicator_type_get(atom);
1989 }
1990 
1991 EAPI void
ecore_x_e_illume_indicator_type_send(Ecore_X_Window win,Ecore_X_Illume_Indicator_Type_Mode mode)1992 ecore_x_e_illume_indicator_type_send(Ecore_X_Window win,
1993                                       Ecore_X_Illume_Indicator_Type_Mode mode)
1994 {
1995    LOGFN;
1996    ecore_x_client_message32_send(win,
1997                                  ECORE_X_ATOM_E_ILLUME_INDICATOR_TYPE_MODE,
1998                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1999                                  _ecore_x_e_indicator_type_atom_get(mode),
2000                                  0, 0, 0, 0);
2001 }
2002 
2003 static Ecore_X_Atom
_ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)2004 _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
2005 {
2006    switch (state)
2007      {
2008       case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
2009         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
2010 
2011       case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
2012         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
2013 
2014       default:
2015         break;
2016      }
2017    return 0;
2018 }
2019 
2020 static Ecore_X_Illume_Window_State
_ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)2021 _ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
2022 {
2023    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
2024      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2025 
2026    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
2027      return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
2028 
2029    return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2030 }
2031 
2032 EAPI void
ecore_x_e_illume_window_state_set(Ecore_X_Window win,Ecore_X_Illume_Window_State state)2033 ecore_x_e_illume_window_state_set(Ecore_X_Window win,
2034                                   Ecore_X_Illume_Window_State state)
2035 {
2036    Ecore_X_Atom atom = 0;
2037 
2038    LOGFN;
2039    atom = _ecore_x_e_illume_window_state_atom_get(state);
2040    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2041                                 &atom, 1);
2042 }
2043 
2044 EAPI Ecore_X_Illume_Window_State
ecore_x_e_illume_window_state_get(Ecore_X_Window win)2045 ecore_x_e_illume_window_state_get(Ecore_X_Window win)
2046 {
2047    Ecore_X_Atom atom;
2048 
2049    LOGFN;
2050    if (!ecore_x_window_prop_atom_get(win,
2051                                      ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2052                                      &atom, 1))
2053      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
2054 
2055    return _ecore_x_e_illume_window_state_get(atom);
2056 }
2057 
2058 EAPI void
ecore_x_e_illume_window_state_send(Ecore_X_Window win,Ecore_X_Illume_Window_State state)2059 ecore_x_e_illume_window_state_send(Ecore_X_Window win,
2060                                    Ecore_X_Illume_Window_State state)
2061 {
2062    LOGFN;
2063    ecore_x_client_message32_send(win,
2064                                  ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
2065                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
2066                                  _ecore_x_e_illume_window_state_atom_get(state),
2067                                  0, 0, 0, 0);
2068 }
2069 
2070 EAPI void
ecore_x_e_window_rotation_supported_set(Ecore_X_Window root,Eina_Bool enabled)2071 ecore_x_e_window_rotation_supported_set(Ecore_X_Window root,
2072                                         Eina_Bool      enabled)
2073 {
2074    Ecore_X_Window win;
2075 
2076    LOGFN;
2077 
2078    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2079 
2080    if (!root)
2081      root = DefaultRootWindow(_ecore_x_disp);
2082 
2083    if (enabled)
2084      {
2085         win = ecore_x_window_new(root, 1, 2, 3, 4);
2086         ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2087                                     ECORE_X_ATOM_WINDOW, &win, 1);
2088         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2089                                     ECORE_X_ATOM_WINDOW, &win, 1);
2090      }
2091    else
2092      {
2093         int ret;
2094 
2095         ret =
2096           ecore_x_window_prop_xid_get(root,
2097                                       ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2098                                       ECORE_X_ATOM_WINDOW,
2099                                       &win, 1);
2100         if ((ret == 1) && (win))
2101           {
2102              ecore_x_window_prop_property_del
2103                (root, ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED);
2104              ecore_x_window_free(win);
2105           }
2106      }
2107 }
2108 
2109 EAPI Eina_Bool
ecore_x_e_window_rotation_supported_get(Ecore_X_Window root)2110 ecore_x_e_window_rotation_supported_get(Ecore_X_Window root)
2111 {
2112    Ecore_X_Window win, win2;
2113    int ret;
2114 
2115    LOGFN;
2116 
2117    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
2118 
2119    if (!root)
2120      root = DefaultRootWindow(_ecore_x_disp);
2121 
2122    ret =
2123      ecore_x_window_prop_xid_get(root,
2124                                  ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2125                                  ECORE_X_ATOM_WINDOW,
2126                                  &win, 1);
2127    if ((ret == 1) && (win))
2128      {
2129         ret =
2130           ecore_x_window_prop_xid_get(win,
2131                                       ECORE_X_ATOM_E_WINDOW_ROTATION_SUPPORTED,
2132                                       ECORE_X_ATOM_WINDOW,
2133                                       &win2, 1);
2134         if ((ret == 1) && (win2 == win))
2135           return EINA_TRUE;
2136      }
2137 
2138    return EINA_FALSE;
2139 }
2140 
2141 EAPI void
ecore_x_e_window_rotation_app_set(Ecore_X_Window win,Eina_Bool set)2142 ecore_x_e_window_rotation_app_set(Ecore_X_Window win,
2143                                   Eina_Bool      set)
2144 {
2145    unsigned int val = 0;
2146 
2147    LOGFN;
2148 
2149    if (set) val = 1;
2150 
2151    ecore_x_window_prop_card32_set(win,
2152                                   ECORE_X_ATOM_E_WINDOW_ROTATION_APP_SUPPORTED,
2153                                   &val, 1);
2154 }
2155 
2156 EAPI Eina_Bool
ecore_x_e_window_rotation_app_get(Ecore_X_Window win)2157 ecore_x_e_window_rotation_app_get(Ecore_X_Window win)
2158 {
2159    unsigned int val = 0;
2160 
2161    LOGFN;
2162    if (!ecore_x_window_prop_card32_get(win,
2163                                        ECORE_X_ATOM_E_WINDOW_ROTATION_APP_SUPPORTED,
2164                                        &val, 1))
2165      return EINA_FALSE;
2166 
2167    return val ? EINA_TRUE : EINA_FALSE;
2168 }
2169 
2170 EAPI void
ecore_x_e_window_rotation_preferred_rotation_set(Ecore_X_Window win,int rot)2171 ecore_x_e_window_rotation_preferred_rotation_set(Ecore_X_Window win,
2172                                                  int            rot)
2173 {
2174    unsigned int val = 0;
2175 
2176    LOGFN;
2177 
2178    if (rot != -1)
2179      {
2180         val = (unsigned int)rot;
2181         ecore_x_window_prop_card32_set(win,
2182                                        ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION,
2183                                        &val, 1);
2184      }
2185    else
2186      {
2187         ecore_x_window_prop_property_del(win,
2188                                          ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION);
2189      }
2190 }
2191 
2192 EAPI Eina_Bool
ecore_x_e_window_rotation_preferred_rotation_get(Ecore_X_Window win,int * rot)2193 ecore_x_e_window_rotation_preferred_rotation_get(Ecore_X_Window win,
2194                                                  int           *rot)
2195 {
2196    unsigned int val = 0;
2197    int ret = 0;
2198 
2199    LOGFN;
2200 
2201    ret = ecore_x_window_prop_card32_get(win,
2202                                         ECORE_X_ATOM_E_WINDOW_ROTATION_PREFERRED_ROTATION,
2203                                         &val, 1);
2204    if (ret == 1)
2205      {
2206         if (rot) *rot = (int)val;
2207         return EINA_TRUE;
2208      }
2209    return EINA_FALSE;
2210 }
2211 
2212 EAPI void
ecore_x_e_window_rotation_available_rotations_set(Ecore_X_Window win,const int * rots,unsigned int count)2213 ecore_x_e_window_rotation_available_rotations_set(Ecore_X_Window win,
2214                                                   const int     *rots,
2215                                                   unsigned int   count)
2216 {
2217    LOGFN;
2218 
2219    if (!win) return;
2220 
2221    if ((rots) && (count > 0))
2222      ecore_x_window_prop_card32_set(win,
2223                                     ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST,
2224                                     (unsigned int *)rots, count);
2225    else
2226      ecore_x_window_prop_property_del(win,
2227                                       ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST);
2228 }
2229 
2230 EAPI Eina_Bool
ecore_x_e_window_rotation_available_rotations_get(Ecore_X_Window win,int ** rots,unsigned int * count)2231 ecore_x_e_window_rotation_available_rotations_get(Ecore_X_Window  win,
2232                                                   int           **rots,
2233                                                   unsigned int   *count)
2234 {
2235    unsigned char *data = NULL;
2236    int num, i;
2237    int *val = NULL;
2238 
2239    LOGFN;
2240 
2241    if ((!win) || (!rots) || (!count))
2242      return EINA_FALSE;
2243 
2244    *rots = NULL;
2245    *count = 0;
2246 
2247    if (!ecore_x_window_prop_property_get(win,
2248                                          ECORE_X_ATOM_E_WINDOW_ROTATION_AVAILABLE_LIST,
2249                                          XA_CARDINAL, 32, &data, &num))
2250      return EINA_FALSE;
2251 
2252    *count = num;
2253 
2254    if ((num >= 1) && (data))
2255      {
2256         val = calloc(num, sizeof(int));
2257         if (!val)
2258           {
2259              if (data) XFree(data);
2260              return EINA_FALSE;
2261           }
2262         for (i = 0; i < num; i++)
2263           val[i] = ((int *)data)[i];
2264         if (data) XFree(data);
2265         *rots = val;
2266         return EINA_TRUE;
2267      }
2268    if (data) XFree(data);
2269    return EINA_FALSE;
2270 }
2271 
2272 EAPI void
ecore_x_e_window_rotation_change_prepare_send(Ecore_X_Window win,int rot,Eina_Bool resize,int w,int h)2273 ecore_x_e_window_rotation_change_prepare_send(Ecore_X_Window win,
2274                                               int            rot,
2275                                               Eina_Bool      resize,
2276                                               int            w,
2277                                               int            h)
2278 {
2279    LOGFN;
2280    ecore_x_client_message32_send
2281      (win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE,
2282      ECORE_X_EVENT_MASK_NONE,
2283      win, rot, resize, w, h);
2284 }
2285 
2286 EAPI void
ecore_x_e_window_rotation_change_prepare_done_send(Ecore_X_Window root,Ecore_X_Window win,int rot)2287 ecore_x_e_window_rotation_change_prepare_done_send(Ecore_X_Window root,
2288                                                    Ecore_X_Window win,
2289                                                    int            rot)
2290 {
2291    XEvent xev = { 0 };
2292 
2293    LOGFN;
2294 
2295    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2296 
2297    if (!root)
2298      root = DefaultRootWindow(_ecore_x_disp);
2299 
2300    xev.xclient.type = ClientMessage;
2301    xev.xclient.display = _ecore_x_disp;
2302    xev.xclient.window = win;
2303    xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_PREPARE_DONE;
2304    xev.xclient.format = 32;
2305    xev.xclient.data.l[0] = win;
2306    xev.xclient.data.l[1] = rot;
2307    xev.xclient.data.l[2] = 0;
2308    xev.xclient.data.l[3] = 0;
2309    xev.xclient.data.l[4] = 0;
2310 
2311    XSendEvent(_ecore_x_disp, root, False,
2312               SubstructureRedirectMask | SubstructureNotifyMask,
2313               &xev);
2314 }
2315 
2316 EAPI void
ecore_x_e_window_rotation_change_request_send(Ecore_X_Window win,int rot)2317 ecore_x_e_window_rotation_change_request_send(Ecore_X_Window win,
2318                                               int            rot)
2319 {
2320    LOGFN;
2321    ecore_x_client_message32_send
2322      (win, ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_REQUEST,
2323      ECORE_X_EVENT_MASK_NONE,
2324      win, rot, 0, 0, 0);
2325 }
2326 
2327 EAPI void
ecore_x_e_window_rotation_change_done_send(Ecore_X_Window root,Ecore_X_Window win,int rot,int w,int h)2328 ecore_x_e_window_rotation_change_done_send(Ecore_X_Window root,
2329                                            Ecore_X_Window win,
2330                                            int            rot,
2331                                            int            w,
2332                                            int            h)
2333 {
2334    XEvent xev = { 0 };
2335 
2336    LOGFN;
2337 
2338    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2339 
2340    if (!root)
2341      root = DefaultRootWindow(_ecore_x_disp);
2342 
2343    xev.xclient.type = ClientMessage;
2344    xev.xclient.display = _ecore_x_disp;
2345    xev.xclient.window = win;
2346    xev.xclient.message_type = ECORE_X_ATOM_E_WINDOW_ROTATION_CHANGE_DONE;
2347    xev.xclient.format = 32;
2348    xev.xclient.data.l[0] = win;
2349    xev.xclient.data.l[1] = rot;
2350    xev.xclient.data.l[2] = w;
2351    xev.xclient.data.l[3] = h;
2352    xev.xclient.data.l[4] = 0;
2353 
2354    XSendEvent(_ecore_x_disp, root, False,
2355               SubstructureRedirectMask | SubstructureNotifyMask,
2356               &xev);
2357 }
2358 
2359 /*
2360  * Does keyrouter exist?
2361  */
2362 EAPI void
ecore_x_e_keyrouter_set(Ecore_X_Window win EINA_UNUSED,Eina_Bool on)2363 ecore_x_e_keyrouter_set(Ecore_X_Window win EINA_UNUSED,
2364                         Eina_Bool on)
2365 {
2366    //key router call this api when it start running
2367    unsigned int val;
2368    Ecore_X_Window root;
2369 
2370    LOGFN;
2371 
2372    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2373 
2374    root = DefaultRootWindow(_ecore_x_disp);
2375 
2376    val = (on) ? 1 : 0;
2377    ecore_x_window_prop_card32_set(root, ECORE_X_ATOM_E_KEYROUTER_SUPPORTED,
2378                                   &val, 1);
2379 }
2380 
2381 EAPI Eina_Bool
ecore_x_e_keyrouter_get(Ecore_X_Window win EINA_UNUSED)2382 ecore_x_e_keyrouter_get(Ecore_X_Window win EINA_UNUSED)
2383 {
2384    //check the existance of keyrouter
2385    int ret;
2386    unsigned int val;
2387    Ecore_X_Window root;
2388 
2389    LOGFN;
2390 
2391    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, EINA_FALSE);
2392 
2393    root = DefaultRootWindow(_ecore_x_disp);
2394 
2395    ret = ecore_x_window_prop_card32_get(root, ECORE_X_ATOM_E_KEYROUTER_SUPPORTED,
2396                                         &val, 1);
2397    if (ret != 1) return EINA_FALSE;
2398 
2399    return val == 1 ? EINA_TRUE : EINA_FALSE;
2400 }
2401 
2402 EAPI void
ecore_x_e_stack_type_set(Ecore_X_Window win,Ecore_X_Stack_Type stack_type)2403 ecore_x_e_stack_type_set(Ecore_X_Window win,
2404                          Ecore_X_Stack_Type stack_type)
2405 {
2406    unsigned int val = stack_type;
2407    LOGFN;
2408 
2409    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2410 
2411    if (stack_type == ECORE_X_STACK_NONE)
2412      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_STACK_TYPE);
2413    else
2414      ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_STACK_TYPE,
2415                                     &val, 1);
2416 }
2417 
2418 EAPI Ecore_X_Stack_Type
ecore_x_e_stack_type_get(Ecore_X_Window win)2419 ecore_x_e_stack_type_get(Ecore_X_Window win)
2420 {
2421    int ret;
2422    unsigned int val;
2423    LOGFN;
2424 
2425    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_NONE);
2426 
2427    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_STACK_TYPE,
2428                                         &val, 1);
2429    if (ret != 1) return ECORE_X_STACK_NONE;
2430    if (val >= ECORE_X_STACK_LAST) val = ECORE_X_STACK_STANDARD;
2431    return (Ecore_X_Stack_Type)val;
2432 }
2433 
2434 EAPI void
ecore_x_e_stack_position_set(Ecore_X_Window win,Ecore_X_Stack_Position stack_position)2435 ecore_x_e_stack_position_set(Ecore_X_Window win,
2436                              Ecore_X_Stack_Position stack_position)
2437 {
2438    unsigned int val = stack_position;
2439    LOGFN;
2440 
2441    EINA_SAFETY_ON_NULL_RETURN(_ecore_x_disp);
2442 
2443    if (stack_position == ECORE_X_STACK_POSITION_NONE)
2444      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_STACK_POSITION);
2445    else
2446      ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_STACK_POSITION,
2447                                     &val, 1);
2448 }
2449 
2450 EAPI Ecore_X_Stack_Position
ecore_x_e_stack_position_get(Ecore_X_Window win)2451 ecore_x_e_stack_position_get(Ecore_X_Window win)
2452 {
2453    int ret;
2454    unsigned int val;
2455    LOGFN;
2456 
2457    EINA_SAFETY_ON_NULL_RETURN_VAL(_ecore_x_disp, ECORE_X_STACK_POSITION_NONE);
2458 
2459    ret = ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_STACK_POSITION,
2460                                         &val, 1);
2461    if (ret != 1) return ECORE_X_STACK_POSITION_NONE;
2462    if (val >= ECORE_X_STACK_POSITION_LAST) val = ECORE_X_STACK_POSITION_BOTTOM;
2463    return (Ecore_X_Stack_Position)val;
2464 }
2465