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