}
}
+static void
+_e_policy_cb_hook_client_uniconify(void *d EINA_UNUSED, E_Client *ec)
+{
+ if (e_object_is_del(E_OBJECT(ec))) return;
+ if (!e_policy_wl_iconify_state_supported_get(ec))
+ {
+ ELOGF("TZPOL", "Force Update the client not supporting iconify state",
+ ec->pixmap, ec);
+
+ /* force render for an iconifed e_client having shm buffer not used yet*/
+ if ((e_pixmap_image_data_get(ec->pixmap)) &&
+ (!e_pixmap_dirty_get(ec->pixmap)))
+ {
+ e_comp_object_damage(ec->frame, 0, 0, ec->w, ec->h);
+ e_comp_object_dirty(ec->frame);
+ e_comp_object_render(ec->frame);
+ }
+ }
+}
+
static void
_e_policy_cb_hook_pixmap_del(void *data EINA_UNUSED, E_Pixmap *cp)
{
E_CLIENT_HOOK_APPEND(hooks_ec, E_CLIENT_HOOK_DESK_SET, _e_policy_cb_hook_client_desk_set, NULL);
E_CLIENT_HOOK_APPEND(hooks_ec, E_CLIENT_HOOK_FULLSCREEN_PRE, _e_policy_cb_hook_client_fullscreen_pre, NULL);
E_CLIENT_HOOK_APPEND(hooks_ec, E_CLIENT_HOOK_EVAL_VISIBILITY, _e_policy_cb_hook_client_visibility, NULL);
+ E_CLIENT_HOOK_APPEND(hooks_ec, E_CLIENT_HOOK_UNICONIFY, _e_policy_cb_hook_client_uniconify, NULL);
E_PIXMAP_HOOK_APPEND(hooks_cp, E_PIXMAP_HOOK_DEL, _e_policy_cb_hook_pixmap_del, NULL);
E_PIXMAP_HOOK_APPEND(hooks_cp, E_PIXMAP_HOOK_UNUSABLE, _e_policy_cb_hook_pixmap_unusable, NULL);
polwl->pending_vis = eina_list_append(polwl->pending_vis, ec);
}
+Eina_Bool
+e_policy_wl_iconify_state_supported_get(E_Client *ec)
+{
+ E_Policy_Wl_Tzpol *tzpol;
+ E_Policy_Wl_Surface *psurf;
+ E_Client *ec2;
+ Eina_List *l;
+ Eina_Iterator *it;
+ Eina_Bool found = EINA_FALSE;
+
+ it = eina_hash_iterator_data_new(polwl->tzpols);
+ EINA_ITERATOR_FOREACH(it, tzpol)
+ EINA_LIST_FOREACH(tzpol->psurfs, l, psurf)
+ {
+ ec2 = e_pixmap_client_get(psurf->cp);
+ if (ec2 == ec)
+ {
+ found = EINA_TRUE;
+ break;
+ }
+ }
+ eina_iterator_free(it);
+
+ return found;
+}
+
void
e_policy_wl_iconify_state_change_send(E_Client *ec, int iconic)
{