E_Hwc_Window_Target *target_hwc_window = NULL;
Eina_Bool transition = EINA_FALSE;
const Eina_List *l;
+ Eina_Bool display_state_changed = EINA_FALSE;
+ Eina_Bool client_to_none_transition = EINA_FALSE;
target_hwc_window = hwc->target_hwc_window;
EINA_SAFETY_ON_NULL_RETURN_VAL(target_hwc_window, EINA_FALSE);
{
if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT;
+
+ display_state_changed = EINA_TRUE;
}
/* DEVICE -> NONE */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE;
+
+ display_state_changed = EINA_TRUE;
}
/* CURSOR -> CLIENT */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
{
if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT;
+
+ display_state_changed = EINA_TRUE;
}
/* CURSOR -> NONE */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE;
+
+ display_state_changed = EINA_TRUE;
}
/* CLIENT -> DEVICE */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE;
+
+ display_state_changed = EINA_TRUE;
}
/* CLIENT -> CURSOR */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR;
+
+ display_state_changed = EINA_TRUE;
}
/* NONE -> DEVICE */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE;
+
+ display_state_changed = EINA_TRUE;
}
/* NONE -> CURSOR */
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
{
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR;
+
+ display_state_changed = EINA_TRUE;
+ }
+ /* CLIENT -> NONE */
+ else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
+ (hwc_window->state == E_HWC_WINDOW_STATE_NONE))
+ {
+ if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
+ window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE;
}
if (window_transition)
hwc_window->transition_failures++;
e_hwc_window_transition_set(hwc_window, window_transition);
+
+ if (window_transition == E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE)
+ {
+ client_to_none_transition = EINA_TRUE;
+ continue;
+ }
+
transition = EINA_TRUE;
}
}
+ if ((display_state_changed) && (client_to_none_transition))
+ transition = EINA_TRUE;
+
return transition;
}