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