tizen 2.4 release
[framework/uifw/e17-mod-tizen-comp.git] / src / e_mod_comp_atoms.c
1 #include "e.h"
2 #include "e_mod_comp_atoms.h"
3 #include "e_mod_comp_debug.h"
4
5 /* atoms */
6 EAPI Ecore_X_Atom ATOM_CM_LOG                           = 0;
7 EAPI Ecore_X_Atom ATOM_CM_LOG_DUMP_DONE                 = 0;
8 EAPI Ecore_X_Atom ATOM_IMAGE_LAUNCH                     = 0;
9 EAPI Ecore_X_Atom ATOM_IMAGE_LAUNCH_FILE                = 0;
10 EAPI Ecore_X_Atom ATOM_EFFECT_ENABLE                    = 0;
11 EAPI Ecore_X_Atom ATOM_WINDOW_EFFECT_ENABLE             = 0;
12 EAPI Ecore_X_Atom ATOM_WINDOW_LAUNCHING_EFFECT_DONE    = 0;
13 EAPI Ecore_X_Atom ATOM_WINDOW_EFFECT_CLIENT_STATE       = 0;
14 EAPI Ecore_X_Atom ATOM_WINDOW_EFFECT_TYPE               = 0;
15 EAPI Ecore_X_Atom ATOM_EFFECT_DEFAULT                   = 0;
16 EAPI Ecore_X_Atom ATOM_EFFECT_NONE                      = 0;
17 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM0                   = 0;
18 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM1                   = 0;
19 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM2                   = 0;
20 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM3                   = 0;
21 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM4                   = 0;
22 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM5                   = 0;
23 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM6                   = 0;
24 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM7                   = 0;
25 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM8                   = 0;
26 EAPI Ecore_X_Atom ATOM_EFFECT_CUSTOM9                   = 0;
27 EAPI Ecore_X_Atom ATOM_OVERAY_WINDOW                    = 0;
28 EAPI Ecore_X_Atom ATOM_X_HIBERNATION_STATE              = 0;
29 EAPI Ecore_X_Atom ATOM_X_SCREEN_ROTATION                = 0;
30 EAPI Ecore_X_Atom ATOM_X_WIN_USE_DRI2                   = 0;
31 EAPI Ecore_X_Atom ATOM_X_WIN_HW_OV_SHOW                 = 0;
32 EAPI Ecore_X_Atom ATOM_CM_LOCK_SCREEN                   = 0;
33 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_SUPPORTED     = 0;
34 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_STATE         = 0;
35 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_BEGIN         = 0;
36 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_BEGIN_DONE    = 0;
37 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_END           = 0;
38 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_END_DONE      = 0;
39 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_REQUEST       = 0;
40 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_REQUEST_DONE  = 0;
41 EAPI Ecore_X_Atom ATOM_CM_PIXMAP_ROTATION_RESIZE_PIXMAP = 0;
42 EAPI Ecore_X_Atom ATOM_NET_CM_WINDOW_BACKGROUND         = 0;
43 EAPI Ecore_X_Atom ATOM_XV_USE                           = 0;
44 EAPI Ecore_X_Atom ATOM_XV_PIXMAP0                       = 0;
45 EAPI Ecore_X_Atom ATOM_XV_PIXMAP1                       = 0;
46 EAPI Ecore_X_Atom ATOM_XV_BYPASS_TO_PIXMAP0             = 0;
47 EAPI Ecore_X_Atom ATOM_XV_BYPASS_TO_PIXMAP1             = 0;
48 EAPI Ecore_X_Atom ATOM_XV_BYPASS_DONE0                  = 0;
49 EAPI Ecore_X_Atom ATOM_XV_BYPASS_DONE1                  = 0;
50 EAPI Ecore_X_Atom ATOM_XV_ROT_EFFECT_DONE               = 0;
51 EAPI Ecore_X_Atom ATOM_XV_ROT_EFFECT_BEGIN              = 0;
52 EAPI Ecore_X_Atom ATOM_CM_TRANSPARENT_RECT              = 0;
53 EAPI Ecore_X_Atom ATOM_RR_WM_STATE                      = 0;
54 EAPI Ecore_X_Atom ATOM_CM_3D_APP_WIN                    = 0;
55 EAPI Ecore_X_Atom ATOM_CM_STEREOSCOPIC_MODE             = 0;
56 EAPI Ecore_X_Atom ATOM_CM_MSG_STEREO_MODE               = 0;
57
58 /* local subsystem globals */
59 static Eina_Hash *atoms_hash = NULL;
60
61 static const char *atom_names[] = {
62   "_E_COMP_LOG",
63   "_E_COMP_LOG_DUMP_DONE",
64   "_E_COMP_FAKE_LAUNCH",
65   "_E_COMP_FAKE_LAUNCH_IMAGE",
66   "_NET_CM_EFFECT_ENABLE",
67   "_NET_CM_WINDOW_EFFECT_ENABLE",
68   "_NET_CM_WINDOW_LAUNCH_EFFECT_DONE",
69   "_NET_CM_WINDOW_EFFECT_CLIENT_STATE",
70   "_NET_CM_WINDOW_EFFECT_TYPE",
71   "_NET_CM_EFFECT_DEFAULT",
72   "_NET_CM_EFFECT_NONE",
73   "_NET_CM_EFFECT_CUSTOM0",
74   "_NET_CM_EFFECT_CUSTOM1",
75   "_NET_CM_EFFECT_CUSTOM2",
76   "_NET_CM_EFFECT_CUSTOM3",
77   "_NET_CM_EFFECT_CUSTOM4",
78   "_NET_CM_EFFECT_CUSTOM5",
79   "_NET_CM_EFFECT_CUSTOM6",
80   "_NET_CM_EFFECT_CUSTOM7",
81   "_NET_CM_EFFECT_CUSTOM8",
82   "_NET_CM_EFFECT_CUSTOM9",
83   "_E_COMP_OVERAY_WINDOW",
84   "X_HIBERNATION_STATE",
85   "X_SCREEN_ROTATION",
86   "X_WIN_USE_DRI2",
87   "X_WIN_HW_OV_SHOW",
88   "_E_COMP_LOCK_SCREEN",
89   "_E_COMP_PIXMAP_ROTATION_SUPPORTED",
90   "_E_COMP_PIXMAP_ROTATION_STATE",
91   "_E_COMP_PIXMAP_ROTATION_BEGIN",
92   "_E_COMP_PIXMAP_ROTATION_BEGIN_DONE",
93   "_E_COMP_PIXMAP_ROTATION_END",
94   "_E_COMP_PIXMAP_ROTATION_END_DONE",
95   "_E_COMP_PIXMAP_ROTATION_REQUEST",
96   "_E_COMP_PIXMAP_ROTATION_REQUEST_DONE",
97   "_E_COMP_PIXMAP_ROTATION_RESIZE_PIXMAP",
98   "_NET_CM_WINDOW_BACKGROUND",
99   "_XV_USE",
100   "_XV_PIXMAP0",
101   "_XV_PIXMAP1",
102   "_XV_BYPASS_TO_PIXMAP0",
103   "_XV_BYPASS_TO_PIXMAP1",
104   "_XV_BYPASS_DONE0",
105   "_XV_BYPASS_DONE1",
106   "_XV_ROT_EFFECT_DONE",
107   "_XV_ROT_EFFECT_BEGIN",
108   "_E_COMP_TRANSPARENT_RECT",
109   "_RR_NET_WM_STATE",
110   "_E_COMP_3D_APP_WIN",
111   "_E_COMP_STEREOSCOPIC_MODE",
112   "_E_COMP_MSG_STEREO_MODE"
113 };
114
115 static const char *external_atom_names[] = {
116   "SYNC_DRAW_DONE",
117   "SYNC_COUNTER",
118   "WIN_ROT_ANGLE",
119   "ILLUME_WIN_STATE",
120   "WM_WINDOW_OPACITY",
121   "WM_CLASS",
122   "WM_WINDOW_ROLE"
123 };
124
125 /* externally accessible functions */
126 EAPI int
127 e_mod_comp_atoms_init(void)
128 {
129    Ecore_X_Atom *atoms = NULL;
130    int n = 0, i = 0, res = 0;
131
132    if (!atoms_hash) atoms_hash = eina_hash_string_superfast_new(NULL);
133    E_CHECK_RETURN(atoms_hash, 0);
134
135    n = (sizeof(atom_names) / sizeof(char *));
136
137    atoms = E_NEW(Ecore_X_Atom, n);
138    E_CHECK_GOTO(atoms, cleanup);
139
140    ecore_x_atoms_get(atom_names, n, atoms);
141
142    ATOM_CM_LOG                           = atoms[i++];
143    ATOM_CM_LOG_DUMP_DONE                 = atoms[i++];
144    ATOM_IMAGE_LAUNCH                     = atoms[i++];
145    ATOM_IMAGE_LAUNCH_FILE                = atoms[i++];
146    ATOM_EFFECT_ENABLE                    = atoms[i++];
147    ATOM_WINDOW_EFFECT_ENABLE             = atoms[i++];
148    ATOM_WINDOW_LAUNCHING_EFFECT_DONE    = atoms[i++];
149    ATOM_WINDOW_EFFECT_CLIENT_STATE       = atoms[i++];
150    ATOM_WINDOW_EFFECT_TYPE               = atoms[i++];
151    ATOM_EFFECT_DEFAULT                   = atoms[i++];
152    ATOM_EFFECT_NONE                      = atoms[i++];
153    ATOM_EFFECT_CUSTOM0                   = atoms[i++];
154    ATOM_EFFECT_CUSTOM1                   = atoms[i++];
155    ATOM_EFFECT_CUSTOM2                   = atoms[i++];
156    ATOM_EFFECT_CUSTOM3                   = atoms[i++];
157    ATOM_EFFECT_CUSTOM4                   = atoms[i++];
158    ATOM_EFFECT_CUSTOM5                   = atoms[i++];
159    ATOM_EFFECT_CUSTOM6                   = atoms[i++];
160    ATOM_EFFECT_CUSTOM7                   = atoms[i++];
161    ATOM_EFFECT_CUSTOM8                   = atoms[i++];
162    ATOM_EFFECT_CUSTOM9                   = atoms[i++];
163    ATOM_OVERAY_WINDOW                    = atoms[i++];
164    ATOM_X_HIBERNATION_STATE              = atoms[i++];
165    ATOM_X_SCREEN_ROTATION                = atoms[i++];
166    ATOM_X_WIN_USE_DRI2                   = atoms[i++];
167    ATOM_X_WIN_HW_OV_SHOW                 = atoms[i++];
168    ATOM_CM_LOCK_SCREEN                   = atoms[i++];
169    ATOM_CM_PIXMAP_ROTATION_SUPPORTED     = atoms[i++];
170    ATOM_CM_PIXMAP_ROTATION_STATE         = atoms[i++];
171    ATOM_CM_PIXMAP_ROTATION_BEGIN         = atoms[i++];
172    ATOM_CM_PIXMAP_ROTATION_BEGIN_DONE    = atoms[i++];
173    ATOM_CM_PIXMAP_ROTATION_END           = atoms[i++];
174    ATOM_CM_PIXMAP_ROTATION_END_DONE      = atoms[i++];
175    ATOM_CM_PIXMAP_ROTATION_REQUEST       = atoms[i++];
176    ATOM_CM_PIXMAP_ROTATION_REQUEST_DONE  = atoms[i++];
177    ATOM_CM_PIXMAP_ROTATION_RESIZE_PIXMAP = atoms[i++];
178    ATOM_NET_CM_WINDOW_BACKGROUND         = atoms[i++];
179    ATOM_XV_USE                           = atoms[i++];
180    ATOM_XV_PIXMAP0                       = atoms[i++];
181    ATOM_XV_PIXMAP1                       = atoms[i++];
182    ATOM_XV_BYPASS_TO_PIXMAP0             = atoms[i++];
183    ATOM_XV_BYPASS_TO_PIXMAP1             = atoms[i++];
184    ATOM_XV_BYPASS_DONE0                  = atoms[i++];
185    ATOM_XV_BYPASS_DONE1                  = atoms[i++];
186    ATOM_XV_ROT_EFFECT_DONE               = atoms[i++];
187    ATOM_XV_ROT_EFFECT_BEGIN              = atoms[i++];
188    ATOM_CM_TRANSPARENT_RECT              = atoms[i++];
189    ATOM_RR_WM_STATE                      = atoms[i++];
190    ATOM_CM_3D_APP_WIN                    = atoms[i++];
191    ATOM_CM_STEREOSCOPIC_MODE             = atoms[i++];
192    ATOM_CM_MSG_STEREO_MODE               = atoms[i++];
193
194    for (i = 0; i < n; i++)
195      {
196         E_CHECK_GOTO(atoms[i], cleanup);
197         eina_hash_add(atoms_hash,
198                       e_util_winid_str_get(atoms[i]),
199                       atom_names[i]);
200      }
201
202    i = 0;
203    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_E_COMP_SYNC_DRAW_DONE),        external_atom_names[i++]);
204    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_E_COMP_SYNC_COUNTER),          external_atom_names[i++]);
205    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_E_ILLUME_WINDOW_STATE),        external_atom_names[i++]);
206    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_NET_WM_WINDOW_OPACITY),        external_atom_names[i++]);
207    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_WM_CLASS),                     external_atom_names[i++]);
208    eina_hash_add(atoms_hash, e_util_winid_str_get(ECORE_X_ATOM_WM_WINDOW_ROLE),               external_atom_names[i++]);
209
210    res = 1;
211
212 cleanup:
213    if (atoms) E_FREE(atoms);
214    return res;
215 }
216
217 EAPI int
218 e_mod_comp_atoms_shutdown(void)
219 {
220    if (atoms_hash) eina_hash_free(atoms_hash);
221    atoms_hash = NULL;
222    return 1;
223 }
224
225 EAPI const char *
226 e_mod_comp_atoms_name_get(Ecore_X_Atom a)
227 {
228    E_CHECK_RETURN(a, NULL);
229    return eina_hash_find(atoms_hash,
230                          e_util_winid_str_get(a));
231 }