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