}
///////////////////////////////////////
+static Eina_Bool
+_e_client_is_parent_iconify_by_client(E_Client *ec)
+{
+ E_Client *parent = ec->parent;
+ if (!parent) return EINA_FALSE;
+ if ((parent->exp_iconify.type == E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT) ||
+ (parent->exp_iconify.type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT))
+ return EINA_TRUE;
+
+ return EINA_FALSE;
+}
E_API void
e_client_iconify(E_Client *ec)
Eina_List *list = eina_list_clone(ec->transients);
EINA_LIST_FREE(list, child)
- e_client_iconify(child);
+ {
+ if ((child->exp_iconify.type != E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT) &&
+ (_e_client_is_parent_iconify_by_client(child)))
+ {
+ e_client_iconified_type_set(child, E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT);
+ child->exp_iconify.by_client = 1;
+ e_policy_client_iconic_state_change_send(child, 1);
+ }
+ e_client_iconify(child);
+ }
}
_e_client_hook_call(E_CLIENT_HOOK_ICONIFY, ec);
e_client_desk_set(ec, desk);
not_raise = ec->exp_iconify.not_raise;
+ ec->exp_iconify.by_client = 0;
+ e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
+
if (e_config->transient.iconify)
{
E_Client *child;
{
if (e_client_transient_policy_get(child) == E_TRANSIENT_ABOVE)
{
+ if (child->exp_iconify.type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
+ e_policy_client_iconic_state_change_send(child, 0);
child->exp_iconify.not_raise = not_raise;
e_client_uniconify(child);
}
_e_client_hook_call(E_CLIENT_HOOK_UNICONIFY, ec);
ec->exp_iconify.not_raise = 0;
- ec->exp_iconify.by_client = 0;
- e_client_iconified_type_set(ec, E_ICONIFIED_TYPE_NONE);
TRACE_DS_END();
}
if (ec->exp_iconify.type == E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT)
return EINA_TRUE;
+ if (ec->exp_iconify.type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
+ return EINA_TRUE;
+
if (ec->exp_iconify.by_client)
{
ELOGF("POL", "CHECK. mismatch value. by_client:%d, type:%d", ec, ec->exp_iconify.by_client, ec->exp_iconify.type);
if (ec->iconic)
{
iconified_type = e_client_iconified_type_get(ec);
- if (iconified_type == E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT)
- iconified = 2;
- else if (iconified_type == E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT)
- iconified = 3;
+ if (iconified_type == 0)
+ {
+ // if iconified_type is 0, then there is code not to set iconify_type
+ // before calling e_client_iconify. We have to find and fix it.
+ iconified = -1;
+ }
else
- iconified = 1;
+ iconified = iconified_type;
}
else
iconified = 0;
if (ec->iconic)
{
iconified_type = e_client_iconified_type_get(ec);
- if (iconified_type == E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT)
- iconified = 2;
- else if (iconified_type == E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT)
- iconified = 3;
+ if (iconified_type == 0)
+ {
+ // if iconified_type is 0, then there is code not to set iconify_type
+ // before calling e_client_iconify. We have to find and fix it.
+ iconified = -1;
+ }
else
- iconified = 1;
+ iconified = iconified_type;
}
else
iconified = 0;
else if (ec->show_pending.count > 0)
{
calc_region = EINA_FALSE;
- calc_skip_type |= 0x40;
+ calc_skip_type |= 0x100;
skip_by_pending_show = 2;
}
else
if (iconified_type == E_ICONIFIED_TYPE_ICONIFY_BY_CLIENT)
calc_skip_type |= 0x10;
else if (iconified_type == E_ICONIFIED_TYPE_DESK_ICONIFY_BY_CLIENT)
+ calc_skip_type |= 0x20;
+ else if (iconified_type == E_ICONIFIED_TYPE_PARENT_ICONIFY_BY_CLIENT)
calc_skip_type |= 0x40;
else
{
{
EC_IS_NOT_VISIBLE continue;
calc_region = EINA_FALSE;
- calc_skip_type |= 0x20;
+ calc_skip_type |= 0x200;
}
}
}