Tizen 2.1 base
[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                                          ECORE_X_ATOM_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                                          ECORE_X_ATOM_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                                          ECORE_X_ATOM_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                                          ECORE_X_ATOM_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_access_action_up_send(Ecore_X_Window win)
1106 {
1107    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1108
1109    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
1110                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1111                                  win,
1112                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_UP,
1113                                  0, 0, 0);
1114 }
1115
1116 EAPI void
1117 ecore_x_e_illume_access_action_down_send(Ecore_X_Window win)
1118 {
1119    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1120
1121    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_ACCESS_CONTROL,
1122                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1123                                  win,
1124                                  ECORE_X_ATOM_E_ILLUME_ACCESS_ACTION_DOWN,
1125                                  0, 0, 0);
1126 }
1127
1128 EAPI void
1129 ecore_x_e_illume_drag_set(Ecore_X_Window win,
1130                           unsigned int   drag)
1131 {
1132    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1133
1134    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
1135 }
1136
1137 EAPI void
1138 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win,
1139                                  unsigned int   is_locked)
1140 {
1141    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1142
1143    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
1144                                   &is_locked, 1);
1145 }
1146
1147 EAPI Eina_Bool
1148 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
1149 {
1150    unsigned int val = 0;
1151
1152    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1153
1154    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
1155                                        &val, 1))
1156      return EINA_FALSE;
1157
1158    return val ? EINA_TRUE : EINA_FALSE;
1159 }
1160
1161 EAPI Eina_Bool
1162 ecore_x_e_illume_drag_get(Ecore_X_Window win)
1163 {
1164    unsigned int val = 0;
1165
1166    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1167
1168    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG, &val, 1))
1169      return EINA_FALSE;
1170
1171    return val ? EINA_TRUE : EINA_FALSE;
1172 }
1173
1174 EAPI void
1175 ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
1176 {
1177    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1178    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
1179                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1180                                  1, 0, 0, 0, 0);
1181 }
1182
1183 EAPI void
1184 ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
1185 {
1186    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1187    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
1188                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1189                                  1, 0, 0, 0, 0);
1190 }
1191
1192 EAPI void
1193 ecore_x_e_illume_zone_set(Ecore_X_Window win,
1194                           Ecore_X_Window zone)
1195 {
1196    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1197
1198    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE, &zone, 1);
1199 }
1200
1201 EAPI Ecore_X_Window
1202 ecore_x_e_illume_zone_get(Ecore_X_Window win)
1203 {
1204    Ecore_X_Window zone;
1205
1206    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1207
1208    if (!ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
1209                                        &zone, 1))
1210      return 0;
1211
1212    return zone;
1213 }
1214
1215 EAPI void
1216 ecore_x_e_illume_zone_list_set(Ecore_X_Window  win,
1217                                Ecore_X_Window *zones,
1218                                unsigned int    num)
1219 {
1220    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1221
1222    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
1223                                   zones, num);
1224 }
1225
1226 /* local functions */
1227 static Ecore_X_Atom
1228 _ecore_xcb_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
1229 {
1230    switch (state)
1231      {
1232       case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
1233         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
1234
1235       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
1236         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
1237
1238       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
1239         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
1240
1241       case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
1242         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
1243
1244       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
1245         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
1246
1247       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
1248         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
1249
1250       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
1251         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
1252
1253       case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
1254         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
1255
1256       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
1257         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
1258
1259       case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
1260         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
1261
1262       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
1263         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
1264
1265       case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
1266         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
1267
1268       case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
1269         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
1270
1271       case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
1272         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
1273
1274       case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
1275         return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
1276
1277       default:
1278         break;
1279      }
1280    return 0;
1281 }
1282
1283 static Ecore_X_Virtual_Keyboard_State
1284 _ecore_xcb_e_vkbd_state_get(Ecore_X_Atom atom)
1285 {
1286    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
1287      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
1288    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
1289      return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
1290    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
1291      return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
1292    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
1293      return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
1294    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
1295      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
1296    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
1297      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
1298    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
1299      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
1300    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
1301      return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
1302    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
1303      return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
1304    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
1305      return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
1306    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
1307      return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
1308    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
1309      return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
1310    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
1311      return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
1312    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
1313      return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
1314    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
1315      return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
1316
1317    return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
1318 }
1319
1320 static Ecore_X_Atom
1321 _ecore_xcb_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
1322 {
1323    switch (state)
1324      {
1325       case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
1326         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
1327
1328       case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
1329         return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
1330
1331       default:
1332         break;
1333      }
1334    return 0;
1335 }
1336
1337 static Ecore_X_Illume_Quickpanel_State
1338 _ecore_xcb_e_quickpanel_state_get(Ecore_X_Atom atom)
1339 {
1340    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
1341      return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
1342    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
1343      return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
1344
1345    return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
1346 }
1347
1348 static Ecore_X_Atom
1349 _ecore_xcb_e_illume_atom_get(Ecore_X_Illume_Mode mode)
1350 {
1351    switch (mode)
1352      {
1353       case ECORE_X_ILLUME_MODE_SINGLE:
1354         return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
1355
1356       case ECORE_X_ILLUME_MODE_DUAL_TOP:
1357         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
1358
1359       case ECORE_X_ILLUME_MODE_DUAL_LEFT:
1360         return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
1361
1362       default:
1363         break;
1364      }
1365    return ECORE_X_ILLUME_MODE_UNKNOWN;
1366 }
1367
1368 static Ecore_X_Illume_Mode
1369 _ecore_xcb_e_illume_mode_get(Ecore_X_Atom atom)
1370 {
1371    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
1372      return ECORE_X_ILLUME_MODE_SINGLE;
1373    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
1374      return ECORE_X_ILLUME_MODE_DUAL_TOP;
1375    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
1376      return ECORE_X_ILLUME_MODE_DUAL_LEFT;
1377
1378    return ECORE_X_ILLUME_MODE_UNKNOWN;
1379 }
1380
1381 static Ecore_X_Atom
1382 _ecore_xcb_e_indicator_atom_get(Ecore_X_Illume_Indicator_State state)
1383 {
1384    switch (state)
1385      {
1386       case ECORE_X_ILLUME_INDICATOR_STATE_ON:
1387         return ECORE_X_ATOM_E_ILLUME_INDICATOR_ON;
1388
1389       case ECORE_X_ILLUME_INDICATOR_STATE_OFF:
1390         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF;
1391
1392       default:
1393         break;
1394      }
1395    return 0;
1396 }
1397
1398 static Ecore_X_Illume_Indicator_State
1399 _ecore_xcb_e_indicator_state_get(Ecore_X_Atom atom)
1400 {
1401    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_ON)
1402      return ECORE_X_ILLUME_INDICATOR_STATE_ON;
1403    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OFF)
1404      return ECORE_X_ILLUME_INDICATOR_STATE_OFF;
1405
1406    return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1407 }
1408
1409 EAPI void
1410 ecore_x_e_illume_indicator_state_set(Ecore_X_Window                 win,
1411                                      Ecore_X_Illume_Indicator_State state)
1412 {
1413    Ecore_X_Atom atom = 0;
1414
1415    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1416
1417    atom = _ecore_xcb_e_indicator_atom_get(state);
1418    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1419                                 &atom, 1);
1420 }
1421
1422 EAPI Ecore_X_Illume_Indicator_State
1423 ecore_x_e_illume_indicator_state_get(Ecore_X_Window win)
1424 {
1425    Ecore_X_Atom atom = 0;
1426
1427    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1428
1429    if (!ecore_x_window_prop_atom_get(win,
1430                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1431                                      &atom, 1))
1432      return ECORE_X_ILLUME_INDICATOR_STATE_UNKNOWN;
1433
1434    return _ecore_xcb_e_indicator_state_get(atom);
1435 }
1436
1437 EAPI void
1438 ecore_x_e_illume_indicator_state_send(Ecore_X_Window                 win,
1439                                       Ecore_X_Illume_Indicator_State state)
1440 {
1441    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1442    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_STATE,
1443                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1444                                  _ecore_xcb_e_indicator_atom_get(state),
1445                                  0, 0, 0, 0);
1446 }
1447
1448 static Ecore_X_Atom
1449 _ecore_x_e_indicator_opacity_atom_get(Ecore_X_Illume_Indicator_Opacity_Mode mode)
1450 {
1451    switch (mode)
1452      {
1453       case ECORE_X_ILLUME_INDICATOR_OPAQUE:
1454         return ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE;
1455
1456       case ECORE_X_ILLUME_INDICATOR_TRANSLUCENT:
1457         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT;
1458
1459       case ECORE_X_ILLUME_INDICATOR_TRANSPARENT:
1460         return ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT;
1461
1462       default:
1463         break;
1464      }
1465    return 0;
1466 }
1467
1468 static Ecore_X_Illume_Indicator_Opacity_Mode
1469 _ecore_x_e_indicator_opacity_get(Ecore_X_Atom atom)
1470 {
1471    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_OPAQUE)
1472      return ECORE_X_ILLUME_INDICATOR_OPAQUE;
1473
1474    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSLUCENT)
1475      return ECORE_X_ILLUME_INDICATOR_TRANSLUCENT;
1476
1477    if (atom == ECORE_X_ATOM_E_ILLUME_INDICATOR_TRANSPARENT)
1478      return ECORE_X_ILLUME_INDICATOR_TRANSPARENT;
1479
1480    return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1481 }
1482
1483 EAPI void
1484 ecore_x_e_illume_indicator_opacity_set(Ecore_X_Window win,
1485                                      Ecore_X_Illume_Indicator_Opacity_Mode mode)
1486 {
1487    Ecore_X_Atom atom = 0;
1488
1489    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1490    atom = _ecore_x_e_indicator_opacity_atom_get(mode);
1491    ecore_x_window_prop_atom_set(win,
1492                                 ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1493                                 &atom, 1);
1494 }
1495
1496 EAPI Ecore_X_Illume_Indicator_Opacity_Mode
1497 ecore_x_e_illume_indicator_opacity_get(Ecore_X_Window win)
1498 {
1499    Ecore_X_Atom atom;
1500
1501    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1502    if (!ecore_x_window_prop_atom_get(win,
1503                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1504                                      &atom, 1))
1505      return ECORE_X_ILLUME_INDICATOR_OPACITY_UNKNOWN;
1506
1507    return _ecore_x_e_indicator_opacity_get(atom);
1508 }
1509
1510 EAPI void
1511 ecore_x_e_illume_indicator_opacity_send(Ecore_X_Window win,
1512                                       Ecore_X_Illume_Indicator_Opacity_Mode mode)
1513 {
1514    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1515    ecore_x_client_message32_send(win,
1516                                  ECORE_X_ATOM_E_ILLUME_INDICATOR_OPACITY_MODE,
1517                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
1518                                  _ecore_x_e_indicator_opacity_atom_get(mode),
1519                                  0, 0, 0, 0);
1520 }
1521
1522 static Ecore_X_Atom
1523 _ecore_x_e_illume_window_state_atom_get(Ecore_X_Illume_Window_State state)
1524 {
1525    switch (state)
1526      {
1527       case ECORE_X_ILLUME_WINDOW_STATE_NORMAL:
1528         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL;
1529
1530       case ECORE_X_ILLUME_WINDOW_STATE_FLOATING:
1531         return ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING;
1532
1533       default:
1534         break;
1535      }
1536    return 0;
1537 }
1538
1539 static Ecore_X_Illume_Window_State
1540 _ecore_x_e_illume_window_state_get(Ecore_X_Atom atom)
1541 {
1542    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_NORMAL)
1543      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1544
1545    if (atom == ECORE_X_ATOM_E_ILLUME_WINDOW_STATE_FLOATING)
1546      return ECORE_X_ILLUME_WINDOW_STATE_FLOATING;
1547
1548    return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1549 }
1550
1551 EAPI void
1552 ecore_x_e_illume_window_state_set(Ecore_X_Window win,
1553                                   Ecore_X_Illume_Window_State state)
1554 {
1555    Ecore_X_Atom atom = 0;
1556
1557    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1558    atom = _ecore_x_e_illume_window_state_atom_get(state);
1559    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
1560                                 &atom, 1);
1561 }
1562
1563 EAPI Ecore_X_Illume_Window_State
1564 ecore_x_e_illume_window_state_get(Ecore_X_Window win)
1565 {
1566    Ecore_X_Atom atom;
1567
1568    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1569    if (!ecore_x_window_prop_atom_get(win,
1570                                      ECORE_X_ATOM_E_ILLUME_WINDOW_STATE,
1571                                      &atom, 1))
1572      return ECORE_X_ILLUME_WINDOW_STATE_NORMAL;
1573
1574    return _ecore_x_e_illume_window_state_get(atom);
1575 }
1576