EINTERN Eina_Bool
e_appinfo_pid_set(E_Appinfo *eai, pid_t pid)
{
+ E_Appinfo *eai2;
+ Eina_List *l, *ll;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(eai, EINA_FALSE);
EINA_SAFETY_ON_TRUE_RETURN_VAL(pid <= 0, EINA_FALSE);
+ // find appinfo with same pid
+ EINA_LIST_FOREACH_SAFE(appinfo_list, l, ll, eai2)
+ {
+ if (eai2->pid == pid)
+ {
+ if (eai2 != eai)
+ {
+ ELOGF("POL_APPINFO", "removed duplicated appinfo, eai1(%p), eai2(%p)", NULL, eai, eai2);
+ if (eai2->appid && e_util_strcmp(eai2->appid, eai->appid))
+ ELOGF("POL_APPINFO","duplicated appinfo with separated appid", NULL);
+
+ // duplicated appinfo. merge it!
+ if (!eai->appid) eai->appid = eina_stringshare_add(eai2->appid);
+ if (!eai->base_output_available && eai2->base_output_available)
+ {
+ ELOGF("POL_APPINFO", "copy base_output variable into appinfo, eai1(%p) <- eai2(%p)", NULL, eai, eai2);
+ eai->base_output_available = eai2->base_output_available;
+ eai->base_output_width = eai2->base_output_width;
+ eai->base_output_height = eai2->base_output_height;
+ }
+ e_appinfo_del(eai2);
+ }
+ }
+ }
+
eai->pid = pid;
ELOGF("POL_APPINFO", "appinfo(%p) set pid(%u)", NULL, eai, pid);
EINTERN Eina_Bool
e_appinfo_appid_set(E_Appinfo *eai, const char *appid)
{
+ E_Appinfo *eai2;
+ Eina_List *l;
+
EINA_SAFETY_ON_NULL_RETURN_VAL(eai, EINA_FALSE);
EINA_SAFETY_ON_NULL_RETURN_VAL(appid, EINA_FALSE);
+ // find appinfo with same appid
+ EINA_LIST_FOREACH(appinfo_list, l, eai2)
+ {
+ if (!e_util_strcmp(eai2->appid, appid))
+ {
+ if (eai2 != eai)
+ {
+ ELOGF("POL_APPINFO", "removed duplicated appinfo, eai1(%p), eai2(%p)", NULL, eai, eai2);
+ if ((eai2->pid > 0) && (eai2->pid != eai->pid))
+ ELOGF("POL_APPINFO", "duplicated appinfo with separated pid", NULL);
+
+ // duplicated appinfo. merge it!
+ if (!eai->pid) eai->pid = eai2->pid;
+ if (!eai->base_output_available && eai2->base_output_available)
+ {
+ ELOGF("POL_APPINFO", "copy base_output variable into appinfo, eai1(%p) <- eai2(%p)", NULL, eai, eai2);
+ eai->base_output_available = eai2->base_output_available;
+ eai->base_output_width = eai2->base_output_width;
+ eai->base_output_height = eai2->base_output_height;
+ }
+ e_appinfo_del(eai2);
+ }
+ }
+ }
+
if (eai->appid)
eina_stringshare_del(eai->appid);