EOERR("e_hwc_planes_presentation_update fails.", output);
return EINA_FALSE;
}
+ EOINF("e_output_presentation_update done: E_OUTPUT_DISPLAY_MODE_PRESENTATION", output);
}
_e_output_display_mode_set(output, E_OUTPUT_DISPLAY_MODE_PRESENTATION);
output->external_set = EINA_TRUE;
- EOINF("e_output_presentation_update done: E_OUTPUT_DISPLAY_MODE_PRESENTATION", output);
return EINA_TRUE;
}
EINTERN void
e_output_presentation_unset(E_Output *output)
{
+ E_Output *primary_output;
+ E_Client *subc;
+ E_Comp_Wl_Client_Data *cdata;
+ E_Zone *zone;
E_Hwc *hwc;
+ Eina_List *l;
EINA_SAFETY_ON_FALSE_RETURN(output);
output->external_set = EINA_FALSE;
_e_output_display_mode_set(output, E_OUTPUT_DISPLAY_MODE_NONE);
- output->presentation_ec = NULL;
if (e_hwc_policy_get(hwc) == E_HWC_POLICY_PLANES)
- e_hwc_planes_presentation_update(hwc, NULL);
+ {
+ e_hwc_planes_presentation_update(hwc, NULL);
+ }
+ else
+ {
+ if (output->presentation_ec)
+ {
+ primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
+ EINA_SAFETY_ON_NULL_GOTO(primary_output, done);
+
+ zone = e_comp_zone_find(e_output_output_id_get(primary_output));
+ EINA_SAFETY_ON_NULL_RETURN(zone);
+
+ cdata = e_client_cdata_get(output->presentation_ec);
+ EINA_SAFETY_ON_NULL_RETURN(cdata);
+
+ e_client_zone_set(output->presentation_ec, zone);
+
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_client_zone_set(subc, zone);
+
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_client_zone_set(subc, zone);
+ }
+ }
+
+done:
+ output->presentation_ec = NULL;
}
EINTERN Eina_Bool
e_output_presentation_ec_set(E_Output *output, E_Client *ec)
{
+ E_Hwc *hwc;
+ E_Client *subc;
+ E_Zone *zone;
+ E_Comp_Wl_Client_Data *cdata;
+ Eina_List *l;
+
EINA_SAFETY_ON_FALSE_RETURN_VAL(output, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(output, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(ec, EINA_FALSE);
+
+ hwc = output->hwc;
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc, EINA_FALSE);
output->presentation_ec = ec;
+ zone = e_comp_zone_find(e_output_output_id_get(output));
+ EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+
+ cdata = e_client_cdata_get(ec);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(cdata, EINA_FALSE);
+
+ e_client_zone_set(ec, zone);
+
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_client_zone_set(subc, zone);
+
+ EINA_LIST_FOREACH(cdata->sub.list, l, subc)
+ e_client_zone_set(subc, zone);
+
return EINA_TRUE;
}