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