Upstream merge
[framework/uifw/ecore.git] / src / lib / ecore_x / xlib / ecore_x_e.c
1 /*
2  * OLD E hints
3  */
4
5 #ifdef HAVE_CONFIG_H
6 # include <config.h>
7 #endif /* ifdef HAVE_CONFIG_H */
8
9 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 EAPI void
15 ecore_x_e_init(void)
16 {
17 }
18
19 EAPI void
20 ecore_x_e_frame_size_set(Ecore_X_Window win,
21                          int fl,
22                          int fr,
23                          int ft,
24                          int fb)
25 {
26    unsigned int frames[4];
27
28    LOGFN(__FILE__, __LINE__, __FUNCTION__);
29    frames[0] = fl;
30    frames[1] = fr;
31    frames[2] = ft;
32    frames[3] = fb;
33    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
34 }
35
36 EAPI void
37 ecore_x_e_virtual_keyboard_set(Ecore_X_Window win,
38                                unsigned int is_keyboard)
39 {
40    LOGFN(__FILE__, __LINE__, __FUNCTION__);
41    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
42                                   &is_keyboard, 1);
43 }
44
45 EAPI Eina_Bool
46 ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
47 {
48    unsigned int val;
49
50    LOGFN(__FILE__, __LINE__, __FUNCTION__);
51    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
52                                        &val, 1))
53      return EINA_FALSE;
54
55    return val ? EINA_TRUE : EINA_FALSE;
56 }
57
58 static Ecore_X_Virtual_Keyboard_State
59 _ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)
60 {
61    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
62      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
63
64    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
65      return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
66
67    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
68      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
69
70    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
71      return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
72
73    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
74      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
75
76    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
77      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
78
79    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
80      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
81
82    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
83      return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
84
85    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
86      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
87
88    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
89      return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
90
91    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
92      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
93
94    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
95      return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
96
97    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
98      return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
99
100    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
101      return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
102
103    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
104      return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
105
106    return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
107 }
108
109 static Ecore_X_Atom
110 _ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
111 {
112    switch (state)
113      {
114       case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
115         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
116
117       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
118         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
119
120       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
121         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
122
123       case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
124         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
125
126       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
127         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
128
129       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
130         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
131
132       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
133         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
134
135       case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
136         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
137
138       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
139         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
140
141       case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
142         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
143
144       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
145         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
146
147       case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
148         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
149
150       case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
151         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
152
153       case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
154         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
155
156       case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
157         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
158
159       default: break;
160      }
161    return 0;
162 }
163
164 EAPI void
165 ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window win,
166                                      Ecore_X_Virtual_Keyboard_State state)
167 {
168    Ecore_X_Atom atom = 0;
169
170    LOGFN(__FILE__, __LINE__, __FUNCTION__);
171    atom = _ecore_x_e_vkbd_atom_get(state);
172    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
173                                 &atom, 1);
174 }
175
176 EAPI Ecore_X_Virtual_Keyboard_State
177 ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
178 {
179    Ecore_X_Atom atom;
180
181    LOGFN(__FILE__, __LINE__, __FUNCTION__);
182    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
183                                      &atom, 1))
184      return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
185
186    return _ecore_x_e_vkbd_state_get(atom);
187 }
188
189 EAPI void
190 ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window win,
191                                       Ecore_X_Virtual_Keyboard_State state)
192 {
193    LOGFN(__FILE__, __LINE__, __FUNCTION__);
194    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
195                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
196                                  _ecore_x_e_vkbd_atom_get(state),
197                                  0, 0, 0, 0);
198 }
199
200 static Ecore_X_Atom
201 _ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)
202 {
203    switch (mode)
204      {
205       case ECORE_X_ILLUME_MODE_SINGLE:
206         return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
207
208       case ECORE_X_ILLUME_MODE_DUAL_TOP:
209         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
210
211       case ECORE_X_ILLUME_MODE_DUAL_LEFT:
212         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
213
214       default:
215         break;
216      }
217    return ECORE_X_ILLUME_MODE_UNKNOWN;
218 }
219
220 static Ecore_X_Illume_Mode
221 _ecore_x_e_illume_mode_get(Ecore_X_Atom atom)
222 {
223    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
224      return ECORE_X_ILLUME_MODE_SINGLE;
225
226    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
227      return ECORE_X_ILLUME_MODE_DUAL_TOP;
228
229    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
230      return ECORE_X_ILLUME_MODE_DUAL_LEFT;
231
232    return ECORE_X_ILLUME_MODE_UNKNOWN;
233 }
234
235 EAPI void
236 ecore_x_e_illume_zone_set(Ecore_X_Window win,
237                           Ecore_X_Window zone)
238 {
239    LOGFN(__FILE__, __LINE__, __FUNCTION__);
240    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
241                                   &zone, 1);
242 }
243
244 EAPI Ecore_X_Window
245 ecore_x_e_illume_zone_get(Ecore_X_Window win)
246 {
247    Ecore_X_Window zone;
248
249    LOGFN(__FILE__, __LINE__, __FUNCTION__);
250    if (!ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
251                                        &zone, 1))
252      return 0;
253
254    return zone;
255 }
256
257 EAPI void
258 ecore_x_e_illume_zone_list_set(Ecore_X_Window win,
259                                Ecore_X_Window *zones,
260                                unsigned int n_zones)
261 {
262    LOGFN(__FILE__, __LINE__, __FUNCTION__);
263    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
264                                   zones, n_zones);
265 }
266
267 EAPI void
268 ecore_x_e_illume_conformant_set(Ecore_X_Window win,
269                                 unsigned int is_conformant)
270 {
271    LOGFN(__FILE__, __LINE__, __FUNCTION__);
272    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
273                                   &is_conformant, 1);
274 }
275
276 EAPI Eina_Bool
277 ecore_x_e_illume_conformant_get(Ecore_X_Window win)
278 {
279    unsigned int val = 0;
280
281    LOGFN(__FILE__, __LINE__, __FUNCTION__);
282    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
283                                        &val, 1))
284      return EINA_FALSE;
285
286    return val ? EINA_TRUE : EINA_FALSE;
287 }
288
289 EAPI void
290 ecore_x_e_illume_mode_set(Ecore_X_Window win,
291                           Ecore_X_Illume_Mode mode)
292 {
293    Ecore_X_Atom atom = 0;
294
295    LOGFN(__FILE__, __LINE__, __FUNCTION__);
296    atom = _ecore_x_e_illume_atom_get(mode);
297    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
298                                 &atom, 1);
299 }
300
301 EAPI Ecore_X_Illume_Mode
302 ecore_x_e_illume_mode_get(Ecore_X_Window win)
303 {
304    Ecore_X_Atom atom = 0;
305
306    LOGFN(__FILE__, __LINE__, __FUNCTION__);
307    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
308      return ECORE_X_ILLUME_MODE_UNKNOWN;
309
310    return _ecore_x_e_illume_mode_get(atom);
311 }
312
313 EAPI void
314 ecore_x_e_illume_mode_send(Ecore_X_Window win,
315                            Ecore_X_Illume_Mode mode)
316 {
317    LOGFN(__FILE__, __LINE__, __FUNCTION__);
318    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
319                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
320                                  _ecore_x_e_illume_atom_get(mode),
321                                  0, 0, 0, 0);
322 }
323
324 EAPI void
325 ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
326 {
327    LOGFN(__FILE__, __LINE__, __FUNCTION__);
328    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
329                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
330                                  1, 0, 0, 0, 0);
331 }
332
333 EAPI void
334 ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
335 {
336    LOGFN(__FILE__, __LINE__, __FUNCTION__);
337    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
338                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
339                                  1, 0, 0, 0, 0);
340 }
341
342 EAPI void
343 ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
344 {
345    LOGFN(__FILE__, __LINE__, __FUNCTION__);
346    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
347                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
348                                  1, 0, 0, 0, 0);
349 }
350
351 EAPI void
352 ecore_x_e_illume_close_send(Ecore_X_Window win)
353 {
354    LOGFN(__FILE__, __LINE__, __FUNCTION__);
355    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
356                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
357                                  1, 0, 0, 0, 0);
358 }
359
360 EAPI void
361 ecore_x_e_illume_home_new_send(Ecore_X_Window win)
362 {
363    LOGFN(__FILE__, __LINE__, __FUNCTION__);
364    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
365                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
366                                  1, 0, 0, 0, 0);
367 }
368
369 EAPI void
370 ecore_x_e_illume_home_del_send(Ecore_X_Window win)
371 {
372    LOGFN(__FILE__, __LINE__, __FUNCTION__);
373    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
374                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
375                                  1, 0, 0, 0, 0);
376 }
377
378 EAPI void
379 ecore_x_e_illume_access_action_next_send(Ecore_X_Window win)
380 {
381    LOGFN(__FILE__, __LINE__, __FUNCTION__);
382    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
383                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
384                                  win,
385                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_NEXT, 
386                                  0, 0, 0);
387 }
388
389 EAPI void
390 ecore_x_e_illume_access_action_prev_send(Ecore_X_Window win)
391 {
392    LOGFN(__FILE__, __LINE__, __FUNCTION__);
393    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
394                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
395                                  win,
396                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_PREV,
397                                  0, 0, 0);
398 }
399
400 EAPI void
401 ecore_x_e_illume_access_action_activate_send(Ecore_X_Window win)
402 {
403    LOGFN(__FILE__, __LINE__, __FUNCTION__);
404    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
405                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
406                                  win,
407                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_ACTIVATE, 
408                                  0, 0, 0);
409 }
410
411 EAPI void
412 ecore_x_e_illume_access_action_read_send(Ecore_X_Window win)
413 {
414    LOGFN(__FILE__, __LINE__, __FUNCTION__);
415    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
416                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
417                                  win,
418                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ,
419                                  0, 0, 0);
420 }
421
422 EAPI void
423 ecore_x_e_illume_access_action_read_next_send(Ecore_X_Window win)
424 {
425    LOGFN(__FILE__, __LINE__, __FUNCTION__);
426    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
427                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
428                                  win,
429                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_NEXT,
430                                  0, 0, 0);
431 }
432
433 EAPI void
434 ecore_x_e_illume_access_action_read_prev_send(Ecore_X_Window win)
435 {
436    LOGFN(__FILE__, __LINE__, __FUNCTION__);
437    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
438                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
439                                  win,
440                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_READ_PREV,
441                                  0, 0, 0);
442 }
443
444 EAPI void
445 ecore_x_e_illume_drag_set(Ecore_X_Window win,
446                           unsigned int drag)
447 {
448    LOGFN(__FILE__, __LINE__, __FUNCTION__);
449    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
450 }
451
452 EAPI Eina_Bool
453 ecore_x_e_illume_drag_get(Ecore_X_Window win)
454 {
455    unsigned int val = 0;
456
457    LOGFN(__FILE__, __LINE__, __FUNCTION__);
458    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG, &val, 1))
459      return EINA_FALSE;
460
461    return val ? EINA_TRUE : EINA_FALSE;
462 }
463
464 EAPI void
465 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
466                                  unsigned int is_locked)
467 {
468    LOGFN(__FILE__, __LINE__, __FUNCTION__);
469    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
470                                   &is_locked, 1);
471 }
472
473 EAPI Eina_Bool
474 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
475 {
476    unsigned int val = 0;
477
478    LOGFN(__FILE__, __LINE__, __FUNCTION__);
479    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
480                                        &val, 1))
481      return EINA_FALSE;
482
483    return val ? EINA_TRUE : EINA_FALSE;
484 }
485
486 EAPI void
487 ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
488 {
489    LOGFN(__FILE__, __LINE__, __FUNCTION__);
490    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
491                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
492                                  1, 0, 0, 0, 0);
493 }
494
495 EAPI void
496 ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
497 {
498    LOGFN(__FILE__, __LINE__, __FUNCTION__);
499    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
500                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
501                                  1, 0, 0, 0, 0);
502 }
503
504 EAPI void
505 ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
506                                         int x,
507                                         int y,
508                                         int w,
509                                         int h)
510 {
511    unsigned int geom[4];
512
513    LOGFN(__FILE__, __LINE__, __FUNCTION__);
514    geom[0] = x;
515    geom[1] = y;
516    geom[2] = w;
517    geom[3] = h;
518    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
519                                   geom, 4);
520 }
521
522 EAPI Eina_Bool
523 ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
524                                         int *x,
525                                         int *y,
526                                         int *w,
527                                         int *h)
528 {
529    int ret = 0;
530    unsigned int geom[4];
531
532    LOGFN(__FILE__, __LINE__, __FUNCTION__);
533    ret =
534      ecore_x_window_prop_card32_get(win,
535                                     ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
536                                     geom, 4);
537    if (ret != 4)
538      return EINA_FALSE;
539
540    if (x)
541      *x = geom[0];
542
543    if (y)
544      *y = geom[1];
545
546    if (w)
547      *w = geom[2];
548
549    if (h)
550      *h = geom[3];
551
552    return EINA_TRUE;
553 }
554
555 EAPI void
556 ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
557                                       int x,
558                                       int y,
559                                       int w,
560                                       int h)
561 {
562    unsigned int geom[4];
563
564    LOGFN(__FILE__, __LINE__, __FUNCTION__);
565    geom[0] = x;
566    geom[1] = y;
567    geom[2] = w;
568    geom[3] = h;
569    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
570                                   geom, 4);
571 }
572
573 EAPI Eina_Bool
574 ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
575                                       int *x,
576                                       int *y,
577                                       int *w,
578                                       int *h)
579 {
580    int ret = 0;
581    unsigned int geom[4];
582
583    LOGFN(__FILE__, __LINE__, __FUNCTION__);
584    ret =
585      ecore_x_window_prop_card32_get(win,
586                                     ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
587                                     geom, 4);
588    if (ret != 4)
589      return EINA_FALSE;
590
591    if (x)
592      *x = geom[0];
593
594    if (y)
595      *y = geom[1];
596
597    if (w)
598      *w = geom[2];
599
600    if (h)
601      *h = geom[3];
602
603    return EINA_TRUE;
604 }
605
606 EAPI void
607 ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
608                                        int x,
609                                        int y,
610                                        int w,
611                                        int h)
612 {
613    unsigned int geom[4];
614
615    LOGFN(__FILE__, __LINE__, __FUNCTION__);
616    geom[0] = x;
617    geom[1] = y;
618    geom[2] = w;
619    geom[3] = h;
620    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
621                                   geom, 4);
622 }
623
624 EAPI Eina_Bool
625 ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
626                                        int *x,
627                                        int *y,
628                                        int *w,
629                                        int *h)
630 {
631    int ret = 0;
632    unsigned int geom[4];
633
634    LOGFN(__FILE__, __LINE__, __FUNCTION__);
635    ret =
636      ecore_x_window_prop_card32_get(win,
637                                     ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
638                                     geom, 4);
639    if (ret != 4)
640      return EINA_FALSE;
641
642    if (x)
643      *x = geom[0];
644
645    if (y)
646      *y = geom[1];
647
648    if (w)
649      *w = geom[2];
650
651    if (h)
652      *h = geom[3];
653
654    return EINA_TRUE;
655 }
656
657 static Ecore_X_Atom
658 _ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
659 {
660    switch (state)
661      {
662       case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
663         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
664
665       case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
666         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
667
668       default:
669         break;
670      }
671    return 0;
672 }
673
674 static Ecore_X_Illume_Quickpanel_State
675 _ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)
676 {
677    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
678      return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
679
680    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
681      return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
682
683    return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
684 }
685
686 EAPI void
687 ecore_x_e_illume_quickpanel_set(Ecore_X_Window win,
688                                 unsigned int is_quickpanel)
689 {
690    LOGFN(__FILE__, __LINE__, __FUNCTION__);
691    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
692                                   &is_quickpanel, 1);
693 }
694
695 EAPI Eina_Bool
696 ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
697 {
698    unsigned int val = 0;
699
700    LOGFN(__FILE__, __LINE__, __FUNCTION__);
701    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
702                                        &val, 1))
703      return EINA_FALSE;
704
705    return val ? EINA_TRUE : EINA_FALSE;
706 }
707
708 EAPI void
709 ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window win,
710                                       Ecore_X_Illume_Quickpanel_State state)
711 {
712    Ecore_X_Atom atom = 0;
713
714    LOGFN(__FILE__, __LINE__, __FUNCTION__);
715    atom = _ecore_x_e_quickpanel_atom_get(state);
716    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
717                                 &atom, 1);
718 }
719
720 EAPI Ecore_X_Illume_Quickpanel_State
721 ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
722 {
723    Ecore_X_Atom atom;
724
725    LOGFN(__FILE__, __LINE__, __FUNCTION__);
726    if (!ecore_x_window_prop_atom_get(win,
727                                      ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
728                                      &atom, 1))
729      return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
730
731    return _ecore_x_e_quickpanel_state_get(atom);
732 }
733
734 EAPI void
735 ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window win,
736                                        Ecore_X_Illume_Quickpanel_State state)
737 {
738    LOGFN(__FILE__, __LINE__, __FUNCTION__);
739    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
740                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
741                                  _ecore_x_e_quickpanel_atom_get(state),
742                                  0, 0, 0, 0);
743 }
744
745 EAPI void
746 ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
747 {
748    LOGFN(__FILE__, __LINE__, __FUNCTION__);
749    ecore_x_client_message32_send(win,
750                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
751                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
752                                  0, 0, 0, 0, 0);
753 }
754
755 EAPI void
756 ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
757                                                unsigned int priority)
758 {
759    LOGFN(__FILE__, __LINE__, __FUNCTION__);
760    ecore_x_window_prop_card32_set(win,
761                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
762                                   &priority, 1);
763 }
764
765 EAPI int
766 ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
767 {
768    unsigned int val = 0;
769
770    LOGFN(__FILE__, __LINE__, __FUNCTION__);
771    if (!ecore_x_window_prop_card32_get(win,
772                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
773                                        &val, 1))
774      return 0;
775
776    return val;
777 }
778
779 EAPI void
780 ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
781                                                unsigned int priority)
782 {
783    LOGFN(__FILE__, __LINE__, __FUNCTION__);
784    ecore_x_window_prop_card32_set(win,
785                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
786                                   &priority, 1);
787 }
788
789 EAPI int
790 ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
791 {
792    unsigned int val = 0;
793
794    LOGFN(__FILE__, __LINE__, __FUNCTION__);
795    if (!ecore_x_window_prop_card32_get(win,
796                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
797                                        &val, 1))
798      return 0;
799
800    return val;
801 }
802
803 EAPI void
804 ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win,
805                                      unsigned int zone)
806 {
807    LOGFN(__FILE__, __LINE__, __FUNCTION__);
808    ecore_x_window_prop_card32_set(win,
809                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
810                                   &zone, 1);
811 }
812
813 EAPI int
814 ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
815 {
816    unsigned int val = 0;
817
818    LOGFN(__FILE__, __LINE__, __FUNCTION__);
819    if (!ecore_x_window_prop_card32_get(win,
820                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
821                                        &val, 1))
822      return 0;
823
824    return val;
825 }
826
827 EAPI void
828 ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
829 {
830    LOGFN(__FILE__, __LINE__, __FUNCTION__);
831    ecore_x_client_message32_send(win,
832                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
833                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
834                                  1, 0, 0, 0, 0);
835 }
836
837 static Ecore_X_Atom
838 _ecore_x_e_clipboard_atom_get(Ecore_X_Illume_Clipboard_State state)
839 {
840    switch (state)
841      {
842       case ECORE_X_ILLUME_CLIPBOARD_STATE_ON:
843         return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON;
844       case ECORE_X_ILLUME_CLIPBOARD_STATE_OFF:
845         return ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF;
846       default:
847         break;
848      }
849    return 0;
850 }
851
852 static Ecore_X_Illume_Clipboard_State
853 _ecore_x_e_clipboard_state_get(Ecore_X_Atom atom)
854 {
855    if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_ON)
856      return ECORE_X_ILLUME_CLIPBOARD_STATE_ON;
857
858    if (atom == ECORE_X_ATOM_E_ILLUME_CLIPBOARD_OFF)
859      return ECORE_X_ILLUME_CLIPBOARD_STATE_OFF;
860
861    return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
862 }
863
864 EAPI void
865 ecore_x_e_illume_clipboard_state_set(Ecore_X_Window win,
866                                      Ecore_X_Illume_Clipboard_State state)
867 {
868    Ecore_X_Atom atom = 0;
869
870    LOGFN(__FILE__, __LINE__, __FUNCTION__);
871    atom = _ecore_x_e_clipboard_atom_get(state);
872
873    ecore_x_window_prop_atom_set(win,
874                                 ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
875                                 &atom, 1);
876 }
877
878 EAPI Ecore_X_Illume_Clipboard_State
879 ecore_x_e_illume_clipboard_state_get(Ecore_X_Window win)
880 {
881    Ecore_X_Atom atom = 0;
882
883    LOGFN(__FILE__, __LINE__, __FUNCTION__);
884
885    if (!ecore_x_window_prop_atom_get(win,
886                                      ECORE_X_ATOM_E_ILLUME_CLIPBOARD_STATE,
887                                      &atom, 1))
888      return ECORE_X_ILLUME_CLIPBOARD_STATE_UNKNOWN;
889    return _ecore_x_e_clipboard_state_get(atom);
890 }
891
892 EAPI void
893 ecore_x_e_illume_clipboard_geometry_set(Ecore_X_Window win,
894                                         int x, int y, int w, int h)
895 {
896    unsigned int geom[4];
897
898    LOGFN(__FILE__, __LINE__, __FUNCTION__);
899    geom[0] = x;
900    geom[1] = y;
901    geom[2] = w;
902    geom[3] = h;
903    ecore_x_window_prop_card32_set(win,
904                                   ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
905                                   geom, 4);
906 }
907
908 EAPI Eina_Bool
909 ecore_x_e_illume_clipboard_geometry_get(Ecore_X_Window win,
910                                         int *x, int *y, int *w, int *h)
911 {
912    int ret = 0;
913    unsigned int geom[4];
914
915    LOGFN(__FILE__, __LINE__, __FUNCTION__);
916    ret =
917       ecore_x_window_prop_card32_get(win,
918                                      ECORE_X_ATOM_E_ILLUME_CLIPBOARD_GEOMETRY,
919                                      geom, 4);
920    if (ret != 4) return EINA_FALSE;
921
922    if (x) *x = geom[0];
923    if (y) *y = geom[1];
924    if (w) *w = geom[2];
925    if (h) *h = geom[3];
926
927    return EINA_TRUE;
928 }
929
930 /* for sliding window */
931 EAPI void 
932 ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
933                                        unsigned int   is_visible)
934 {
935    LOGFN(__FILE__, __LINE__, __FUNCTION__);
936    ecore_x_window_prop_card32_set(win, 
937                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
938                                   &is_visible, 1);
939 } /* ecore_x_e_illume_sliding_win_state_set */
940
941 EAPI int 
942 ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
943 {
944    unsigned int is_visible = 0;
945    
946    LOGFN(__FILE__, __LINE__, __FUNCTION__);
947    if (!ecore_x_window_prop_card32_get(win,
948                                        ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
949                                        &is_visible, 1))
950       return 0;
951
952    return is_visible;
953 }
954
955 EAPI void
956 ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
957                                           int            x,
958                                           int            y,
959                                           int            w,
960                                           int            h)
961 {
962    unsigned int geom[4];
963
964    LOGFN(__FILE__, __LINE__, __FUNCTION__);
965    geom[0] = x;
966    geom[1] = y;
967    geom[2] = w;
968    geom[3] = h;
969    ecore_x_window_prop_card32_set(win,
970                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
971                                   geom, 4);
972 } /* ecore_x_e_illume_sliding_win_geometry_set */
973
974 EAPI int 
975 ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
976                                           int           *x,
977                                           int           *y,
978                                           int           *w,
979                                           int           *h)
980 {
981    int ret = 0;
982    unsigned int geom[4];
983    
984    LOGFN(__FILE__, __LINE__, __FUNCTION__);
985    ret = 
986      ecore_x_window_prop_card32_get(win, 
987                                     ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
988                                     geom, 4);
989    if (ret != 4)
990       return 0;
991    
992    if (x)
993       *x = geom[0];
994    
995    if (y)
996       *y = geom[1];
997    
998    if (w)
999       *w = geom[2];
1000    
1001    if (h)
1002       *h = geom[3];
1003    
1004    return 1;
1005 }/* ecore_x_e_illume_sliding_win_geometry_get */
1006
1007 EAPI void
1008 ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
1009                                 Ecore_X_Sync_Counter counter)
1010 {
1011    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1012    if (counter)
1013      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1014                                  ECORE_X_ATOM_CARDINAL, &counter, 1);
1015    else
1016      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
1017 }
1018
1019 EAPI Ecore_X_Sync_Counter
1020 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
1021 {
1022    int ret = 0;
1023    Ecore_X_Sync_Counter counter = 0;
1024
1025    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1026    ret =
1027      ecore_x_window_prop_xid_get(win,
1028                                  ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
1029                                  ECORE_X_ATOM_CARDINAL,
1030                                  &counter, 1);
1031    if (ret != 1)
1032      return 0;
1033
1034    return counter;
1035 }
1036
1037 EAPI void
1038 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
1039                                    Ecore_X_Window win)
1040 {
1041    XEvent xev;
1042
1043    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1044    if (!root)
1045      root = DefaultRootWindow(_ecore_x_disp);
1046
1047    xev.xclient.type = ClientMessage;
1048    xev.xclient.display = _ecore_x_disp;
1049    xev.xclient.window = win;
1050    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1051    xev.xclient.format = 32;
1052    xev.xclient.data.l[0] = win;
1053    xev.xclient.data.l[1] = 0; // version
1054    xev.xclient.data.l[2] = 0; // later
1055    xev.xclient.data.l[3] = 0; // later
1056    xev.xclient.data.l[4] = 0; // later
1057
1058    XSendEvent(_ecore_x_disp, root, False,
1059               SubstructureRedirectMask | SubstructureNotifyMask,
1060               &xev);
1061 }
1062
1063 EAPI void
1064 ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
1065                                         Ecore_X_Window win,
1066                                         int w,
1067                                         int h)
1068 {
1069    XEvent xev;
1070
1071    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1072    if (!root)
1073      root = DefaultRootWindow(_ecore_x_disp);
1074
1075    xev.xclient.type = ClientMessage;
1076    xev.xclient.display = _ecore_x_disp;
1077    xev.xclient.window = win;
1078    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
1079    xev.xclient.format = 32;
1080    xev.xclient.data.l[0] = win;
1081    xev.xclient.data.l[1] = 1; // version
1082    xev.xclient.data.l[2] = w; // win width at draw time
1083    xev.xclient.data.l[3] = h; // win height at draw time
1084    xev.xclient.data.l[4] = 0; // later
1085
1086    XSendEvent(_ecore_x_disp, root, False,
1087               SubstructureRedirectMask | SubstructureNotifyMask,
1088               &xev);
1089 }
1090
1091 EAPI void
1092 ecore_x_e_window_profile_list_set(Ecore_X_Window  win,
1093                                   const char    **profiles,
1094                                   unsigned int    num_profiles)
1095 {
1096    Ecore_X_Atom *atoms;
1097
1098    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1099    if (!win)
1100      return;
1101
1102    if (!num_profiles)
1103      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE_LIST);
1104    else
1105      {
1106         atoms = alloca(num_profiles * sizeof(Ecore_X_Atom));
1107         ecore_x_atoms_get(profiles, num_profiles, atoms);
1108         ecore_x_window_prop_property_set(win,
1109                                          ECORE_X_ATOM_E_PROFILE_LIST,
1110                                          XA_ATOM, 32, (void *)atoms,
1111                                          num_profiles);
1112      }
1113 }
1114
1115 EAPI Eina_Bool
1116 ecore_x_e_window_profile_list_get(Ecore_X_Window   win,
1117                                   const char    ***profiles,
1118                                   int             *ret_num)
1119 {
1120    unsigned char *data;
1121    Ecore_X_Atom *atoms;
1122    int num, i;
1123
1124    if (ret_num)
1125      *ret_num = 0;
1126
1127    if (profiles)
1128      *profiles = NULL;
1129
1130    if (!win)
1131      return EINA_FALSE;
1132
1133    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1134    if (!ecore_x_window_prop_property_get(win,
1135                                          ECORE_X_ATOM_E_PROFILE_LIST,
1136                                          XA_ATOM, 32, &data, &num))
1137      return EINA_FALSE;
1138
1139    if (ret_num)
1140      *ret_num = num;
1141
1142    if (profiles)
1143      {
1144         (*profiles) = calloc(num, sizeof(char *));
1145         if (!(*profiles))
1146           {
1147              if (ret_num)
1148                *ret_num = 0;
1149
1150              if (data)
1151                free(data);
1152
1153              return EINA_FALSE;
1154           }
1155
1156         atoms = (Ecore_X_Atom *)data;
1157         for (i = 0; i < num; i++)
1158            (*profiles)[i] = ecore_x_atom_name_get(atoms[i]);
1159      }
1160
1161    if (data)
1162      XFree(data);
1163
1164    return EINA_TRUE;
1165 }
1166
1167 EAPI void
1168 ecore_x_e_window_profile_set(Ecore_X_Window win,
1169                              const char    *profile)
1170 {
1171    Ecore_X_Atom atom;
1172
1173    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1174    if (!win)
1175      return;
1176
1177    if (!profile)
1178      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_PROFILE);
1179    else
1180      {
1181         atom = ecore_x_atom_get(profile);
1182         ecore_x_window_prop_property_set(win, ECORE_X_ATOM_E_PROFILE,
1183                                          XA_ATOM, 32, (void *)&atom, 1);
1184      }
1185 }
1186
1187 EAPI char *
1188 ecore_x_e_window_profile_get(Ecore_X_Window win)
1189 {
1190    Ecore_X_Atom *atom = NULL;
1191    unsigned char *data;
1192    char *profile = NULL;
1193    int num;
1194
1195    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1196    if (!ecore_x_window_prop_property_get(win, ECORE_X_ATOM_E_PROFILE,
1197                                          XA_ATOM, 32, &data, &num))
1198      return NULL;
1199
1200    if (data)
1201      atom = (Ecore_X_Atom *)data;
1202
1203    if (atom)
1204      profile = ecore_x_atom_name_get(atom[0]);
1205
1206    return profile;
1207 }
1208
1209 EAPI void
1210 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
1211                                   Eina_Bool enabled)
1212 {
1213    Ecore_X_Window win;
1214
1215    if (!root)
1216      root = DefaultRootWindow(_ecore_x_disp);
1217
1218    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1219    if (enabled)
1220      {
1221         win = ecore_x_window_new(root, 1, 2, 3, 4);
1222         ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1223                                     ECORE_X_ATOM_WINDOW, &win, 1);
1224         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1225                                     ECORE_X_ATOM_WINDOW, &win, 1);
1226      }
1227    else
1228      {
1229         int ret;
1230
1231         ret =
1232           ecore_x_window_prop_xid_get(root,
1233                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1234                                       ECORE_X_ATOM_WINDOW,
1235                                       &win, 1);
1236         if ((ret == 1) && (win))
1237           {
1238              ecore_x_window_prop_property_del(
1239                root,
1240                ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
1241              ecore_x_window_free(win);
1242           }
1243      }
1244 }
1245
1246 EAPI Eina_Bool
1247 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
1248 {
1249    Ecore_X_Window win, win2;
1250    int ret;
1251
1252    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1253    if (!root)
1254      root = DefaultRootWindow(_ecore_x_disp);
1255
1256    ret =
1257      ecore_x_window_prop_xid_get(root,
1258                                  ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1259                                  ECORE_X_ATOM_WINDOW,
1260                                  &win, 1);
1261    if ((ret == 1) && (win))
1262      {
1263         ret =
1264           ecore_x_window_prop_xid_get(win,
1265                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
1266                                       ECORE_X_ATOM_WINDOW,
1267                                       &win2, 1);
1268         if ((ret == 1) && (win2 == win))
1269           return EINA_TRUE;
1270      }
1271
1272    return EINA_FALSE;
1273 }
1274
1275 EAPI void
1276 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
1277 {
1278    XEvent xev;
1279
1280    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1281    xev.xclient.type = ClientMessage;
1282    xev.xclient.display = _ecore_x_disp;
1283    xev.xclient.window = win;
1284    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
1285    xev.xclient.format = 32;
1286    xev.xclient.data.l[0] = win;
1287    xev.xclient.data.l[1] = 0; // later
1288    xev.xclient.data.l[2] = 0; // later
1289    xev.xclient.data.l[3] = 0; // later
1290    xev.xclient.data.l[4] = 0; // later
1291
1292    XSendEvent(_ecore_x_disp, win, False,
1293               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1294               &xev);
1295 }
1296
1297 EAPI void
1298 ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
1299 {
1300    XEvent xev;
1301
1302    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1303    xev.xclient.type = ClientMessage;
1304    xev.xclient.display = _ecore_x_disp;
1305    xev.xclient.window = win;
1306    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
1307    xev.xclient.format = 32;
1308    xev.xclient.data.l[0] = win;
1309    xev.xclient.data.l[1] = 0; // later
1310    xev.xclient.data.l[2] = 0; // later
1311    xev.xclient.data.l[3] = 0; // later
1312    xev.xclient.data.l[4] = 0; // later
1313
1314    XSendEvent(_ecore_x_disp, win, False,
1315               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1316               &xev);
1317 }
1318
1319 EAPI void
1320 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
1321 {
1322    XEvent xev;
1323
1324    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1325    xev.xclient.type = ClientMessage;
1326    xev.xclient.display = _ecore_x_disp;
1327    xev.xclient.window = win;
1328    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
1329    xev.xclient.format = 32;
1330    xev.xclient.data.l[0] = win;
1331    xev.xclient.data.l[1] = 0; // later
1332    xev.xclient.data.l[2] = 0; // later
1333    xev.xclient.data.l[3] = 0; // later
1334    xev.xclient.data.l[4] = 0; // later
1335
1336    XSendEvent(_ecore_x_disp, win, False,
1337               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1338               &xev);
1339 }
1340
1341 EAPI void
1342 ecore_x_e_comp_flush_send(Ecore_X_Window win)
1343 {
1344    XEvent xev;
1345
1346    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1347    xev.xclient.type = ClientMessage;
1348    xev.xclient.display = _ecore_x_disp;
1349    xev.xclient.window = win;
1350    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
1351    xev.xclient.format = 32;
1352    xev.xclient.data.l[0] = win;
1353    xev.xclient.data.l[1] = 0; // later
1354    xev.xclient.data.l[2] = 0; // later
1355    xev.xclient.data.l[3] = 0; // later
1356    xev.xclient.data.l[4] = 0; // later
1357
1358    XSendEvent(_ecore_x_disp, win, False,
1359               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1360               &xev);
1361 }
1362
1363 EAPI void
1364 ecore_x_e_comp_dump_send(Ecore_X_Window win)
1365 {
1366    XEvent xev;
1367
1368    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1369    xev.xclient.type = ClientMessage;
1370    xev.xclient.display = _ecore_x_disp;
1371    xev.xclient.window = win;
1372    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1373    xev.xclient.format = 32;
1374    xev.xclient.data.l[0] = win;
1375    xev.xclient.data.l[1] = 0; // later
1376    xev.xclient.data.l[2] = 0; // later
1377    xev.xclient.data.l[3] = 0; // later
1378    xev.xclient.data.l[4] = 0; // later
1379
1380    XSendEvent(_ecore_x_disp, win, False,
1381               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1382               &xev);
1383 }
1384
1385 EAPI void
1386 ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
1387                           Ecore_X_Pixmap pixmap)
1388 {
1389    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1390    if (pixmap)
1391      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
1392                                  ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1393    else
1394      ecore_x_window_prop_property_del(win, pixmap);
1395 }
1396
1397 EAPI Ecore_X_Pixmap
1398 ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1399 {
1400    int ret = 0;
1401    Ecore_X_Pixmap pixmap = 0;
1402
1403    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1404    ret =
1405      ecore_x_window_prop_xid_get(win,
1406                                  ECORE_X_ATOM_E_COMP_PIXMAP,
1407                                  ECORE_X_ATOM_PIXMAP,
1408                                  &pixmap, 1);
1409    if (ret != 1)
1410      return 0;
1411
1412    return pixmap;
1413 }
1414
1415 static Ecore_X_Atom
1416 _ecore_x_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1417 {
1418    switch (state)
1419      {
1420       case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1421         return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1422
1423       case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1424         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1425
1426       default:
1427         break;
1428      }
1429    return 0;
1430 }
1431
1432 static Ecore_X_Illume_Indicator_State
1433 _ecore_x_e_indicator_state_get(Ecore_X_Atom atom)
1434 {
1435    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1436      return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1437
1438    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1439      return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1440
1441    return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1442 }
1443
1444 EAPI void
1445 ecore_x_e_illume_indicator_state_set(Ecore_X_Window win,
1446                                      Ecore_X_Illume_Indicator_State state)
1447 {
1448    Ecore_X_Atom atom = 0;
1449
1450    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1451    atom = _ecore_x_e_indicator_atom_get(state);
1452    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1453                                 &atom, 1);
1454 }
1455
1456 EAPI Ecore_X_Illume_Indicator_State
1457 ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1458 {
1459    Ecore_X_Atom atom;
1460
1461    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1462    if (!ecore_x_window_prop_atom_get(win,
1463                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1464                                      &atom, 1))
1465      return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1466
1467    return _ecore_x_e_indicator_state_get(atom);
1468 }
1469
1470 EAPI void
1471 ecore_x_e_illume_indicator_state_send(Ecore_X_Window win,
1472                                       Ecore_X_Illume_Indicator_State state)
1473 {
1474    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1475    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1476                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1477                                  _ecore_x_e_indicator_atom_get(state),
1478                                  0, 0, 0, 0);
1479 }
1480
1481 static Ecore_X_Atom
1482 _ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1483 {
1484    switch (mode)
1485      {
1486       case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1487         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1488
1489       case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1490         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1491
1492       case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1493         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1494
1495       default:
1496         break;
1497      }
1498    return 0;
1499 }
1500
1501 static Ecore_X_Illume_Indicator_Opacity_Mode
1502 _ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1503 {
1504    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1505      return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1506
1507    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1508      return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1509
1510    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1511      return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1512
1513    return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1514 }
1515
1516 EAPI void
1517 ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1518                                      Ecore_X_Illume_Indicator_Opacity_Mode mode)
1519 {
1520    Ecore_X_Atom atom = 0;
1521
1522    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1523    atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1524    ecore_x_window_prop_atom_set(win,
1525                                 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1526                                 &atom, 1);
1527 }
1528
1529 EAPI Ecore_X_Illume_Indicator_Opacity_Mode
1530 ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1531 {
1532    Ecore_X_Atom atom;
1533
1534    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1535    if (!ecore_x_window_prop_atom_get(win,
1536                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1537                                      &atom, 1))
1538      return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1539
1540    return _ecore_x_e_indicator_opacity_get(atom);
1541 }
1542
1543 EAPI void
1544 ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1545                                       Ecore_X_Illume_Indicator_Opacity_Mode mode)
1546 {
1547    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1548    ecore_x_client_message32_send(win,
1549                                  ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1550                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1551                                  _ecore_x_e_indicator_opacity_atom_get(mode),
1552                                  0, 0, 0, 0);
1553 }
1554
1555 static Ecore_X_Atom
1556 _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
1557 {
1558    switch (state)
1559      {
1560       case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
1561         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
1562
1563       case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
1564         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
1565
1566       default:
1567         break;
1568      }
1569    return 0;
1570 }
1571
1572 static Ecore_X_Illume_Window_State
1573 _ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
1574 {
1575    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
1576      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1577
1578    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
1579      return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
1580
1581    return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1582 }
1583
1584 EAPI void
1585 ecore_x_e_illume_window_state_set(Ecore_X_Window win,
1586                                   Ecore_X_Illume_Window_State state)
1587 {
1588    Ecore_X_Atom atom = 0;
1589
1590    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1591    atom = _ecore_x_e_illume_window_state_atom_get(state);
1592    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
1593                                 &atom, 1);
1594 }
1595
1596 EAPI Ecore_X_Illume_Window_State
1597 ecore_x_e_illume_window_state_get(Ecore_X_Window win)
1598 {
1599    Ecore_X_Atom atom;
1600
1601    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1602    if (!ecore_x_window_prop_atom_get(win,
1603                                      ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
1604                                      &atom, 1))
1605      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1606
1607    return _ecore_x_e_illume_window_state_get(atom);
1608 }
1609