1 #include "e_mod_comp_shared_types.h"
2 #include "e_mod_comp.h"
3 #include "e_mod_comp_debug.h"
5 typedef enum _E_Comp_Win_Class_Type
7 E_COMP_WIN_CLASS_TYPE_UNKNOWN = 0,
8 E_COMP_WIN_CLASS_TYPE_NORMAL,
9 E_COMP_WIN_CLASS_TYPE_MENUSCREEN,
10 E_COMP_WIN_CLASS_TYPE_QUICKPANEL_BASE,
11 E_COMP_WIN_CLASS_TYPE_QUICKPANEL,
12 E_COMP_WIN_CLASS_TYPE_VIDEOCALL,
13 E_COMP_WIN_CLASS_TYPE_TASKMANAGER,
14 E_COMP_WIN_CLASS_TYPE_LIVEMAGAZINE,
15 E_COMP_WIN_CLASS_TYPE_LOCKSCREEN,
16 E_COMP_WIN_CLASS_TYPE_INDICATOR,
17 E_COMP_WIN_CLASS_TYPE_TICKERNOTI,
18 E_COMP_WIN_CLASS_TYPE_DEBUGGING_INFO,
19 E_COMP_WIN_CLASS_TYPE_APPTRAY,
20 E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
21 E_COMP_WIN_CLASS_TYPE_VOLUME,
22 E_COMP_WIN_CLASS_TYPE_BACKGROUND,
23 E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD,
24 E_COMP_WIN_CLASS_TYPE_TOAST,
25 E_COMP_WIN_CLASS_TYPE_ISF,
26 } E_Comp_Win_Class_Type;
28 typedef enum _E_Comp_Win_Name_Type
30 E_COMP_WIN_NAME_TYPE_UNKNOWN = 0,
31 E_COMP_WIN_NAME_TYPE_NORMAL,
32 E_COMP_WIN_NAME_TYPE_MENUSCREEN,
33 E_COMP_WIN_NAME_TYPE_QUICKPANEL_BASE,
34 E_COMP_WIN_NAME_TYPE_QUICKPANEL,
35 E_COMP_WIN_NAME_TYPE_TASKMANAGER,
36 E_COMP_WIN_NAME_TYPE_LIVEMAGAZINE,
37 E_COMP_WIN_NAME_TYPE_LOCKSCREEN,
38 E_COMP_WIN_NAME_TYPE_INDICATOR,
39 E_COMP_WIN_NAME_TYPE_TICKERNOTI,
40 E_COMP_WIN_NAME_TYPE_APPTRAY,
41 E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
42 E_COMP_WIN_NAME_TYPE_VOLUME,
43 E_COMP_WIN_NAME_TYPE_BACKGROUND,
44 E_COMP_WIN_NAME_TYPE_SETUP_WIZARD,
45 E_COMP_WIN_NAME_TYPE_TOAST,
46 E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
47 E_COMP_WIN_NAME_TYPE_ISF_SUB,
48 } E_Comp_Win_Name_Type;
50 /* local subsystem functions */
51 static E_Comp_Win_Type _ecore_type_to_e_comp_type(Ecore_X_Window_Type t);
53 /* local subsystem globals */
54 static const char *win_class[] =
77 static const char *win_name[] =
80 "com.samsung.menu-screen",
95 // E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD
97 // E_COMP_WIN_NAME_TYPE_ISF_SUB
104 static E_Comp_Win_Class_Type win_class_vals[] =
106 E_COMP_WIN_CLASS_TYPE_NORMAL,
107 E_COMP_WIN_CLASS_TYPE_MENUSCREEN,
108 E_COMP_WIN_CLASS_TYPE_QUICKPANEL_BASE,
109 E_COMP_WIN_CLASS_TYPE_QUICKPANEL,
110 E_COMP_WIN_CLASS_TYPE_VIDEOCALL,
111 E_COMP_WIN_CLASS_TYPE_TASKMANAGER,
112 E_COMP_WIN_CLASS_TYPE_LIVEMAGAZINE,
113 E_COMP_WIN_CLASS_TYPE_LOCKSCREEN,
114 E_COMP_WIN_CLASS_TYPE_LOCKSCREEN,
115 E_COMP_WIN_CLASS_TYPE_INDICATOR,
116 E_COMP_WIN_CLASS_TYPE_TICKERNOTI,
117 E_COMP_WIN_CLASS_TYPE_DEBUGGING_INFO,
118 E_COMP_WIN_CLASS_TYPE_APPTRAY,
119 E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY,
120 E_COMP_WIN_CLASS_TYPE_VOLUME,
121 E_COMP_WIN_CLASS_TYPE_BACKGROUND,
122 E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD,
123 E_COMP_WIN_CLASS_TYPE_TOAST,
124 E_COMP_WIN_CLASS_TYPE_ISF,
127 static E_Comp_Win_Class_Type win_name_vals[] =
129 E_COMP_WIN_NAME_TYPE_NORMAL,
130 E_COMP_WIN_NAME_TYPE_MENUSCREEN,
131 E_COMP_WIN_NAME_TYPE_QUICKPANEL_BASE,
132 E_COMP_WIN_NAME_TYPE_QUICKPANEL,
133 E_COMP_WIN_NAME_TYPE_TASKMANAGER,
134 E_COMP_WIN_NAME_TYPE_LIVEMAGAZINE,
135 E_COMP_WIN_NAME_TYPE_LOCKSCREEN,
136 E_COMP_WIN_NAME_TYPE_LOCKSCREEN,
137 E_COMP_WIN_NAME_TYPE_INDICATOR,
138 E_COMP_WIN_NAME_TYPE_TICKERNOTI,
139 E_COMP_WIN_NAME_TYPE_APPTRAY,
140 E_COMP_WIN_NAME_TYPE_MINI_APPTRAY,
141 E_COMP_WIN_NAME_TYPE_VOLUME,
142 E_COMP_WIN_NAME_TYPE_BACKGROUND,
143 E_COMP_WIN_NAME_TYPE_SETUP_WIZARD,
144 E_COMP_WIN_NAME_TYPE_TOAST,
145 E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD,
146 E_COMP_WIN_NAME_TYPE_ISF_SUB,
149 static Eina_Hash *class_hash = NULL;
150 static Eina_Hash *names_hash = NULL;
152 /* externally accessible functions */
154 e_mod_comp_win_type_init(void)
157 if (!class_hash) class_hash = eina_hash_string_superfast_new(NULL);
158 if (!names_hash) names_hash = eina_hash_string_superfast_new(NULL);
160 n = (sizeof(win_class) / sizeof(char *));
161 for (i = 0; i < n; i++)
164 (class_hash, win_class[i],
168 n = (sizeof(win_name) / sizeof(char *));
169 for (i = 0; i < n; i++)
171 if (i >= E_COMP_WIN_NAME_TYPE_ISF_SUB)
174 (names_hash, win_name[i],
175 &win_name_vals[E_COMP_WIN_NAME_TYPE_ISF_SUB]);
181 win_name[i], &win_name_vals[i]);
189 e_mod_comp_win_type_shutdown(void)
191 if (class_hash) eina_hash_free(class_hash);
192 if (names_hash) eina_hash_free(names_hash);
201 e_mod_comp_win_type_setup(E_Comp_Win *cw)
203 Ecore_X_Window_Type wtype = ECORE_X_WINDOW_TYPE_UNKNOWN;
204 E_Comp_Win_Class_Type ctype = E_COMP_WIN_CLASS_TYPE_UNKNOWN;
205 E_Comp_Win_Name_Type ntype = E_COMP_WIN_NAME_TYPE_UNKNOWN;
206 E_Comp_Win_Type res = E_COMP_WIN_TYPE_UNKNOWN;
207 E_Comp_Win_Class_Type *pctype = NULL;
208 E_Comp_Win_Name_Type *pntype = NULL;
209 char *clas = NULL, *name = NULL;
211 E_CHECK_RETURN(cw, 0);
215 wtype = cw->bd->client.netwm.type;
216 if (cw->bd->internal)
217 ecore_x_icccm_name_class_get(cw->bd->client.win, &name, &clas);
220 clas = (char *)cw->bd->client.icccm.class;
221 name = (char *)cw->bd->client.icccm.name;
225 ecore_x_icccm_name_class_get(cw->win, &name, &clas);
229 pctype = eina_hash_find(class_hash, clas);
230 if (pctype) ctype = *pctype;
234 pntype = eina_hash_find(names_hash, name);
235 if (pntype) ntype = *pntype;
240 case E_COMP_WIN_CLASS_TYPE_MENUSCREEN:
241 res = E_COMP_WIN_TYPE_MENUSCREEN;
243 case E_COMP_WIN_CLASS_TYPE_QUICKPANEL_BASE:
244 res = E_COMP_WIN_TYPE_QUICKPANEL_BASE;
246 case E_COMP_WIN_CLASS_TYPE_QUICKPANEL:
247 res = E_COMP_WIN_TYPE_QUICKPANEL;
249 case E_COMP_WIN_CLASS_TYPE_VIDEOCALL:
250 res = E_COMP_WIN_TYPE_VIDEOCALL;
252 case E_COMP_WIN_CLASS_TYPE_TASKMANAGER:
253 if (ntype == E_COMP_WIN_NAME_TYPE_TASKMANAGER)
254 res = E_COMP_WIN_TYPE_TASKMANAGER;
256 case E_COMP_WIN_CLASS_TYPE_LIVEMAGAZINE:
257 if ((ntype == E_COMP_WIN_NAME_TYPE_LIVEMAGAZINE) &&
258 (wtype == ECORE_X_WINDOW_TYPE_NORMAL))
259 res = E_COMP_WIN_TYPE_LIVEMAGAZINE;
261 case E_COMP_WIN_CLASS_TYPE_LOCKSCREEN:
262 if (ntype == E_COMP_WIN_NAME_TYPE_LOCKSCREEN)
263 res = E_COMP_WIN_TYPE_LOCKSCREEN;
265 case E_COMP_WIN_CLASS_TYPE_INDICATOR:
266 if ((ntype == E_COMP_WIN_NAME_TYPE_INDICATOR) &&
267 (wtype == ECORE_X_WINDOW_TYPE_DOCK))
268 res = E_COMP_WIN_TYPE_INDICATOR;
270 case E_COMP_WIN_CLASS_TYPE_TICKERNOTI:
271 if ((ntype == E_COMP_WIN_NAME_TYPE_TICKERNOTI) &&
272 (wtype == ECORE_X_WINDOW_TYPE_NOTIFICATION))
273 res = E_COMP_WIN_TYPE_TICKERNOTI;
275 case E_COMP_WIN_CLASS_TYPE_DEBUGGING_INFO:
276 res = E_COMP_WIN_TYPE_DEBUGGING_INFO;
278 case E_COMP_WIN_CLASS_TYPE_ISF:
279 if (wtype != ECORE_X_WINDOW_TYPE_UTILITY)
281 else if (ntype == E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD)
282 res = E_COMP_WIN_TYPE_ISF_KEYBOARD;
283 else if (ntype == E_COMP_WIN_NAME_TYPE_ISF_SUB)
284 res = E_COMP_WIN_TYPE_ISF_SUB;
286 case E_COMP_WIN_CLASS_TYPE_NORMAL:
287 if ((wtype == ECORE_X_WINDOW_TYPE_NORMAL) ||
288 (wtype == ECORE_X_WINDOW_TYPE_UNKNOWN))
289 res = E_COMP_WIN_TYPE_NORMAL;
291 case E_COMP_WIN_CLASS_TYPE_APPTRAY:
292 if (ntype == E_COMP_WIN_NAME_TYPE_APPTRAY)
293 res = E_COMP_WIN_TYPE_APPTRAY;
295 case E_COMP_WIN_CLASS_TYPE_MINI_APPTRAY:
296 if (ntype == E_COMP_WIN_NAME_TYPE_MINI_APPTRAY)
297 res = E_COMP_WIN_TYPE_MINI_APPTRAY;
299 case E_COMP_WIN_CLASS_TYPE_VOLUME:
300 if ((ntype == E_COMP_WIN_NAME_TYPE_VOLUME) &&
301 (wtype == ECORE_X_WINDOW_TYPE_NOTIFICATION))
302 res = E_COMP_WIN_TYPE_VOLUME;
304 case E_COMP_WIN_CLASS_TYPE_BACKGROUND:
305 if (ntype == E_COMP_WIN_NAME_TYPE_BACKGROUND)
306 res = E_COMP_WIN_TYPE_BACKGROUND;
308 case E_COMP_WIN_CLASS_TYPE_SETUP_WIZARD:
309 if (ntype == E_COMP_WIN_NAME_TYPE_SETUP_WIZARD)
310 res = E_COMP_WIN_TYPE_SETUP_WIZARD;
312 case E_COMP_WIN_CLASS_TYPE_TOAST:
313 if (ntype == E_COMP_WIN_NAME_TYPE_TOAST)
314 res = E_COMP_WIN_TYPE_TOAST;
320 if (res == E_COMP_WIN_TYPE_UNKNOWN)
321 res = _ecore_type_to_e_comp_type(wtype);
323 if (res == E_COMP_WIN_TYPE_DIALOG)
325 if (cw->bd && cw->bd->parent)
326 res = E_COMP_WIN_TYPE_APP_POPUP;
330 (cw->bd && cw->bd->internal))
332 if (name) E_FREE(name);
333 if (clas) E_FREE(clas);
341 e_mod_comp_win_type_get(E_Comp_Win *cw)
343 E_CHECK_RETURN(cw, E_COMP_WIN_TYPE_UNKNOWN);
348 e_mod_comp_win_type_handler_prop(Ecore_X_Event_Window_Property *ev)
351 E_CHECK_RETURN(ev, 0);
352 E_CHECK_RETURN(ev->win, 0);
354 cw = e_mod_comp_border_client_find(ev->win);
355 if (cw) return EINA_TRUE;
357 cw = e_mod_comp_win_find(ev->win);
358 E_CHECK_RETURN(cw, 0);
359 E_CHECK_RETURN((!cw->bd), 0);
361 e_mod_comp_win_type_setup(cw);
365 /* local subsystem functions */
366 static E_Comp_Win_Type
367 _ecore_type_to_e_comp_type(Ecore_X_Window_Type t)
369 E_Comp_Win_Type r = E_COMP_WIN_TYPE_UNKNOWN;
372 case ECORE_X_WINDOW_TYPE_NORMAL: r = E_COMP_WIN_TYPE_NORMAL; break;
373 case ECORE_X_WINDOW_TYPE_TOOLTIP: r = E_COMP_WIN_TYPE_TOOLTIP; break;
374 case ECORE_X_WINDOW_TYPE_COMBO: r = E_COMP_WIN_TYPE_COMBO; break;
375 case ECORE_X_WINDOW_TYPE_DND: r = E_COMP_WIN_TYPE_DND; break;
376 case ECORE_X_WINDOW_TYPE_DESKTOP: r = E_COMP_WIN_TYPE_DESKTOP; break;
377 case ECORE_X_WINDOW_TYPE_TOOLBAR: r = E_COMP_WIN_TYPE_TOOLBAR; break;
378 case ECORE_X_WINDOW_TYPE_MENU: r = E_COMP_WIN_TYPE_MENU; break;
379 case ECORE_X_WINDOW_TYPE_SPLASH: r = E_COMP_WIN_TYPE_SPLASH; break;
380 case ECORE_X_WINDOW_TYPE_DROPDOWN_MENU: r = E_COMP_WIN_TYPE_DROPDOWN_MENU; break;
381 case ECORE_X_WINDOW_TYPE_NOTIFICATION: r = E_COMP_WIN_TYPE_NOTIFICATION; break;
382 case ECORE_X_WINDOW_TYPE_UTILITY: r = E_COMP_WIN_TYPE_UTILITY; break;
383 case ECORE_X_WINDOW_TYPE_POPUP_MENU: r = E_COMP_WIN_TYPE_POPUP_MENU; break;
384 case ECORE_X_WINDOW_TYPE_DIALOG: r = E_COMP_WIN_TYPE_DIALOG; break;
386 r = E_COMP_WIN_TYPE_NORMAL;