#include "e_process_intern.h"
#include "e_policy_wl_display_intern.h"
#include "e_tizen_display_policy_intern.h"
+#include "e_policy_stack_intern.h"
+#include "e_policy_wl_intern.h"
#define ZONE_EC_DATA_KEY "E_Zone_Client"
return;
}
+EINTERN void
+e_policy_zone_evaluate(E_Policy_Zone *policy_zone, Eina_Bool *check_focus)
+{
+ E_Zone *zone;
+ E_Client *ec;
+
+ EINA_SAFETY_ON_NULL_RETURN(policy_zone);
+
+ // if no clients are managed, just return
+ if (!eina_hash_population(policy_zone->clients_hash))
+ return;
+
+ zone = policy_zone->zone;
+
+ TRACE_DS_BEGIN(CLIENT:IDLE BEFORE);
+
+ E_ZONE_CLIENT_FOREACH(zone, ec)
+ {
+ // pass 1 - eval0. fetch properties on new or on change and
+ // call hooks to decide what to do - maybe move/resize
+ if (ec->ignored || (!ec->changed)) continue;
+
+ e_policy_stack_transient_for_fetch(ec);
+ if (!e_client_hook_call(E_CLIENT_HOOK_EVAL_PRE_FETCH, ec)) continue;
+
+ /* FETCH is hooked by the compositor to get client hints */
+ if (!e_client_hook_call(E_CLIENT_HOOK_EVAL_FETCH, ec)) continue;
+
+ if (ec->new_client)
+ {
+ e_client_type_update(ec);
+ }
+
+ /* PRE_POST_FETCH calls e_remember apply for new client */
+ e_policy_wl_notification_level_fetch(ec);
+ if (!e_client_hook_call(E_CLIENT_HOOK_EVAL_PRE_POST_FETCH, ec)) continue;
+
+ e_policy_client_evaluation(ec);
+ if (!e_client_hook_call(E_CLIENT_HOOK_EVAL_POST_FETCH, ec)) continue;
+
+ if (!e_client_hook_call(E_CLIENT_HOOK_EVAL_PRE_FRAME_ASSIGN, ec)) continue;
+
+ e_client_hook_call(E_CLIENT_HOOK_EVAL_POST_FRAME_ASSIGN, ec);
+ }
+
+ // pass 2 - show and hide windows needing hide and eval (main eval)
+ E_ZONE_CLIENT_FOREACH(zone, ec)
+ {
+ if (e_object_is_del(E_OBJECT(ec))) continue;
+ if (ec->ignored)
+ {
+ // ignored client but needing eval (aux hint) such as remote surfaces
+ if (ec->changed)
+ {
+ E_Comp_Wl_Client_Data *cdata = e_client_cdata_get(ec);
+ if (cdata && cdata->first_commit)
+ e_client_aux_hint_eval(ec);
+ }
+ continue;
+ }
+
+ if (ec->changes.visible)
+ {
+ if (ec->visible)
+ {
+ if ((!ec->new_client) &&
+ (!ec->changes.pos) &&
+ (!ec->changes.size))
+ {
+ e_view_client_show(e_client_view_get(ec));
+ ec->changes.visible = !e_view_client_visible_get(e_client_view_get(ec));
+ }
+ }
+ else
+ {
+ e_view_client_hide(e_client_view_get(ec));
+ ec->changes.visible = 0;
+ }
+ }
+
+ if (ec->changed)
+ {
+ e_client_eval(ec);
+ e_comp_visibility_calculation_set(EINA_TRUE);
+ if (ec->changes.accepts_focus)
+ *check_focus = EINA_TRUE;
+ ec->changes.accepts_focus = 0;
+
+ if (e_client_focus_check_get(ec))
+ {
+ *check_focus = EINA_TRUE;
+ e_client_focus_check_set(ec, EINA_FALSE);
+ }
+ }
+
+ if ((ec->changes.visible) && (ec->visible) && (!ec->changed))
+ {
+ e_view_client_show(e_client_view_get(ec));
+ ec->changes.visible = !e_view_client_visible_get(e_client_view_get(ec));
+ ec->changed = ec->changes.visible;
+ e_comp_visibility_calculation_set(EINA_TRUE);
+ }
+ }
+
+ TRACE_DS_END();
+}
+