[ecore] merged svn latest code (svn54830)
[profile/ivi/ecore.git] / src / lib / ecore_x / xlib / 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 #include "Ecore.h"
10 #include "ecore_x_private.h"
11 #include "Ecore_X.h"
12 #include "Ecore_X_Atoms.h"
13
14 EAPI void
15 ecore_x_e_init(void)
16 {
17 } /* ecore_x_e_init */
18
19 EAPI void
20 ecore_x_e_frame_size_set(Ecore_X_Window win, int fl, int fr, int ft, int fb)
21 {
22    unsigned int frames[4];
23
24    LOGFN(__FILE__, __LINE__, __FUNCTION__);
25    frames[0] = fl;
26    frames[1] = fr;
27    frames[2] = ft;
28    frames[3] = fb;
29    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_FRAME_SIZE, frames, 4);
30 } /* ecore_x_e_frame_size_set */
31
32 EAPI void
33 ecore_x_e_virtual_keyboard_set(Ecore_X_Window win, unsigned int is_keyboard)
34 {
35    LOGFN(__FILE__, __LINE__, __FUNCTION__);
36    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
37                                   &is_keyboard, 1);
38 } /* ecore_x_e_virtual_keyboard_set */
39
40 EAPI Eina_Bool
41 ecore_x_e_virtual_keyboard_get(Ecore_X_Window win)
42 {
43    unsigned int val;
44
45    LOGFN(__FILE__, __LINE__, __FUNCTION__);
46    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD,
47                                        &val, 1))
48       return EINA_FALSE;
49
50    return val ? EINA_TRUE : EINA_FALSE;
51 } /* ecore_x_e_virtual_keyboard_get */
52
53 static Ecore_X_Virtual_Keyboard_State
54 _ecore_x_e_vkbd_state_get(Ecore_X_Atom atom)
55 {
56    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON)
57       return ECORE_X_VIRTUAL_KEYBOARD_STATE_ON;
58
59    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF)
60       return ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF;
61
62    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA)
63       return ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA;
64
65    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC)
66       return ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC;
67
68    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN)
69       return ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN;
70
71    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER)
72       return ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER;
73
74    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX)
75       return ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX;
76
77    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL)
78       return ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL;
79
80    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD)
81       return ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD;
82
83    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP)
84       return ECORE_X_VIRTUAL_KEYBOARD_STATE_IP;
85
86    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST)
87       return ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST;
88
89    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE)
90       return ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE;
91
92    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL)
93       return ECORE_X_VIRTUAL_KEYBOARD_STATE_URL;
94
95    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD)
96       return ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD;
97
98    if (atom == ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME)
99       return ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME;
100
101    return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
102 } /* _ecore_x_e_vkbd_state_get */
103
104 static Ecore_X_Atom
105 _ecore_x_e_vkbd_atom_get(Ecore_X_Virtual_Keyboard_State state)
106 {
107    switch (state)
108      {
109       case ECORE_X_VIRTUAL_KEYBOARD_STATE_OFF:
110          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_OFF;
111
112       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ON:
113          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ON;
114
115       case ECORE_X_VIRTUAL_KEYBOARD_STATE_ALPHA:
116          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_ALPHA;
117
118       case ECORE_X_VIRTUAL_KEYBOARD_STATE_NUMERIC:
119          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_NUMERIC;
120
121       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PIN:
122          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PIN;
123
124       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PHONE_NUMBER:
125          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PHONE_NUMBER;
126
127       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HEX:
128          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HEX;
129
130       case ECORE_X_VIRTUAL_KEYBOARD_STATE_TERMINAL:
131          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_TERMINAL;
132
133       case ECORE_X_VIRTUAL_KEYBOARD_STATE_PASSWORD:
134          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_PASSWORD;
135
136       case ECORE_X_VIRTUAL_KEYBOARD_STATE_IP:
137          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_IP;
138
139       case ECORE_X_VIRTUAL_KEYBOARD_STATE_HOST:
140          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_HOST;
141
142       case ECORE_X_VIRTUAL_KEYBOARD_STATE_FILE:
143          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_FILE;
144
145       case ECORE_X_VIRTUAL_KEYBOARD_STATE_URL:
146          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_URL;
147
148       case ECORE_X_VIRTUAL_KEYBOARD_STATE_KEYPAD:
149          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_KEYPAD;
150
151       case ECORE_X_VIRTUAL_KEYBOARD_STATE_J2ME:
152          return ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_J2ME;
153
154       default: return 0;
155      } /* switch */
156    return 0;
157 } /* _ecore_x_e_vkbd_atom_get */
158
159 EAPI void
160 ecore_x_e_virtual_keyboard_state_set(Ecore_X_Window                 win,
161                                      Ecore_X_Virtual_Keyboard_State state)
162 {
163    Ecore_X_Atom atom = 0;
164
165    LOGFN(__FILE__, __LINE__, __FUNCTION__);
166    atom = _ecore_x_e_vkbd_atom_get(state);
167    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
168                                 &atom, 1);
169 } /* ecore_x_e_virtual_keyboard_state_set */
170
171 EAPI Ecore_X_Virtual_Keyboard_State
172 ecore_x_e_virtual_keyboard_state_get(Ecore_X_Window win)
173 {
174    Ecore_X_Atom atom;
175
176    LOGFN(__FILE__, __LINE__, __FUNCTION__);
177    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
178                                      &atom, 1))
179       return ECORE_X_VIRTUAL_KEYBOARD_STATE_UNKNOWN;
180
181    return _ecore_x_e_vkbd_state_get(atom);
182 } /* ecore_x_e_virtual_keyboard_state_get */
183
184 EAPI void
185 ecore_x_e_virtual_keyboard_state_send(Ecore_X_Window                 win,
186                                       Ecore_X_Virtual_Keyboard_State state)
187 {
188    LOGFN(__FILE__, __LINE__, __FUNCTION__);
189    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_VIRTUAL_KEYBOARD_STATE,
190                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
191                                  _ecore_x_e_vkbd_atom_get(state),
192                                  0, 0, 0, 0);
193 } /* ecore_x_e_virtual_keyboard_state_send */
194
195 static Ecore_X_Atom
196 _ecore_x_e_illume_atom_get(Ecore_X_Illume_Mode mode)
197 {
198    switch (mode)
199      {
200       case ECORE_X_ILLUME_MODE_SINGLE:
201          return ECORE_X_ATOM_E_ILLUME_MODE_SINGLE;
202
203       case ECORE_X_ILLUME_MODE_DUAL_TOP:
204          return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP;
205
206       case ECORE_X_ILLUME_MODE_DUAL_LEFT:
207          return ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT;
208
209       default:
210          return ECORE_X_ILLUME_MODE_UNKNOWN;
211      } /* switch */
212    return ECORE_X_ILLUME_MODE_UNKNOWN;
213 } /* _ecore_x_e_illume_atom_get */
214
215 static Ecore_X_Illume_Mode
216 _ecore_x_e_illume_mode_get(Ecore_X_Atom atom)
217 {
218    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_SINGLE)
219       return ECORE_X_ILLUME_MODE_SINGLE;
220
221    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_TOP)
222       return ECORE_X_ILLUME_MODE_DUAL_TOP;
223
224    if (atom == ECORE_X_ATOM_E_ILLUME_MODE_DUAL_LEFT)
225       return ECORE_X_ILLUME_MODE_DUAL_LEFT;
226
227    return ECORE_X_ILLUME_MODE_UNKNOWN;
228 } /* _ecore_x_e_illume_mode_get */
229
230 EAPI void
231 ecore_x_e_illume_zone_set(Ecore_X_Window win, Ecore_X_Window zone)
232 {
233    LOGFN(__FILE__, __LINE__, __FUNCTION__);
234    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE,
235                                   &zone, 1);
236 } /* ecore_x_e_illume_zone_set */
237
238 EAPI Ecore_X_Window
239 ecore_x_e_illume_zone_get(Ecore_X_Window win)
240 {
241    Ecore_X_Window zone;
242
243    LOGFN(__FILE__, __LINE__, __FUNCTION__);
244    if (!ecore_x_window_prop_window_get(win, ECORE_X_ATOM_E_ILLUME_ZONE,
245                                        &zone, 1))
246       return 0;
247
248    return zone;
249 } /* ecore_x_e_illume_zone_get */
250
251 EAPI void
252 ecore_x_e_illume_zone_list_set(Ecore_X_Window  win,
253                                Ecore_X_Window *zones,
254                                unsigned int    n_zones)
255 {
256    LOGFN(__FILE__, __LINE__, __FUNCTION__);
257    ecore_x_window_prop_window_set(win, ECORE_X_ATOM_E_ILLUME_ZONE_LIST,
258                                   zones, n_zones);
259 } /* ecore_x_e_illume_zone_list_set */
260
261 EAPI void
262 ecore_x_e_illume_conformant_set(Ecore_X_Window win, unsigned int is_conformant)
263 {
264    LOGFN(__FILE__, __LINE__, __FUNCTION__);
265    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
266                                   &is_conformant, 1);
267 } /* ecore_x_e_illume_conformant_set */
268
269 EAPI Eina_Bool
270 ecore_x_e_illume_conformant_get(Ecore_X_Window win)
271 {
272    unsigned int val = 0;
273
274    LOGFN(__FILE__, __LINE__, __FUNCTION__);
275    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_CONFORMANT,
276                                        &val, 1))
277       return EINA_FALSE;
278
279    return val ? EINA_TRUE : EINA_FALSE;
280 } /* ecore_x_e_illume_conformant_get */
281
282 EAPI void
283 ecore_x_e_illume_mode_set(Ecore_X_Window win, Ecore_X_Illume_Mode mode)
284 {
285    Ecore_X_Atom atom = 0;
286
287    LOGFN(__FILE__, __LINE__, __FUNCTION__);
288    atom = _ecore_x_e_illume_atom_get(mode);
289    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_MODE,
290                                 &atom, 1);
291 } /* ecore_x_e_illume_mode_set */
292
293 EAPI Ecore_X_Illume_Mode
294 ecore_x_e_illume_mode_get(Ecore_X_Window win)
295 {
296    Ecore_X_Atom atom = 0;
297
298    LOGFN(__FILE__, __LINE__, __FUNCTION__);
299    if (!ecore_x_window_prop_atom_get(win, ECORE_X_ATOM_E_ILLUME_MODE, &atom, 1))
300       return ECORE_X_ILLUME_MODE_UNKNOWN;
301
302    return _ecore_x_e_illume_mode_get(atom);
303 } /* ecore_x_e_illume_mode_get */
304
305 EAPI void
306 ecore_x_e_illume_mode_send(Ecore_X_Window win, Ecore_X_Illume_Mode mode)
307 {
308    LOGFN(__FILE__, __LINE__, __FUNCTION__);
309    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_MODE,
310                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
311                                  _ecore_x_e_illume_atom_get(mode),
312                                  0, 0, 0, 0);
313 } /* ecore_x_e_illume_mode_send */
314
315 EAPI void
316 ecore_x_e_illume_focus_back_send(Ecore_X_Window win)
317 {
318    LOGFN(__FILE__, __LINE__, __FUNCTION__);
319    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_BACK,
320                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
321                                  1, 0, 0, 0, 0);
322 } /* ecore_x_e_illume_focus_back_send */
323
324 EAPI void
325 ecore_x_e_illume_focus_forward_send(Ecore_X_Window win)
326 {
327    LOGFN(__FILE__, __LINE__, __FUNCTION__);
328    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_FORWARD,
329                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
330                                  1, 0, 0, 0, 0);
331 } /* ecore_x_e_illume_focus_forward_send */
332
333 EAPI void
334 ecore_x_e_illume_focus_home_send(Ecore_X_Window win)
335 {
336    LOGFN(__FILE__, __LINE__, __FUNCTION__);
337    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_FOCUS_HOME,
338                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
339                                  1, 0, 0, 0, 0);
340 } /* ecore_x_e_illume_focus_home_send */
341
342 EAPI void
343 ecore_x_e_illume_close_send(Ecore_X_Window win)
344 {
345    LOGFN(__FILE__, __LINE__, __FUNCTION__);
346    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_CLOSE,
347                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
348                                  1, 0, 0, 0, 0);
349 } /* ecore_x_e_illume_close_send */
350
351 EAPI void
352 ecore_x_e_illume_home_new_send(Ecore_X_Window win)
353 {
354    LOGFN(__FILE__, __LINE__, __FUNCTION__);
355    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_NEW,
356                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
357                                  1, 0, 0, 0, 0);
358 } /* ecore_x_e_illume_home_new_send */
359
360 EAPI void
361 ecore_x_e_illume_home_del_send(Ecore_X_Window win)
362 {
363    LOGFN(__FILE__, __LINE__, __FUNCTION__);
364    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_HOME_DEL,
365                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
366                                  1, 0, 0, 0, 0);
367 } /* ecore_x_e_illume_home_del_send */
368
369 EAPI void
370 ecore_x_e_illume_drag_set(Ecore_X_Window win, unsigned int drag)
371 {
372    LOGFN(__FILE__, __LINE__, __FUNCTION__);
373    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG, &drag, 1);
374 } /* ecore_x_e_illume_drag_set */
375
376 EAPI Eina_Bool
377 ecore_x_e_illume_drag_get(Ecore_X_Window win)
378 {
379    unsigned int val = 0;
380
381    LOGFN(__FILE__, __LINE__, __FUNCTION__);
382    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG, &val, 1))
383       return EINA_FALSE;
384
385    return val ? EINA_TRUE : EINA_FALSE;
386 } /* ecore_x_e_illume_drag_get */
387
388 EAPI void
389 ecore_x_e_illume_drag_locked_set(Ecore_X_Window win, unsigned int is_locked)
390 {
391    LOGFN(__FILE__, __LINE__, __FUNCTION__);
392    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
393                                   &is_locked, 1);
394 } /* ecore_x_e_illume_drag_locked_set */
395
396 EAPI Eina_Bool
397 ecore_x_e_illume_drag_locked_get(Ecore_X_Window win)
398 {
399    unsigned int val = 0;
400
401    LOGFN(__FILE__, __LINE__, __FUNCTION__);
402    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_DRAG_LOCKED,
403                                        &val, 1))
404       return EINA_FALSE;
405
406    return val ? EINA_TRUE : EINA_FALSE;
407 } /* ecore_x_e_illume_drag_locked_get */
408
409 EAPI void
410 ecore_x_e_illume_drag_start_send(Ecore_X_Window win)
411 {
412    LOGFN(__FILE__, __LINE__, __FUNCTION__);
413    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_START,
414                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
415                                  1, 0, 0, 0, 0);
416 } /* ecore_x_e_illume_drag_start_send */
417
418 EAPI void
419 ecore_x_e_illume_drag_end_send(Ecore_X_Window win)
420 {
421    LOGFN(__FILE__, __LINE__, __FUNCTION__);
422    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_DRAG_END,
423                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
424                                  1, 0, 0, 0, 0);
425 } /* ecore_x_e_illume_drag_end_send */
426
427 EAPI void
428 ecore_x_e_illume_indicator_geometry_set(Ecore_X_Window win,
429                                         int            x,
430                                         int            y,
431                                         int            w,
432                                         int            h)
433 {
434    unsigned int geom[4];
435
436    LOGFN(__FILE__, __LINE__, __FUNCTION__);
437    geom[0] = x;
438    geom[1] = y;
439    geom[2] = w;
440    geom[3] = h;
441    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
442                                   geom, 4);
443 } /* ecore_x_e_illume_indicator_geometry_set */
444
445 EAPI Eina_Bool
446 ecore_x_e_illume_indicator_geometry_get(Ecore_X_Window win,
447                                         int           *x,
448                                         int           *y,
449                                         int           *w,
450                                         int           *h)
451 {
452    int ret = 0;
453    unsigned int geom[4];
454
455    LOGFN(__FILE__, __LINE__, __FUNCTION__);
456    ret =
457       ecore_x_window_prop_card32_get(win,
458                                      ECORE_X_ATOM_E_ILLUME_INDICATOR_GEOMETRY,
459                                      geom, 4);
460    if (ret != 4)
461       return EINA_FALSE;
462
463    if (x)
464       *x = geom[0];
465
466    if (y)
467       *y = geom[1];
468
469    if (w)
470       *w = geom[2];
471
472    if (h)
473       *h = geom[3];
474
475    return EINA_TRUE;
476 } /* ecore_x_e_illume_indicator_geometry_get */
477
478 EAPI void
479 ecore_x_e_illume_softkey_geometry_set(Ecore_X_Window win,
480                                       int            x,
481                                       int            y,
482                                       int            w,
483                                       int            h)
484 {
485    unsigned int geom[4];
486
487    LOGFN(__FILE__, __LINE__, __FUNCTION__);
488    geom[0] = x;
489    geom[1] = y;
490    geom[2] = w;
491    geom[3] = h;
492    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
493                                   geom, 4);
494 } /* ecore_x_e_illume_softkey_geometry_set */
495
496 EAPI Eina_Bool
497 ecore_x_e_illume_softkey_geometry_get(Ecore_X_Window win,
498                                       int           *x,
499                                       int           *y,
500                                       int           *w,
501                                       int           *h)
502 {
503    int ret = 0;
504    unsigned int geom[4];
505
506    LOGFN(__FILE__, __LINE__, __FUNCTION__);
507    ret =
508       ecore_x_window_prop_card32_get(win,
509                                      ECORE_X_ATOM_E_ILLUME_SOFTKEY_GEOMETRY,
510                                      geom, 4);
511    if (ret != 4)
512       return EINA_FALSE;
513
514    if (x)
515       *x = geom[0];
516
517    if (y)
518       *y = geom[1];
519
520    if (w)
521       *w = geom[2];
522
523    if (h)
524       *h = geom[3];
525
526    return EINA_TRUE;
527 } /* ecore_x_e_illume_softkey_geometry_get */
528
529 EAPI void
530 ecore_x_e_illume_keyboard_geometry_set(Ecore_X_Window win,
531                                        int            x,
532                                        int            y,
533                                        int            w,
534                                        int            h)
535 {
536    unsigned int geom[4];
537
538    LOGFN(__FILE__, __LINE__, __FUNCTION__);
539    geom[0] = x;
540    geom[1] = y;
541    geom[2] = w;
542    geom[3] = h;
543    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
544                                   geom, 4);
545 } /* ecore_x_e_illume_keyboard_geometry_set */
546
547 EAPI Eina_Bool
548 ecore_x_e_illume_keyboard_geometry_get(Ecore_X_Window win,
549                                        int           *x,
550                                        int           *y,
551                                        int           *w,
552                                        int           *h)
553 {
554    int ret = 0;
555    unsigned int geom[4];
556
557    LOGFN(__FILE__, __LINE__, __FUNCTION__);
558    ret =
559       ecore_x_window_prop_card32_get(win,
560                                      ECORE_X_ATOM_E_ILLUME_KEYBOARD_GEOMETRY,
561                                      geom, 4);
562    if (ret != 4)
563       return EINA_FALSE;
564
565    if (x)
566       *x = geom[0];
567
568    if (y)
569       *y = geom[1];
570
571    if (w)
572       *w = geom[2];
573
574    if (h)
575       *h = geom[3];
576
577    return EINA_TRUE;
578 } /* ecore_x_e_illume_keyboard_geometry_get */
579
580 static Ecore_X_Atom
581 _ecore_x_e_quickpanel_atom_get(Ecore_X_Illume_Quickpanel_State state)
582 {
583    switch (state)
584      {
585       case ECORE_X_ILLUME_QUICKPANEL_STATE_ON:
586          return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON;
587
588       case ECORE_X_ILLUME_QUICKPANEL_STATE_OFF:
589          return ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF;
590
591       default:
592          return 0;
593      } /* switch */
594    return 0;
595 } /* _ecore_x_e_quickpanel_atom_get */
596
597 static Ecore_X_Illume_Quickpanel_State
598 _ecore_x_e_quickpanel_state_get(Ecore_X_Atom atom)
599 {
600    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON)
601       return ECORE_X_ILLUME_QUICKPANEL_STATE_ON;
602
603    if (atom == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_OFF)
604       return ECORE_X_ILLUME_QUICKPANEL_STATE_OFF;
605
606    return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
607 } /* _ecore_x_e_quickpanel_state_get */
608
609 EAPI void
610 ecore_x_e_illume_quickpanel_set(Ecore_X_Window win, unsigned int is_quickpanel)
611 {
612    LOGFN(__FILE__, __LINE__, __FUNCTION__);
613    ecore_x_window_prop_card32_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
614                                   &is_quickpanel, 1);
615 } /* ecore_x_e_illume_quickpanel_set */
616
617 EAPI Eina_Bool
618 ecore_x_e_illume_quickpanel_get(Ecore_X_Window win)
619 {
620    unsigned int val = 0;
621
622    LOGFN(__FILE__, __LINE__, __FUNCTION__);
623    if (!ecore_x_window_prop_card32_get(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL,
624                                        &val, 1))
625       return EINA_FALSE;
626
627    return val ? EINA_TRUE : EINA_FALSE;
628 } /* ecore_x_e_illume_quickpanel_get */
629
630 EAPI void
631 ecore_x_e_illume_quickpanel_state_set(Ecore_X_Window                  win,
632                                       Ecore_X_Illume_Quickpanel_State state)
633 {
634    Ecore_X_Atom atom = 0;
635
636    LOGFN(__FILE__, __LINE__, __FUNCTION__);
637    atom = _ecore_x_e_quickpanel_atom_get(state);
638    ecore_x_window_prop_atom_set(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
639                                 &atom, 1);
640 } /* ecore_x_e_illume_quickpanel_state_set */
641
642 EAPI Ecore_X_Illume_Quickpanel_State
643 ecore_x_e_illume_quickpanel_state_get(Ecore_X_Window win)
644 {
645    Ecore_X_Atom atom;
646
647    LOGFN(__FILE__, __LINE__, __FUNCTION__);
648    if (!ecore_x_window_prop_atom_get(win,
649                                      ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
650                                      &atom, 1))
651       return ECORE_X_ILLUME_QUICKPANEL_STATE_UNKNOWN;
652
653    return _ecore_x_e_quickpanel_state_get(atom);
654 } /* ecore_x_e_illume_quickpanel_state_get */
655
656 EAPI void
657 ecore_x_e_illume_quickpanel_state_send(Ecore_X_Window                  win,
658                                        Ecore_X_Illume_Quickpanel_State state)
659 {
660    LOGFN(__FILE__, __LINE__, __FUNCTION__);
661    ecore_x_client_message32_send(win, ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE,
662                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
663                                  _ecore_x_e_quickpanel_atom_get(state),
664                                  0, 0, 0, 0);
665 } /* ecore_x_e_illume_quickpanel_state_send */
666
667 EAPI void
668 ecore_x_e_illume_quickpanel_state_toggle(Ecore_X_Window win)
669 {
670    LOGFN(__FILE__, __LINE__, __FUNCTION__);
671    ecore_x_client_message32_send(win,
672                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE_TOGGLE,
673                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE,
674                                  0, 0, 0, 0, 0);
675 } /* ecore_x_e_illume_quickpanel_state_toggle */
676
677 EAPI void
678 ecore_x_e_illume_quickpanel_priority_major_set(Ecore_X_Window win,
679                                                unsigned int   priority)
680 {
681    LOGFN(__FILE__, __LINE__, __FUNCTION__);
682    ecore_x_window_prop_card32_set(win,
683                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
684                                   &priority, 1);
685 } /* ecore_x_e_illume_quickpanel_priority_major_set */
686
687 EAPI int 
688 ecore_x_e_illume_quickpanel_priority_major_get(Ecore_X_Window win)
689 {
690    unsigned int val = 0;
691
692    LOGFN(__FILE__, __LINE__, __FUNCTION__);
693    if (!ecore_x_window_prop_card32_get(win,
694                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MAJOR,
695                                        &val, 1))
696       return 0;
697
698    return val;
699 } /* ecore_x_e_illume_quickpanel_priority_major_get */
700
701 EAPI void
702 ecore_x_e_illume_quickpanel_priority_minor_set(Ecore_X_Window win,
703                                                unsigned int   priority)
704 {
705    LOGFN(__FILE__, __LINE__, __FUNCTION__);
706    ecore_x_window_prop_card32_set(win,
707                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
708                                   &priority, 1);
709 } /* ecore_x_e_illume_quickpanel_priority_minor_set */
710
711 EAPI int 
712 ecore_x_e_illume_quickpanel_priority_minor_get(Ecore_X_Window win)
713 {
714    unsigned int val = 0;
715
716    LOGFN(__FILE__, __LINE__, __FUNCTION__);
717    if (!ecore_x_window_prop_card32_get(win,
718                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_PRIORITY_MINOR,
719                                        &val, 1))
720       return 0;
721
722    return val;
723 } /* ecore_x_e_illume_quickpanel_priority_minor_get */
724
725 EAPI void
726 ecore_x_e_illume_quickpanel_zone_set(Ecore_X_Window win, unsigned int zone)
727 {
728    LOGFN(__FILE__, __LINE__, __FUNCTION__);
729    ecore_x_window_prop_card32_set(win,
730                                   ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
731                                   &zone, 1);
732 } /* ecore_x_e_illume_quickpanel_zone_set */
733
734 EAPI int
735 ecore_x_e_illume_quickpanel_zone_get(Ecore_X_Window win)
736 {
737    unsigned int val = 0;
738
739    LOGFN(__FILE__, __LINE__, __FUNCTION__);
740    if (!ecore_x_window_prop_card32_get(win,
741                                        ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ZONE,
742                                        &val, 1))
743       return 0;
744
745    return val;
746 } /* ecore_x_e_illume_quickpanel_zone_get */
747
748 EAPI void
749 ecore_x_e_illume_quickpanel_position_update_send(Ecore_X_Window win)
750 {
751    LOGFN(__FILE__, __LINE__, __FUNCTION__);
752    ecore_x_client_message32_send(win,
753                                  ECORE_X_ATOM_E_ILLUME_QUICKPANEL_POSITION_UPDATE,
754                                  ECORE_X_EVENT_MASK_WINDOW_CONFIGURE, 
755                                  1, 0, 0, 0, 0);
756 } /* ecore_x_e_illume_quickpanel_position_update_send */
757
758 /* added by doyoun.kang - for sliding window */
759 EAPI void 
760 ecore_x_e_illume_sliding_win_state_set(Ecore_X_Window win,
761                                        unsigned int   is_visible)
762 {
763    LOGFN(__FILE__, __LINE__, __FUNCTION__);
764    ecore_x_window_prop_card32_set(win, 
765                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
766                                   &is_visible, 1);
767 } /* ecore_x_e_illume_sliding_win_state_set */
768
769 EAPI int 
770 ecore_x_e_illume_sliding_win_state_get(Ecore_X_Window win)
771 {
772    unsigned int is_visible = 0;
773    
774    LOGFN(__FILE__, __LINE__, __FUNCTION__);
775    if (!ecore_x_window_prop_card32_get(win,
776                                        ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_STATE, 
777                                        &is_visible, 1))
778       return 0;
779
780    return is_visible;
781 }
782
783 EAPI void
784 ecore_x_e_illume_sliding_win_geometry_set(Ecore_X_Window win,
785                                           int            x,
786                                           int            y,
787                                           int            w,
788                                           int            h)
789 {
790    unsigned int geom[4];
791
792    LOGFN(__FILE__, __LINE__, __FUNCTION__);
793    geom[0] = x;
794    geom[1] = y;
795    geom[2] = w;
796    geom[3] = h;
797    ecore_x_window_prop_card32_set(win,
798                                   ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
799                                   geom, 4);
800 } /* ecore_x_e_illume_sliding_win_geometry_set */
801
802 EAPI int 
803 ecore_x_e_illume_sliding_win_geometry_get(Ecore_X_Window win,
804                                           int           *x,
805                                           int           *y,
806                                           int           *w,
807                                           int           *h)
808 {
809    int ret = 0;
810    unsigned int geom[4];
811    
812    LOGFN(__FILE__, __LINE__, __FUNCTION__);
813    ret = 
814      ecore_x_window_prop_card32_get(win, 
815                                     ECORE_X_ATOM_E_ILLUME_SLIDING_WIN_GEOMETRY, 
816                                     geom, 4);
817    if (ret != 4)
818       return 0;
819    
820    if (x)
821       *x = geom[0];
822    
823    if (y)
824       *y = geom[1];
825    
826    if (w)
827       *w = geom[2];
828    
829    if (h)
830       *h = geom[3];
831    
832    return 1;
833 }/* ecore_x_e_illume_sliding_win_geometry_get */
834
835 EAPI void
836 ecore_x_e_comp_sync_counter_set(Ecore_X_Window       win,
837                                 Ecore_X_Sync_Counter counter)
838 {
839    LOGFN(__FILE__, __LINE__, __FUNCTION__);
840    if (counter)
841       ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
842                                   ECORE_X_ATOM_CARDINAL, &counter, 1);
843    else
844       ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
845 } /* ecore_x_e_comp_sync_counter_set */
846
847 EAPI Ecore_X_Sync_Counter
848 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
849 {
850    int ret = 0;
851    Ecore_X_Sync_Counter counter = 0;
852
853    LOGFN(__FILE__, __LINE__, __FUNCTION__);
854    ret =
855       ecore_x_window_prop_xid_get(win,
856                                   ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
857                                   ECORE_X_ATOM_CARDINAL,
858                                   &counter, 1);
859    if (ret != 1)
860       return 0;
861
862    return counter;
863 } /* ecore_x_e_comp_sync_counter_get */
864
865 EAPI void
866 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root, Ecore_X_Window win)
867 {
868    XEvent xev;
869
870    LOGFN(__FILE__, __LINE__, __FUNCTION__);
871    if (!root)
872       root = DefaultRootWindow(_ecore_x_disp);
873
874    xev.xclient.type = ClientMessage;
875    xev.xclient.display = _ecore_x_disp;
876    xev.xclient.window = win;
877    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
878    xev.xclient.format = 32;
879    xev.xclient.data.l[0] = win;
880    xev.xclient.data.l[1] = 0; // later
881    xev.xclient.data.l[2] = 0; // later
882    xev.xclient.data.l[3] = 0; // later
883    xev.xclient.data.l[4] = 0; // later
884
885    XSendEvent(_ecore_x_disp, root, False,
886               SubstructureRedirectMask | SubstructureNotifyMask,
887               &xev);
888 } /* ecore_x_e_comp_sync_draw_done_send */
889
890 EAPI void
891 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root, Eina_Bool enabled)
892 {
893    Ecore_X_Window win;
894
895    if (!root)
896       root = DefaultRootWindow(_ecore_x_disp);
897
898    LOGFN(__FILE__, __LINE__, __FUNCTION__);
899    if (enabled)
900      {
901         win = ecore_x_window_new(root, 1, 2, 3, 4);
902         ecore_x_window_prop_xid_set(win,  ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
903                                     ECORE_X_ATOM_WINDOW, &win, 1);
904         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
905                                     ECORE_X_ATOM_WINDOW, &win, 1);
906      }
907    else
908      {
909         int ret;
910
911         ret =
912            ecore_x_window_prop_xid_get(root,
913                                        ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
914                                        ECORE_X_ATOM_WINDOW,
915                                        &win, 1);
916         if ((ret == 1) && (win))
917           {
918              ecore_x_window_prop_property_del(
919                 root,
920                 ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
921              ecore_x_window_free(win);
922           }
923      }
924 } /* ecore_x_e_comp_sync_supported_set */
925
926 EAPI Eina_Bool
927 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
928 {
929    Ecore_X_Window win, win2;
930    int ret;
931
932    LOGFN(__FILE__, __LINE__, __FUNCTION__);
933    if (!root)
934       root = DefaultRootWindow(_ecore_x_disp);
935
936    ret =
937       ecore_x_window_prop_xid_get(root,
938                                   ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
939                                   ECORE_X_ATOM_WINDOW,
940                                   &win, 1);
941    if ((ret == 1) && (win))
942      {
943         ret =
944            ecore_x_window_prop_xid_get(win,
945                                        ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
946                                        ECORE_X_ATOM_WINDOW,
947                                        &win2, 1);
948         if ((ret == 1) && (win2 == win))
949            return 1;
950      }
951
952    return 0;
953 } /* ecore_x_e_comp_sync_supported_get */
954
955 EAPI void
956 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
957 {
958    XEvent xev;
959
960    LOGFN(__FILE__, __LINE__, __FUNCTION__);
961    xev.xclient.type = ClientMessage;
962    xev.xclient.display = _ecore_x_disp;
963    xev.xclient.window = win;
964    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
965    xev.xclient.format = 32;
966    xev.xclient.data.l[0] = win;
967    xev.xclient.data.l[1] = 0; // later
968    xev.xclient.data.l[2] = 0; // later
969    xev.xclient.data.l[3] = 0; // later
970    xev.xclient.data.l[4] = 0; // later
971
972    XSendEvent(_ecore_x_disp, win, False,
973               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
974               &xev);
975 } /* ecore_x_e_comp_sync_begin_send */
976
977 EAPI void
978 ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
979 {
980    XEvent xev;
981
982    LOGFN(__FILE__, __LINE__, __FUNCTION__);
983    xev.xclient.type = ClientMessage;
984    xev.xclient.display = _ecore_x_disp;
985    xev.xclient.window = win;
986    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
987    xev.xclient.format = 32;
988    xev.xclient.data.l[0] = win;
989    xev.xclient.data.l[1] = 0; // later
990    xev.xclient.data.l[2] = 0; // later
991    xev.xclient.data.l[3] = 0; // later
992    xev.xclient.data.l[4] = 0; // later
993
994    XSendEvent(_ecore_x_disp, win, False,
995               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
996               &xev);
997 } /* ecore_x_e_comp_sync_end_send */
998
999 EAPI void
1000 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
1001 {
1002    XEvent xev;
1003
1004    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1005    xev.xclient.type = ClientMessage;
1006    xev.xclient.display = _ecore_x_disp;
1007    xev.xclient.window = win;
1008    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
1009    xev.xclient.format = 32;
1010    xev.xclient.data.l[0] = win;
1011    xev.xclient.data.l[1] = 0; // later
1012    xev.xclient.data.l[2] = 0; // later
1013    xev.xclient.data.l[3] = 0; // later
1014    xev.xclient.data.l[4] = 0; // later
1015
1016    XSendEvent(_ecore_x_disp, win, False,
1017               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1018               &xev);
1019 } /* ecore_x_e_comp_sync_cancel_send */
1020
1021 EAPI void
1022 ecore_x_e_comp_flush_send(Ecore_X_Window win)
1023 {
1024    XEvent xev;
1025
1026    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1027    xev.xclient.type = ClientMessage;
1028    xev.xclient.display = _ecore_x_disp;
1029    xev.xclient.window = win;
1030    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
1031    xev.xclient.format = 32;
1032    xev.xclient.data.l[0] = win;
1033    xev.xclient.data.l[1] = 0; // later
1034    xev.xclient.data.l[2] = 0; // later
1035    xev.xclient.data.l[3] = 0; // later
1036    xev.xclient.data.l[4] = 0; // later
1037
1038    XSendEvent(_ecore_x_disp, win, False,
1039               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1040               &xev);
1041 } /* ecore_x_e_comp_flush_send */
1042
1043 EAPI void
1044 ecore_x_e_comp_dump_send(Ecore_X_Window win)
1045 {
1046    XEvent xev;
1047
1048    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1049    xev.xclient.type = ClientMessage;
1050    xev.xclient.display = _ecore_x_disp;
1051    xev.xclient.window = win;
1052    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1053    xev.xclient.format = 32;
1054    xev.xclient.data.l[0] = win;
1055    xev.xclient.data.l[1] = 0; // later
1056    xev.xclient.data.l[2] = 0; // later
1057    xev.xclient.data.l[3] = 0; // later
1058    xev.xclient.data.l[4] = 0; // later
1059
1060    XSendEvent(_ecore_x_disp, win, False,
1061               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1062               &xev);
1063 } /* ecore_x_e_comp_dump_send */
1064
1065 EAPI void
1066 ecore_x_e_comp_pixmap_set(Ecore_X_Window win, Ecore_X_Pixmap pixmap)
1067 {
1068    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1069    if (pixmap)
1070       ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_DUMP,
1071                                   ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1072    else
1073       ecore_x_window_prop_property_del(win, pixmap);
1074 } /* ecore_x_e_comp_pixmap_set */
1075
1076 EAPI Ecore_X_Pixmap
1077 ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1078 {
1079    int ret = 0;
1080    Ecore_X_Pixmap pixmap = 0;
1081
1082    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1083    ret =
1084       ecore_x_window_prop_xid_get(win,
1085                                   ECORE_X_ATOM_E_COMP_DUMP,
1086                                   ECORE_X_ATOM_PIXMAP,
1087                                   &pixmap, 1);
1088    if (ret != 1)
1089       return 0;
1090
1091    return pixmap;
1092 } /* ecore_x_e_comp_pixmap_get */
1093
1094 EAPI void
1095 ecore_x_e_comp_dri_buff_flip_supported_set(Ecore_X_Window root, Eina_Bool enabled)
1096 {
1097   Ecore_X_Window win;
1098   
1099   if (!root) root = DefaultRootWindow(_ecore_x_disp);
1100   LOGFN(__FILE__, __LINE__, __FUNCTION__);
1101   if (enabled)
1102     {
1103       win = ecore_x_window_new(root, 1, 2, 3, 4);
1104       ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED,
1105                                   ECORE_X_ATOM_WINDOW, &win, 1);
1106       ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED,
1107                                   ECORE_X_ATOM_WINDOW, &win, 1);
1108     }
1109   else
1110     {
1111       int ret =
1112         ecore_x_window_prop_xid_get(root,
1113                                     ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED,
1114                                     ECORE_X_ATOM_WINDOW,
1115                                     &win, 1);
1116       if ((ret == 1) && (win))
1117         {
1118           ecore_x_window_prop_property_del(root, ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED);
1119           ecore_x_window_free(win);
1120         }
1121     }
1122 }
1123
1124 EAPI Eina_Bool
1125 ecore_x_e_comp_dri_buff_flip_supported_get(Ecore_X_Window root)
1126 {
1127   Ecore_X_Window win, win2;
1128   int ret;
1129   
1130   LOGFN(__FILE__, __LINE__, __FUNCTION__);
1131   if (!root) root = DefaultRootWindow(_ecore_x_disp);
1132   ret =
1133     ecore_x_window_prop_xid_get(root,
1134                                 ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED,
1135                                 ECORE_X_ATOM_WINDOW,
1136                                 &win, 1);
1137   if ((ret == 1) && (win))
1138     {
1139       ret =
1140         ecore_x_window_prop_xid_get(win,
1141                                     ECORE_X_ATOM_E_COMP_DRI_BUFF_FLIP_SUPPORTED,
1142                                     ECORE_X_ATOM_WINDOW,
1143                                     &win2, 1);
1144       if ((ret == 1) && (win2 == win)) return EINA_TRUE;
1145     }
1146   return EINA_FALSE;
1147 }