5966bbd5b75a0d556fc73032182471fb7221895c
[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 }
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 }
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 }
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 }
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 }
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      }
161    return 0;
162 }
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 }
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 }
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 }
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      }
217    return ECORE_X_ILLUME_MODE_UNKNOWN;
218 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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      }
605    return 0;
606 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
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 }
770
771 EAPI void
772 ecore_x_e_comp_sync_counter_set(Ecore_X_Window win,
773                                 Ecore_X_Sync_Counter counter)
774 {
775    LOGFN(__FILE__, __LINE__, __FUNCTION__);
776    if (counter)
777      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
778                                  ECORE_X_ATOM_CARDINAL, &counter, 1);
779    else
780      ecore_x_window_prop_property_del(win, ECORE_X_ATOM_E_COMP_SYNC_COUNTER);
781 }
782
783 EAPI Ecore_X_Sync_Counter
784 ecore_x_e_comp_sync_counter_get(Ecore_X_Window win)
785 {
786    int ret = 0;
787    Ecore_X_Sync_Counter counter = 0;
788
789    LOGFN(__FILE__, __LINE__, __FUNCTION__);
790    ret =
791      ecore_x_window_prop_xid_get(win,
792                                  ECORE_X_ATOM_E_COMP_SYNC_COUNTER,
793                                  ECORE_X_ATOM_CARDINAL,
794                                  &counter, 1);
795    if (ret != 1)
796      return 0;
797
798    return counter;
799 }
800
801 EAPI void
802 ecore_x_e_comp_sync_draw_done_send(Ecore_X_Window root,
803                                    Ecore_X_Window win)
804 {
805    XEvent xev;
806
807    LOGFN(__FILE__, __LINE__, __FUNCTION__);
808    if (!root)
809      root = DefaultRootWindow(_ecore_x_disp);
810
811    xev.xclient.type = ClientMessage;
812    xev.xclient.display = _ecore_x_disp;
813    xev.xclient.window = win;
814    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
815    xev.xclient.format = 32;
816    xev.xclient.data.l[0] = win;
817    xev.xclient.data.l[1] = 0; // version
818    xev.xclient.data.l[2] = 0; // later
819    xev.xclient.data.l[3] = 0; // later
820    xev.xclient.data.l[4] = 0; // later
821
822    XSendEvent(_ecore_x_disp, root, False,
823               SubstructureRedirectMask | SubstructureNotifyMask,
824               &xev);
825 }
826
827 EAPI void
828 ecore_x_e_comp_sync_draw_size_done_send(Ecore_X_Window root,
829                                         Ecore_X_Window win,
830                                         int w,
831                                         int h)
832 {
833    XEvent xev;
834
835    LOGFN(__FILE__, __LINE__, __FUNCTION__);
836    if (!root)
837      root = DefaultRootWindow(_ecore_x_disp);
838
839    xev.xclient.type = ClientMessage;
840    xev.xclient.display = _ecore_x_disp;
841    xev.xclient.window = win;
842    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE;
843    xev.xclient.format = 32;
844    xev.xclient.data.l[0] = win;
845    xev.xclient.data.l[1] = 1; // version
846    xev.xclient.data.l[2] = w; // win width at draw time
847    xev.xclient.data.l[3] = h; // win height at draw time
848    xev.xclient.data.l[4] = 0; // later
849
850    XSendEvent(_ecore_x_disp, root, False,
851               SubstructureRedirectMask | SubstructureNotifyMask,
852               &xev);
853 }
854
855 EAPI void
856 ecore_x_e_comp_sync_supported_set(Ecore_X_Window root,
857                                   Eina_Bool enabled)
858 {
859    Ecore_X_Window win;
860
861    if (!root)
862      root = DefaultRootWindow(_ecore_x_disp);
863
864    LOGFN(__FILE__, __LINE__, __FUNCTION__);
865    if (enabled)
866      {
867         win = ecore_x_window_new(root, 1, 2, 3, 4);
868         ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
869                                     ECORE_X_ATOM_WINDOW, &win, 1);
870         ecore_x_window_prop_xid_set(root, ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
871                                     ECORE_X_ATOM_WINDOW, &win, 1);
872      }
873    else
874      {
875         int ret;
876
877         ret =
878           ecore_x_window_prop_xid_get(root,
879                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
880                                       ECORE_X_ATOM_WINDOW,
881                                       &win, 1);
882         if ((ret == 1) && (win))
883           {
884              ecore_x_window_prop_property_del(
885                root,
886                ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED);
887              ecore_x_window_free(win);
888           }
889      }
890 }
891
892 EAPI Eina_Bool
893 ecore_x_e_comp_sync_supported_get(Ecore_X_Window root)
894 {
895    Ecore_X_Window win, win2;
896    int ret;
897
898    LOGFN(__FILE__, __LINE__, __FUNCTION__);
899    if (!root)
900      root = DefaultRootWindow(_ecore_x_disp);
901
902    ret =
903      ecore_x_window_prop_xid_get(root,
904                                  ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
905                                  ECORE_X_ATOM_WINDOW,
906                                  &win, 1);
907    if ((ret == 1) && (win))
908      {
909         ret =
910           ecore_x_window_prop_xid_get(win,
911                                       ECORE_X_ATOM_E_COMP_SYNC_SUPPORTED,
912                                       ECORE_X_ATOM_WINDOW,
913                                       &win2, 1);
914         if ((ret == 1) && (win2 == win))
915           return EINA_TRUE;
916      }
917
918    return EINA_FALSE;
919 }
920
921 EAPI void
922 ecore_x_e_comp_sync_begin_send(Ecore_X_Window win)
923 {
924    XEvent xev;
925
926    LOGFN(__FILE__, __LINE__, __FUNCTION__);
927    xev.xclient.type = ClientMessage;
928    xev.xclient.display = _ecore_x_disp;
929    xev.xclient.window = win;
930    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_BEGIN;
931    xev.xclient.format = 32;
932    xev.xclient.data.l[0] = win;
933    xev.xclient.data.l[1] = 0; // later
934    xev.xclient.data.l[2] = 0; // later
935    xev.xclient.data.l[3] = 0; // later
936    xev.xclient.data.l[4] = 0; // later
937
938    XSendEvent(_ecore_x_disp, win, False,
939               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
940               &xev);
941 }
942
943 EAPI void
944 ecore_x_e_comp_sync_end_send(Ecore_X_Window win)
945 {
946    XEvent xev;
947
948    LOGFN(__FILE__, __LINE__, __FUNCTION__);
949    xev.xclient.type = ClientMessage;
950    xev.xclient.display = _ecore_x_disp;
951    xev.xclient.window = win;
952    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_END;
953    xev.xclient.format = 32;
954    xev.xclient.data.l[0] = win;
955    xev.xclient.data.l[1] = 0; // later
956    xev.xclient.data.l[2] = 0; // later
957    xev.xclient.data.l[3] = 0; // later
958    xev.xclient.data.l[4] = 0; // later
959
960    XSendEvent(_ecore_x_disp, win, False,
961               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
962               &xev);
963 }
964
965 EAPI void
966 ecore_x_e_comp_sync_cancel_send(Ecore_X_Window win)
967 {
968    XEvent xev;
969
970    LOGFN(__FILE__, __LINE__, __FUNCTION__);
971    xev.xclient.type = ClientMessage;
972    xev.xclient.display = _ecore_x_disp;
973    xev.xclient.window = win;
974    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_SYNC_CANCEL;
975    xev.xclient.format = 32;
976    xev.xclient.data.l[0] = win;
977    xev.xclient.data.l[1] = 0; // later
978    xev.xclient.data.l[2] = 0; // later
979    xev.xclient.data.l[3] = 0; // later
980    xev.xclient.data.l[4] = 0; // later
981
982    XSendEvent(_ecore_x_disp, win, False,
983               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
984               &xev);
985 }
986
987 EAPI void
988 ecore_x_e_comp_flush_send(Ecore_X_Window win)
989 {
990    XEvent xev;
991
992    LOGFN(__FILE__, __LINE__, __FUNCTION__);
993    xev.xclient.type = ClientMessage;
994    xev.xclient.display = _ecore_x_disp;
995    xev.xclient.window = win;
996    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_FLUSH;
997    xev.xclient.format = 32;
998    xev.xclient.data.l[0] = win;
999    xev.xclient.data.l[1] = 0; // later
1000    xev.xclient.data.l[2] = 0; // later
1001    xev.xclient.data.l[3] = 0; // later
1002    xev.xclient.data.l[4] = 0; // later
1003
1004    XSendEvent(_ecore_x_disp, win, False,
1005               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1006               &xev);
1007 }
1008
1009 EAPI void
1010 ecore_x_e_comp_dump_send(Ecore_X_Window win)
1011 {
1012    XEvent xev;
1013
1014    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1015    xev.xclient.type = ClientMessage;
1016    xev.xclient.display = _ecore_x_disp;
1017    xev.xclient.window = win;
1018    xev.xclient.message_type = ECORE_X_ATOM_E_COMP_DUMP;
1019    xev.xclient.format = 32;
1020    xev.xclient.data.l[0] = win;
1021    xev.xclient.data.l[1] = 0; // later
1022    xev.xclient.data.l[2] = 0; // later
1023    xev.xclient.data.l[3] = 0; // later
1024    xev.xclient.data.l[4] = 0; // later
1025
1026    XSendEvent(_ecore_x_disp, win, False,
1027               NoEventMask, //SubstructureRedirectMask | SubstructureNotifyMask,
1028               &xev);
1029 }
1030
1031 EAPI void
1032 ecore_x_e_comp_pixmap_set(Ecore_X_Window win,
1033                           Ecore_X_Pixmap pixmap)
1034 {
1035    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1036    if (pixmap)
1037      ecore_x_window_prop_xid_set(win, ECORE_X_ATOM_E_COMP_PIXMAP,
1038                                  ECORE_X_ATOM_PIXMAP, &pixmap, 1);
1039    else
1040      ecore_x_window_prop_property_del(win, pixmap);
1041 }
1042
1043 EAPI Ecore_X_Pixmap
1044 ecore_x_e_comp_pixmap_get(Ecore_X_Window win)
1045 {
1046    int ret = 0;
1047    Ecore_X_Pixmap pixmap = 0;
1048
1049    LOGFN(__FILE__, __LINE__, __FUNCTION__);
1050    ret =
1051      ecore_x_window_prop_xid_get(win,
1052                                  ECORE_X_ATOM_E_COMP_PIXMAP,
1053                                  ECORE_X_ATOM_PIXMAP,
1054                                  &pixmap, 1);
1055    if (ret != 1)
1056      return 0;
1057
1058    return pixmap;
1059 }
1060