EINTERN void
e_comp_hwc_client_end(E_Client *ec, const char *location)
{
- E_Zone *zone;
- E_Output *output;
+ E_Zone *zone = NULL;
+ E_Output *output = NULL;
+ E_Hwc *hwc = NULL;
+ E_Hwc_Window *hwc_window = NULL;
EINA_SAFETY_ON_NULL_RETURN(ec);
output = e_output_find(zone->output_id);
EINA_SAFETY_ON_NULL_RETURN(output);
- e_hwc_planes_client_end(output->hwc, ec, location);
+ hwc = output->hwc;
+ EINA_SAFETY_ON_NULL_RETURN(hwc);
+
+ if (hwc->hwc_policy == E_HWC_POLICY_PLANES)
+ {
+ e_hwc_planes_client_end(output->hwc, ec, location);
+ }
+ else if (hwc->hwc_policy == E_HWC_POLICY_WINDOWS)
+ {
+ hwc_window = ec->hwc_window;
+ EINA_SAFETY_ON_NULL_RETURN(hwc_window);
+
+ e_hwc_window_client_type_override(hwc_window);
+ }
}
_e_hwc_window_buffer_set(&hwc_window->buffer, tsurface,queue);
}
+EINTERN void
+e_hwc_window_client_type_override(E_Hwc_Window *hwc_window)
+{
+ EINA_SAFETY_ON_NULL_RETURN(hwc_window);
+
+ if (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT) return;
+
+ e_hwc_window_device_state_available_update(hwc_window);
+ e_hwc_window_state_set(hwc_window, E_HWC_WINDOW_STATE_CLIENT, EINA_TRUE);
+ e_hwc_window_rendered_window_update(hwc_window);
+
+ EHWTRACE("set client override", hwc_window->ec, hwc_window);
+}
+
EINTERN const char*
e_hwc_window_state_string_get(E_Hwc_Window_State hwc_window_state)
{
EINTERN void e_hwc_window_name_set(E_Hwc_Window *hwc_window);
EINTERN Eina_Bool e_hwc_window_set_property(E_Hwc_Window *hwc_window, unsigned int id, const char *name, tdm_value value, Eina_Bool force);
EINTERN Eina_Bool e_hwc_window_get_property(E_Hwc_Window *hwc_window, unsigned int id, tdm_value *value);
+EINTERN void e_hwc_window_client_type_override(E_Hwc_Window *hwc_window);
EINTERN E_Hwc_Window_Hook *e_hwc_window_hook_add(E_Hwc_Window_Hook_Point hookpoint, E_Hwc_Window_Hook_Cb func, const void *data);
EINTERN void e_hwc_window_hook_del(E_Hwc_Window_Hook *ch);
hwc_window = ec->hwc_window;
if (!hwc_window) return;
- if (hwc_window->queue) return;
+ if ((hwc_window->queue) && (e_hwc_window_device_state_available_get(hwc_window)))
+ return;
comp_buffer = _comp_wl_buffer_get(ec);
if (!comp_buffer) return;