2 #include "e_mod_split_screen_manager_log.h"
3 #include "e_mod_split_screen_region.h"
4 #include "e_mod_appinfo_ext.h"
6 struct _E_Mod_Split_Screen_Region
11 Eina_Stringshare *name;
13 Eina_List *appid_list;
14 Eina_List *client_list;
17 /* e_mod_split_screen_region internal functions */
18 static E_Mod_Split_Screen_Region * _e_mod_split_screen_region_new(const char *name, int x, int y, int w, int h);
19 static void _e_mod_split_screen_region_del(E_Mod_Split_Screen_Region *emssr);
20 static void _e_mod_split_screen_region_appid_assign(E_Mod_Split_Screen_Region *emssr, const char *appid);
21 static void _e_mod_split_screen_region_appid_dismiss(E_Mod_Split_Screen_Region *emssr, const char *appid);
22 static Eina_Bool _e_mod_split_screen_region_ec_assign(E_Mod_Split_Screen_Region *emssr, E_Client *ec);
23 static Eina_Bool _e_mod_split_screen_region_ec_dismiss(E_Client *ec);
26 /* internal functions */
27 static E_Mod_Split_Screen_Region *
28 _e_mod_split_screen_region_new(const char *name, int x, int y, int w, int h)
31 E_Mod_Split_Screen_Region *emssr = NULL;
32 E_Desk_Area *eda = NULL;
34 emssr = E_NEW(E_Mod_Split_Screen_Region, 1);
35 if (!emssr) return NULL;
37 emssr->zone = e_zone_current_get();
39 desk = e_desk_current_get(emssr->zone);
40 EINA_SAFETY_ON_NULL_GOTO(desk, err);
43 emssr->name = eina_stringshare_add(name);
45 eda = e_desk_desk_area_add(desk, x, y, w, h, E_DESK_AREA_LAYER_NORMAL);
46 EINA_SAFETY_ON_NULL_GOTO(eda, err);
48 e_desk_area_transform_enable_set(eda, EINA_FALSE);
49 eda->name = eina_stringshare_add(name);
52 SSMINF("region added, desk_area:%p, name:%s, id:%d", NULL, emssr->eda, emssr->name, emssr->eda->id);
57 if (emssr) E_FREE(emssr);
63 _e_mod_split_screen_region_del(E_Mod_Split_Screen_Region *emssr)
65 emssr->is_del = EINA_TRUE;
66 e_desk_desk_area_disable(emssr->desk);
71 _e_mod_split_screen_region_appid_assign(E_Mod_Split_Screen_Region *emssr, const char *appid)
73 emssr->appid_list = eina_list_append(emssr->appid_list, appid);
77 _e_mod_split_screen_region_appid_dismiss(E_Mod_Split_Screen_Region *emssr, const char *appid)
79 Eina_Stringshare *appid2;
82 EINA_LIST_FOREACH_SAFE(emssr->appid_list, l, ll, appid2)
84 if (!e_util_strcmp(appid, appid2))
86 emssr->appid_list = eina_list_remove_list(emssr->appid_list, ll);
92 _e_mod_split_screen_region_ec_assign(E_Mod_Split_Screen_Region *emssr, E_Client *ec)
97 SSMINF("set to region: %s", ec, emssr->name);
99 e_client_desk_area_set(ec, emssr->eda);
101 if (ec->lock_client_size)
103 ec->maximized = E_MAXIMIZE_NONE;
104 e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH);
107 // control transient for childs
108 EINA_LIST_FOREACH(ec->transients, l, child_ec)
110 _e_mod_split_screen_region_ec_assign(emssr, child_ec);
116 _e_mod_split_screen_region_ec_dismiss(E_Client *ec)
121 SSMINF("unset ec from regions", ec);
123 e_client_desk_area_set(ec, NULL);
125 if (ec->lock_client_size)
127 ec->maximized = E_MAXIMIZE_NONE;
128 e_client_maximize(ec, E_MAXIMIZE_EXPAND | E_MAXIMIZE_BOTH);
131 // control transient for childs
132 EINA_LIST_FOREACH(ec->transients, l, child_ec)
134 _e_mod_split_screen_region_ec_dismiss(child_ec);
141 EINTERN E_Mod_Split_Screen_Region *
142 e_mod_split_screen_region_new(const char *name, int x, int y, int w, int h)
144 EINA_SAFETY_ON_NULL_RETURN_VAL(name, NULL);
146 return _e_mod_split_screen_region_new(name, x, y, w, h);
150 e_mod_split_screen_region_del(E_Mod_Split_Screen_Region *emssr)
152 EINA_SAFETY_ON_NULL_RETURN(emssr);
153 _e_mod_split_screen_region_del(emssr);
157 e_mod_split_screen_region_name_get(E_Mod_Split_Screen_Region *emssr)
159 EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, NULL);
164 e_mod_split_screen_region_desk_get(E_Mod_Split_Screen_Region *emssr)
166 EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, NULL);
170 EINTERN E_Desk_Area *
171 e_mod_split_screen_region_desk_area_get(E_Mod_Split_Screen_Region *emssr)
173 EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, NULL);
178 e_mod_split_screen_region_appid_assign(E_Mod_Split_Screen_Region *emssr, const char *appid)
180 EINA_SAFETY_ON_NULL_RETURN(emssr);
181 EINA_SAFETY_ON_NULL_RETURN(appid);
183 _e_mod_split_screen_region_appid_dismiss(emssr, appid);
184 _e_mod_split_screen_region_appid_assign(emssr, appid);
188 e_mod_split_screen_region_appid_dismiss(E_Mod_Split_Screen_Region *emssr, const char *appid)
190 EINA_SAFETY_ON_NULL_RETURN(emssr);
191 EINA_SAFETY_ON_NULL_RETURN(appid);
193 _e_mod_split_screen_region_appid_dismiss(emssr, appid);
197 e_mod_split_screen_region_appid_list_get(E_Mod_Split_Screen_Region *emssr)
199 EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, NULL);
200 return emssr->appid_list;
204 e_mod_split_screen_region_ec_assign(E_Mod_Split_Screen_Region *emssr, E_Client *ec)
206 EINA_SAFETY_ON_NULL_RETURN_VAL(emssr, EINA_FALSE);
207 EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
209 return _e_mod_split_screen_region_ec_assign(emssr, ec);
213 e_mod_split_screen_region_ec_dismiss(E_Client *ec)
215 EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE);
217 return _e_mod_split_screen_region_ec_dismiss(ec);