/* local subsystem e_client_rotation related functions */
static void _e_client_rotation_list_remove(E_Client *ec);
-static Eina_Bool _e_client_rotation_zone_set(E_Zone *zone, E_Client *include_ec);
+static Eina_Bool _e_client_rotation_zone_set(E_Zone *zone, E_Client *include_ec, E_Client *exclude_ec);
static void _e_client_rotation_change_done(void);
static Eina_Bool _e_client_rotation_change_done_timeout(void *data);
static void _e_client_rotation_change_message_send(E_Client *ec);
{
WRN("Rotation Zone Set: Rotation Done(fail case): %s(%p)",
ec->icccm.name?:"", ec);
- _e_client_rotation_zone_set(ec->zone, ec);
+ _e_client_rotation_zone_set(ec->zone, ec, NULL);
}
// check angle change serial
/* TODO need to optimize */
static Eina_Bool
-_e_client_rotation_zone_set(E_Zone *zone, E_Client *include_ec)
+_e_client_rotation_zone_set(E_Zone *zone, E_Client *include_ec, E_Client *exclude_ec)
{
E_Client *ec;
Eina_List *target_list = NULL, *l;
E_CLIENT_REVERSE_FOREACH(ec)
{
if (ec->zone != zone) continue;
+ if (ec == exclude_ec) continue;
if ((ec != include_ec) && (!evas_object_visible_get(ec->frame))) continue;
if (e_object_is_del(E_OBJECT(ec))) continue;
if ((ec->comp_data) && (ec->comp_data->sub.data)) continue;
if ((!ev) || (!ev->zone)) return ECORE_CALLBACK_PASS_ON;
DBG("Rotation Zone Set: Rotation Change Begin");
- if (!_e_client_rotation_zone_set(ev->zone, NULL))
+ if (!_e_client_rotation_zone_set(ev->zone, NULL, NULL))
{
/* The WM will decide to cancel zone rotation at idle time.
* Because, the policy module can make list of rotation windows
else if ((evas_object_visible_get(ec->frame) && (ec->e.fetch.rot.need_rotation)))
{
DBG("Rotation Zone Set: Fetch Hint");
- _e_client_rotation_zone_set(ec->zone, NULL);
+ _e_client_rotation_zone_set(ec->zone, NULL, NULL);
}
if (ec->e.fetch.rot.need_rotation)
if (ec->e.state.rot.pending_show)
return EINA_FALSE;
- _e_client_rotation_zone_set(ec->zone, ec);
+ _e_client_rotation_zone_set(ec->zone, ec, NULL);
if (ec->changes.rotation)
{
EDBG(ec, "Postpone show: ang %d", ec->e.state.rot.ang.next);
// clear pending_show, because this window is hidden now.
ec->e.state.rot.pending_show = 0;
+ // for rotating ec in the force_update_list
+ _e_client_rotation_zone_set(ec->zone, NULL, ec);
+
return EINA_TRUE;
}