Eina_Bool transition = EINA_FALSE;
const Eina_List *l;
Eina_Bool display_state_changed = EINA_FALSE;
+ Eina_Bool target_window_changed = EINA_FALSE;
Eina_Bool client_to_none_transition = EINA_FALSE;
target_hwc_window = hwc->target_hwc_window;
if (hwc_window->transition_failures > target_hwc_window->max_transition_failures)
continue;
- /* if norender except video is pushed, buffer of target_window can't be updated */
- if (e_hwc_norender_get_except_video(hwc) <= 0)
+ if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
+ (((E_Hwc_Window *)target_hwc_window)->buffer.tsurface))
{
- if ((((E_Hwc_Window *)target_hwc_window)->display.buffer.tsurface) ==
- (((E_Hwc_Window *)target_hwc_window)->buffer.tsurface))
- return EINA_TRUE;
+ /* if norender except video is pushed, buffer of target_window can't be updated */
+ if (e_hwc_norender_get_except_video(hwc) <= 0)
+ transition = EINA_TRUE;
}
+ else
+ target_window_changed = EINA_TRUE;
/* DEVICE -> CLIENT */
if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
(hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT);
+
if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_CLIENT;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_DEVICE) &&
(hwc_window->state == E_HWC_WINDOW_STATE_NONE))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_DEVICE_TO_NONE;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
(hwc_window->state == E_HWC_WINDOW_STATE_CLIENT))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT);
+
if (!_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_FALSE))
window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_CLIENT;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CURSOR) &&
(hwc_window->state == E_HWC_WINDOW_STATE_NONE))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CURSOR_TO_NONE;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
(hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_DEVICE;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
(hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_CLIENT_TO_CURSOR;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
(hwc_window->state == E_HWC_WINDOW_STATE_DEVICE))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_DEVICE;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_NONE) &&
(hwc_window->state == E_HWC_WINDOW_STATE_CURSOR))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR);
+
if (_e_hwc_windows_target_window_rendered_window_has(hwc, hwc_window, EINA_TRUE))
window_transition = E_HWC_WINDOW_TRANSITION_NONE_TO_CURSOR;
else if ((hwc_window->accepted_state == E_HWC_WINDOW_STATE_CLIENT) &&
(hwc_window->state == E_HWC_WINDOW_STATE_NONE))
{
+ e_hwc_window_transition_set(hwc_window, E_HWC_WINDOW_TRANSITION_CLIENT_TO_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 (target_window_changed)
+ hwc_window->transition_failures++;
if (window_transition == E_HWC_WINDOW_TRANSITION_CLIENT_TO_NONE)
{