1 #include "e_mod_move_shared_types.h"
2 #include "e_mod_move.h"
3 #include "e_mod_move_debug.h"
5 typedef enum _E_Move_Border_Class_Type
7 E_MOVE_BORDER_CLASS_TYPE_UNKNOWN = 0,
8 E_MOVE_BORDER_CLASS_TYPE_NORMAL,
9 E_MOVE_BORDER_CLASS_TYPE_MENUSCREEN,
10 E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL_BASE,
11 E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL,
12 E_MOVE_BORDER_CLASS_TYPE_TASKMANAGER,
13 E_MOVE_BORDER_CLASS_TYPE_LIVEMAGAZINE,
14 E_MOVE_BORDER_CLASS_TYPE_LOCKSCREEN,
15 E_MOVE_BORDER_CLASS_TYPE_INDICATOR,
16 E_MOVE_BORDER_CLASS_TYPE_APPTRAY,
17 E_MOVE_BORDER_CLASS_TYPE_MINI_APPTRAY,
18 E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD,
19 E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR,
20 E_MOVE_BORDER_CLASS_TYPE_PWLOCK,
21 E_MOVE_BORDER_CLASS_TYPE_BACKGROUND,
22 E_MOVE_BORDER_CLASS_TYPE_ISF,
23 } E_Move_Border_Class_Type;
25 typedef enum _E_Move_Border_Name_Type
27 E_MOVE_BORDER_NAME_TYPE_UNKNOWN = 0,
28 E_MOVE_BORDER_NAME_TYPE_NORMAL,
29 E_MOVE_BORDER_NAME_TYPE_MENUSCREEN,
30 E_MOVE_BORDER_NAME_TYPE_QUICKPANEL_BASE,
31 E_MOVE_BORDER_NAME_TYPE_QUICKPANEL,
32 E_MOVE_BORDER_NAME_TYPE_TASKMANAGER,
33 E_MOVE_BORDER_NAME_TYPE_LIVEMAGAZINE,
34 E_MOVE_BORDER_NAME_TYPE_LOCKSCREEN,
35 E_MOVE_BORDER_NAME_TYPE_INDICATOR,
36 E_MOVE_BORDER_NAME_TYPE_APPTRAY,
37 E_MOVE_BORDER_NAME_TYPE_MINI_APPTRAY,
38 E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD,
39 E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR,
40 E_MOVE_BORDER_NAME_TYPE_PWLOCK,
41 E_MOVE_BORDER_NAME_TYPE_BACKGROUND,
42 E_MOVE_BORDER_NAME_TYPE_ISF_KEYBOARD,
43 E_MOVE_BORDER_NAME_TYPE_ISF_SUB,
44 } E_Move_Border_Name_Type;
46 /* local subsystem functions */
47 static E_Move_Border_Type _ecore_type_to_e_move_type(Ecore_X_Window_Type t);
49 /* local subsystem globals */
50 static const char *border_class[] =
70 static const char *border_name[] =
73 "com.samsung.menu-screen",
87 // E_COMP_WIN_NAME_TYPE_ISF_KEYBOARD
89 // E_COMP_WIN_NAME_TYPE_ISF_SUB
96 static const char *type_names[] =
98 "E_MOVE_BORDER_TYPE_UNKNOWN",
99 "E_MOVE_BORDER_TYPE_DESKTOP",
100 "E_MOVE_BORDER_TYPE_DOCK",
101 "E_MOVE_BORDER_TYPE_TOOLBAR",
102 "E_MOVE_BORDER_TYPE_MENU",
103 "E_MOVE_BORDER_TYPE_UTILITY",
104 "E_MOVE_BORDER_TYPE_SPLASH",
105 "E_MOVE_BORDER_TYPE_DIALOG",
106 "E_MOVE_BORDER_TYPE_NORMAL",
107 "E_MOVE_BORDER_TYPE_DROPDOWN_MENU",
108 "E_MOVE_BORDER_TYPE_POPUP_MENU",
109 "E_MOVE_BORDER_TYPE_TOOLTIP",
110 "E_MOVE_BORDER_TYPE_NOTIFICATION",
111 "E_MOVE_BORDER_TYPE_COMBO",
112 "E_MOVE_BORDER_TYPE_DND",
113 "E_MOVE_BORDER_TYPE_MENUSCREEN",
114 "E_MOVE_BORDER_TYPE_QUICKPANEL_BASE",
115 "E_MOVE_BORDER_TYPE_QUICKPANEL",
116 "E_MOVE_BORDER_TYPE_TASKMANAGER",
117 "E_MOVE_BORDER_TYPE_LIVEMAGAZINE",
118 "E_MOVE_BORDER_TYPE_LOCKSCREEN",
119 "E_MOVE_BORDER_TYPE_INDICATOR",
120 "E_MOVE_BORDER_TYPE_APPTRAY",
121 "E_MOVE_BORDER_TYPE_MINI_APPTRAY",
122 "E_MOVE_BORDER_TYPE_SETUP_WIZARD",
123 "E_MOVE_BORDER_TYPE_PWLOCK",
124 "E_MOVE_BORDER_TYPE_BACKGROUND",
125 "E_MOVE_BORDER_TYPE_ISF_KEYBOARD",
126 "E_MOVE_BORDER_TYPE_ISF_SUB",
129 static E_Move_Border_Class_Type border_class_vals[] =
131 E_MOVE_BORDER_CLASS_TYPE_NORMAL,
132 E_MOVE_BORDER_CLASS_TYPE_MENUSCREEN,
133 E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL_BASE,
134 E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL,
135 E_MOVE_BORDER_CLASS_TYPE_TASKMANAGER,
136 E_MOVE_BORDER_CLASS_TYPE_LIVEMAGAZINE,
137 E_MOVE_BORDER_CLASS_TYPE_LOCKSCREEN,
138 E_MOVE_BORDER_CLASS_TYPE_INDICATOR,
139 E_MOVE_BORDER_CLASS_TYPE_APPTRAY,
140 E_MOVE_BORDER_CLASS_TYPE_MINI_APPTRAY,
141 E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD,
142 E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR,
143 E_MOVE_BORDER_CLASS_TYPE_PWLOCK,
144 E_MOVE_BORDER_CLASS_TYPE_BACKGROUND,
145 E_MOVE_BORDER_CLASS_TYPE_ISF
148 static E_Move_Border_Class_Type border_name_vals[] =
150 E_MOVE_BORDER_NAME_TYPE_NORMAL,
151 E_MOVE_BORDER_NAME_TYPE_MENUSCREEN,
152 E_MOVE_BORDER_NAME_TYPE_QUICKPANEL_BASE,
153 E_MOVE_BORDER_NAME_TYPE_QUICKPANEL,
154 E_MOVE_BORDER_NAME_TYPE_TASKMANAGER,
155 E_MOVE_BORDER_NAME_TYPE_LIVEMAGAZINE,
156 E_MOVE_BORDER_NAME_TYPE_LOCKSCREEN,
157 E_MOVE_BORDER_NAME_TYPE_INDICATOR,
158 E_MOVE_BORDER_NAME_TYPE_APPTRAY,
159 E_MOVE_BORDER_NAME_TYPE_MINI_APPTRAY,
160 E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD,
161 E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR,
162 E_MOVE_BORDER_NAME_TYPE_PWLOCK,
163 E_MOVE_BORDER_NAME_TYPE_BACKGROUND,
164 E_MOVE_BORDER_NAME_TYPE_ISF_KEYBOARD,
165 E_MOVE_BORDER_NAME_TYPE_ISF_SUB
168 static Eina_Hash *class_hash = NULL;
169 static Eina_Hash *names_hash = NULL;
170 static Eina_Hash *types_hash = NULL;
172 /* local subsystem functions */
173 static E_Move_Border_Type
174 _ecore_type_to_e_move_type(Ecore_X_Window_Type t)
176 E_Move_Border_Type r = E_MOVE_BORDER_TYPE_UNKNOWN;
179 case ECORE_X_WINDOW_TYPE_NORMAL: r = E_MOVE_BORDER_TYPE_NORMAL; break;
180 case ECORE_X_WINDOW_TYPE_TOOLTIP: r = E_MOVE_BORDER_TYPE_TOOLTIP; break;
181 case ECORE_X_WINDOW_TYPE_COMBO: r = E_MOVE_BORDER_TYPE_COMBO; break;
182 case ECORE_X_WINDOW_TYPE_DND: r = E_MOVE_BORDER_TYPE_DND; break;
183 case ECORE_X_WINDOW_TYPE_DESKTOP: r = E_MOVE_BORDER_TYPE_DESKTOP; break;
184 case ECORE_X_WINDOW_TYPE_TOOLBAR: r = E_MOVE_BORDER_TYPE_TOOLBAR; break;
185 case ECORE_X_WINDOW_TYPE_MENU: r = E_MOVE_BORDER_TYPE_MENU; break;
186 case ECORE_X_WINDOW_TYPE_SPLASH: r = E_MOVE_BORDER_TYPE_SPLASH; break;
187 case ECORE_X_WINDOW_TYPE_DROPDOWN_MENU: r = E_MOVE_BORDER_TYPE_DROPDOWN_MENU; break;
188 case ECORE_X_WINDOW_TYPE_NOTIFICATION: r = E_MOVE_BORDER_TYPE_NOTIFICATION; break;
189 case ECORE_X_WINDOW_TYPE_UTILITY: r = E_MOVE_BORDER_TYPE_UTILITY; break;
190 case ECORE_X_WINDOW_TYPE_POPUP_MENU: r = E_MOVE_BORDER_TYPE_POPUP_MENU; break;
191 case ECORE_X_WINDOW_TYPE_DIALOG: r = E_MOVE_BORDER_TYPE_DIALOG; break;
193 r = E_MOVE_BORDER_TYPE_NORMAL;
199 /* externally accessible functions */
201 e_mod_move_border_type_init(void)
204 char type_string[10];
205 if (!class_hash) class_hash = eina_hash_string_superfast_new(NULL);
206 if (!names_hash) names_hash = eina_hash_string_superfast_new(NULL);
207 if (!types_hash) types_hash = eina_hash_string_superfast_new(NULL);
209 n = (sizeof(border_class) / sizeof(char *));
210 for (i = 0; i < n; i++)
213 (class_hash, border_class[i],
214 &border_class_vals[i]);
217 n = (sizeof(border_name) / sizeof(char *));
218 for (i = 0; i < n; i++)
220 if (i >= E_MOVE_BORDER_NAME_TYPE_ISF_SUB)
223 (names_hash, border_name[i],
224 &border_name_vals[E_MOVE_BORDER_NAME_TYPE_ISF_SUB-1]);
230 border_name[i], &border_name_vals[i]);
234 for (i = E_MOVE_BORDER_TYPE_UNKNOWN; i < E_MOVE_BORDER_TYPE_ISF_SUB; i++)
236 memset(type_string, 0, sizeof(type_string));
237 snprintf(type_string, sizeof(type_string), "%d", i);
238 eina_hash_add(types_hash,
247 e_mod_move_border_type_shutdown(void)
249 if (class_hash) eina_hash_free(class_hash);
250 if (names_hash) eina_hash_free(names_hash);
251 if (types_hash) eina_hash_free(types_hash);
261 e_mod_move_border_type_setup(E_Move_Border *mb)
263 Ecore_X_Window_Type wtype = ECORE_X_WINDOW_TYPE_UNKNOWN;
264 E_Move_Border_Class_Type ctype = E_MOVE_BORDER_CLASS_TYPE_UNKNOWN;
265 E_Move_Border_Name_Type ntype = E_MOVE_BORDER_NAME_TYPE_UNKNOWN;
266 E_Move_Border_Type res = E_MOVE_BORDER_TYPE_UNKNOWN;
267 E_Move_Border_Class_Type *pctype = NULL;
268 E_Move_Border_Name_Type *pntype = NULL;
269 char *clas = NULL, *name = NULL;
271 E_CHECK_RETURN(mb, 0);
272 E_CHECK_RETURN(mb->bd, 0);
274 wtype = mb->bd->client.netwm.type;
275 if (mb->bd->internal)
276 ecore_x_icccm_name_class_get(mb->bd->client.win, &name, &clas);
279 clas = (char *)mb->bd->client.icccm.class;
280 name = (char *)mb->bd->client.icccm.name;
285 pctype = eina_hash_find(class_hash, clas);
286 if (pctype) ctype = *pctype;
290 pntype = eina_hash_find(names_hash, name);
291 if (pntype) ntype = *pntype;
296 case E_MOVE_BORDER_CLASS_TYPE_MENUSCREEN:
297 res = E_MOVE_BORDER_TYPE_MENUSCREEN;
299 case E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL_BASE:
300 res = E_MOVE_BORDER_TYPE_QUICKPANEL_BASE;
302 case E_MOVE_BORDER_CLASS_TYPE_QUICKPANEL:
303 res = E_MOVE_BORDER_TYPE_QUICKPANEL;
305 case E_MOVE_BORDER_CLASS_TYPE_TASKMANAGER:
306 if (ntype == E_MOVE_BORDER_NAME_TYPE_TASKMANAGER)
307 res = E_MOVE_BORDER_TYPE_TASKMANAGER;
309 case E_MOVE_BORDER_CLASS_TYPE_LIVEMAGAZINE:
310 if ((ntype == E_MOVE_BORDER_NAME_TYPE_LIVEMAGAZINE) &&
311 (wtype == ECORE_X_WINDOW_TYPE_NORMAL))
312 res = E_MOVE_BORDER_TYPE_LIVEMAGAZINE;
314 case E_MOVE_BORDER_CLASS_TYPE_LOCKSCREEN:
315 if (ntype == E_MOVE_BORDER_NAME_TYPE_LOCKSCREEN)
316 // if ((ntype == E_MOVE_BORDER_NAME_TYPE_LOCKSCREEN) &&
317 // (wtype == ECORE_X_WINDOW_TYPE_NOTIFICATION)) // net wm window type is chaged later. so it will be fixed.
318 res = E_MOVE_BORDER_TYPE_LOCKSCREEN;
320 case E_MOVE_BORDER_CLASS_TYPE_INDICATOR:
321 if ((ntype == E_MOVE_BORDER_NAME_TYPE_INDICATOR) &&
322 (wtype == ECORE_X_WINDOW_TYPE_DOCK))
323 res = E_MOVE_BORDER_TYPE_INDICATOR;
325 case E_MOVE_BORDER_CLASS_TYPE_ISF:
326 if (wtype != ECORE_X_WINDOW_TYPE_NORMAL)
328 else if (ntype == E_MOVE_BORDER_NAME_TYPE_ISF_KEYBOARD)
329 res = E_MOVE_BORDER_TYPE_ISF_KEYBOARD;
330 else if (ntype == E_MOVE_BORDER_NAME_TYPE_ISF_SUB)
331 res = E_MOVE_BORDER_TYPE_ISF_SUB;
333 case E_MOVE_BORDER_CLASS_TYPE_NORMAL:
334 if ((wtype == ECORE_X_WINDOW_TYPE_NORMAL) ||
335 (wtype == ECORE_X_WINDOW_TYPE_UNKNOWN))
336 res = E_MOVE_BORDER_TYPE_NORMAL;
338 case E_MOVE_BORDER_CLASS_TYPE_APPTRAY:
339 if (ntype == E_MOVE_BORDER_NAME_TYPE_APPTRAY)
340 res = E_MOVE_BORDER_TYPE_APPTRAY;
341 case E_MOVE_BORDER_CLASS_TYPE_MINI_APPTRAY:
342 if (ntype == E_MOVE_BORDER_NAME_TYPE_MINI_APPTRAY)
343 res = E_MOVE_BORDER_TYPE_MINI_APPTRAY;
344 case E_MOVE_BORDER_CLASS_TYPE_SETUP_WIZARD:
345 if (ntype == E_MOVE_BORDER_NAME_TYPE_SETUP_WIZARD)
346 res = E_MOVE_BORDER_TYPE_SETUP_WIZARD;
347 case E_MOVE_BORDER_CLASS_TYPE_APP_SELECTOR:
348 if (ntype == E_MOVE_BORDER_NAME_TYPE_APP_SELECTOR)
349 res = E_MOVE_BORDER_TYPE_APP_SELECTOR;
350 case E_MOVE_BORDER_CLASS_TYPE_PWLOCK:
351 if (ntype == E_MOVE_BORDER_NAME_TYPE_PWLOCK)
352 res = E_MOVE_BORDER_TYPE_PWLOCK;
353 case E_MOVE_BORDER_CLASS_TYPE_BACKGROUND:
354 if (ntype == E_MOVE_BORDER_NAME_TYPE_BACKGROUND)
355 res = E_MOVE_BORDER_TYPE_BACKGROUND;
361 if (res == E_MOVE_BORDER_TYPE_UNKNOWN)
362 res = _ecore_type_to_e_move_type(wtype);
364 if (mb->bd->internal)
366 if (name) E_FREE(name);
367 if (clas) E_FREE(clas);
374 EINTERN E_Move_Border_Type
375 e_mod_move_border_type_get(E_Move_Border *mb)
377 E_CHECK_RETURN(mb, E_MOVE_BORDER_TYPE_UNKNOWN);
382 e_mod_move_border_type_handler_prop(Ecore_X_Event_Window_Property *ev)
385 E_CHECK_RETURN(ev, 0);
386 E_CHECK_RETURN(ev->win, 0);
388 L(LT_EVENT_X, "[MOVE] %31s\n", "PROP_WM_CLASS");
390 mb = e_mod_move_border_client_find(ev->win);
391 if (mb) return EINA_TRUE;
393 e_mod_move_border_type_setup(mb);
398 e_mod_move_border_types_name_get(E_Move_Border_Type t)
400 char type_string[10];
401 memset(type_string, 0, sizeof(type_string));
402 snprintf(type_string, sizeof(type_string), "%d",t);
403 return eina_hash_find(types_hash,