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