}
static E_Hwc_Mode
-_e_hwc_windows_hwc_mode_update(E_Hwc *hwc, int num_client, int num_device, int num_video)
+_e_hwc_windows_hwc_mode_update(E_Hwc *hwc, int num_client, int num_device, int num_cursor, int num_video)
{
E_Hwc_Mode hwc_mode = E_HWC_MODE_NONE;
int num_visible = hwc->num_visible_windows;
return hwc_mode;
}
- if (!num_visible || (!num_device && !num_video))
+ /* check ui windows */
+ if (!num_visible)
hwc_mode = E_HWC_MODE_NONE;
- else if (!num_client && (num_device || num_video))
+ else if (!num_device)
+ hwc_mode = E_HWC_MODE_NONE;
+ else if ((!num_client) && (num_device))
hwc_mode = E_HWC_MODE_FULL;
else
hwc_mode = E_HWC_MODE_HYBRID;
+ /* check video and cursor windows */
+ if ((num_video) || (num_cursor))
+ {
+ if (hwc_mode == E_HWC_MODE_NONE)
+ hwc_mode = E_HWC_MODE_HYBRID;
+ }
+
if (hwc->hwc_mode != hwc_mode)
{
if (hwc_mode == E_HWC_MODE_HYBRID || hwc_mode == E_HWC_MODE_NONE)
E_Hwc_Window *hwc_window = NULL;
const Eina_List *l;
uint32_t num_changes;
- int num_client = 0, num_device = 0, num_video = 0;
+ int num_client = 0, num_device = 0, num_video = 0, num_cursor = 0;
Eina_Bool ret = EINA_FALSE;
/* validate the visible hwc_windows' states*/
if (hwc_window->state == E_HWC_WINDOW_STATE_CLIENT) num_client++;
if (hwc_window->state == E_HWC_WINDOW_STATE_DEVICE) num_device++;
+ if (hwc_window->state == E_HWC_WINDOW_STATE_CURSOR) num_cursor++;
if (hwc_window->state == E_HWC_WINDOW_STATE_VIDEO) num_video++;
}
/* update the E_HWC_MODE */
- hwc_mode = _e_hwc_windows_hwc_mode_update(hwc, num_client, num_device, num_video);
+ hwc_mode = _e_hwc_windows_hwc_mode_update(hwc, num_client, num_device, num_cursor ,num_video);
/* set the state of the target_window */
if (hwc_mode == E_HWC_MODE_NONE)