From 3c146fc8fce2db7fdbb3f1e035b2ecb99d032f05 Mon Sep 17 00:00:00 2001 From: Changyeon Lee Date: Wed, 7 Feb 2024 18:39:23 +0900 Subject: [PATCH] e_client: do not enable the transform core if the render update lock is set Change-Id: I404df3bb2da56260c7df9eb150b1b47649180634 --- src/bin/e_client.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 3951166..9ff62ad 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -149,6 +149,7 @@ static Eina_Bool comp_grabbed = EINA_FALSE; static Eina_List *handlers = NULL; static Eina_List *hooks = NULL; +static Eina_List *comp_hooks = NULL; static Ecore_Event_Handler *action_handler_mouse = NULL; static Ecore_Timer *action_timer = NULL; @@ -1976,8 +1977,15 @@ _e_client_stay_within_canvas_margin(E_Client *ec, int x, int y, int *new_x, int //////////////////////////////////////////////// static void -_e_client_transform_core_activate_set(E_Client *ec, Eina_Bool set) +_e_client_transform_core_activate_update(E_Client *ec) { + Eina_Bool set; + + if (evas_object_visible_get(ec->frame) && e_comp_object_render_update_lock_get(ec->frame)) + set = EINA_TRUE; + else + set = EINA_FALSE; + if (ec->transform_core.activate == set) return; ec->transform_core.activate = set; @@ -2012,7 +2020,7 @@ _e_client_cb_evas_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN ec->want_focus = ec->take_focus = 0; - _e_client_transform_core_activate_set(ec, EINA_FALSE); + _e_client_transform_core_activate_update(ec); if (ec->new_client) return; _e_client_event_hide(ec); @@ -2121,7 +2129,7 @@ _e_client_cb_evas_show(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UN if (e_object_is_del(data)) return; - _e_client_transform_core_activate_set(ec, EINA_TRUE); + _e_client_transform_core_activate_update(ec); _e_client_event_show(ec); EC_CHANGED(ec); @@ -2862,7 +2870,7 @@ _e_client_transform_core_vertices_apply(E_Client *ec, e_comp_object_map_set(obj, map); - if (ec->transform_core.activate) + if ((ec->transform_core.activate) || (!e_comp_object_render_update_lock_get(ec->frame))) e_comp_object_map_enable_set(obj, EINA_TRUE); else e_comp_object_map_enable_set(obj, EINA_FALSE); @@ -3067,6 +3075,25 @@ e_client_idler_before(Eina_Bool *check_focus) TRACE_DS_END(); } +static Eina_Bool +_e_client_cb_hook_comp_render_update_lock_set(void *data, E_Client *ec) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_TRUE); + + _e_client_transform_core_activate_update(ec); + + return EINA_TRUE; +} + +static Eina_Bool +_e_client_cb_hook_comp_render_update_lock_unset(void *data, E_Client *ec) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_TRUE); + + _e_client_transform_core_activate_update(ec); + + return EINA_TRUE; +} EINTERN Eina_Bool e_client_init(void) @@ -3076,6 +3103,8 @@ e_client_init(void) clients_hash[pix_id] = eina_hash_pointer_new(NULL); E_COMP_WL_HOOK_APPEND(hooks, E_COMP_WL_HOOK_SHELL_SURFACE_READY, _e_client_cb_hook_shell_surface_ready, NULL); + E_COMP_COMP_HOOK_APPEND(comp_hooks, E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET, _e_client_cb_hook_comp_render_update_lock_set, NULL); + E_COMP_COMP_HOOK_APPEND(comp_hooks, E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_UNSET, _e_client_cb_hook_comp_render_update_lock_unset, NULL); E_EVENT_CLIENT_ADD = ecore_event_type_new(); E_EVENT_CLIENT_REMOVE = ecore_event_type_new(); @@ -3115,6 +3144,7 @@ e_client_shutdown(void) E_FREE_FUNC(clients_hash[pix_id], eina_hash_free); E_FREE_LIST(hooks, e_comp_wl_hook_del); + E_FREE_LIST(comp_hooks, e_comp_object_hook_del); E_FREE_LIST(handlers, ecore_event_handler_del); } -- 2.7.4