{
E_Hwc_Window_Commit_Data *commit_data = NULL;
- if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR)
- {
+ if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR)
+ {
+ if (!hwc_window->cursor.buffer) return EINA_FALSE;
+ if ((hwc_window->cursor.buffer == hwc_window->display.buffer_ref.buffer) &&
+ (!memcmp(&hwc_window->info, &hwc_window->display.info, sizeof(tdm_hwc_window_info))))
+ return EINA_FALSE;
+
commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE);
+ memcpy(&commit_data->info, &hwc_window->info, sizeof(tdm_hwc_window_info));
e_comp_wl_buffer_reference(&commit_data->buffer_ref,
_e_hwc_window_comp_wl_buffer_get(hwc_window));
- }
- else if (hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE ||
- hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO)
+ }
+ else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) ||
+ (hwc_window->accepted_state == E_HWC_WINDOW_STATE_VIDEO))
{
if (!hwc_window->buffer.tsurface) return EINA_FALSE;
if ((hwc_window->buffer.tsurface == hwc_window->display.buffer.tsurface) &&
}
else
{
- if (!hwc_window->display.buffer.tsurface) return EINA_FALSE;
+ if (e_hwc_window_is_cursor(hwc_window))
+ {
+ if (!hwc_window->display.buffer_ref.buffer)
+ return EINA_FALSE;
+ }
+ else
+ {
+ if (!hwc_window->display.buffer.tsurface)
+ return EINA_FALSE;
+ }
commit_data = E_NEW(E_Hwc_Window_Commit_Data, 1);
EINA_SAFETY_ON_NULL_RETURN_VAL(commit_data, EINA_FALSE);
if (e_hwc_window_is_cursor(hwc_window))
{
+ if (hwc_window->commit_data->buffer_ref.buffer)
+ {
+ e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref,
+ hwc_window->commit_data->buffer_ref.buffer);
+ memcpy(&hwc_window->display.info, &hwc_window->commit_data->info, sizeof(tdm_hwc_window_info));
+ }
+ else
+ {
+ e_comp_wl_buffer_reference(&hwc_window->display.buffer_ref, NULL);
+ CLEAR(hwc_window->display.info);
+ }
+
e_comp_wl_buffer_reference(&hwc_window->commit_data->buffer_ref, NULL);
free(hwc_window->commit_data);
hwc_window->commit_data = NULL;