From: Gwanglim Lee Date: Wed, 6 May 2020 11:03:48 +0000 (+0900) Subject: fixed to show default window effect for the w-home main window when home key is pressed. X-Git-Tag: submit/tizen_5.5/20200506.112709^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=92d2579c2e8976a3307214512c4d25f9d11a67dd;p=platform%2Fupstream%2Fenlightenment.git fixed to show default window effect for the w-home main window when home key is pressed. Change-Id: I7e23da350d3fa28fa502f1241f5904b816eb0775 --- diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 23369a755e..076b5a5bb8 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -1,5 +1,9 @@ #include "e.h" +// workaround to show default window effect for the +// w-home main window when home key is pressed. +#include "services/e_service_launcher.h" + static int _e_client_hooks_delete = 0; static int _e_client_hooks_walking = 0; @@ -3495,6 +3499,10 @@ _e_client_visibility_zone_calculate(E_Zone *zone) if (!is_vis_on_skip) changed_list = eina_list_append(changed_list, ec); is_above_rot_pending |= skip_rot_pending_show; + + // workaround to show default window effect for the + // w-home main window when home key is pressed. + e_service_launcher_home_key_up_cleanup(ec); } if (changed_list) diff --git a/src/bin/e_keyrouter_events.c b/src/bin/e_keyrouter_events.c index 50f36e790f..764cb6418b 100644 --- a/src/bin/e_keyrouter_events.c +++ b/src/bin/e_keyrouter_events.c @@ -1,5 +1,9 @@ #include "e_keyrouter_private.h" +// workaround to show default window effect for the +// w-home main window when home key is pressed. +#include "services/e_service_launcher.h" + static void _e_keyrouter_send_key_events(int type, Ecore_Event_Key *ev); static void _e_keyrouter_send_key_events_press(int type, Ecore_Event_Key *ev); static void _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev); @@ -569,6 +573,17 @@ _e_keyrouter_send_key_events_release(int type, Ecore_Event_Key *ev) KLINF("Release Pair : %s(%s:%d)(Focus: %d)(Status: %d) => wl_surface (%p) wl_client (%p) (pid: %d) (pname: %s)", ((ECORE_EVENT_KEY_DOWN == type) ? "Down" : "Up"), ev->keyname, ev->keycode, key_node_data->focused, key_node_data->status, key_node_data->surface, key_node_data->wc, pid, pname ?: "Unknown"); + + // workaround to show default window effect for the + // w-home main window when home key is pressed. + if ((type == ECORE_EVENT_KEY_UP) && + (key_node_data->surface) && + !(e_util_strcmp(ev->keyname, "XF86PowerOff"))) + { + E_Client *_ec = wl_resource_get_user_data(key_node_data->surface); + if (_ec) e_service_launcher_home_key_up_handle(_ec); + } + if(pname) E_FREE(pname); if(cmd) E_FREE(cmd); } diff --git a/src/bin/services/e_service_launcher.c b/src/bin/services/e_service_launcher.c index 08313dad0c..8a7d044c8b 100644 --- a/src/bin/services/e_service_launcher.c +++ b/src/bin/services/e_service_launcher.c @@ -53,6 +53,9 @@ struct _E_Service_Launcher Eina_Bool swl_done; //flag indicating done of callee Eina_Bool block_input; //input is blocked(1) or not(0) while running client side animation + + Eina_Bool home_key_pressed; //workaround to show default window effect for the + //w-home main window when home key is pressed. }; struct _E_Service_Launcher_Handler @@ -1509,6 +1512,7 @@ _launcher_handler_cb_hook_vis_uniconify_render_running(void *data EINA_UNUSED, E E_Service_Launcher *runner, *pre_runner = NULL; E_Client *activity = NULL, *prov_ec = NULL; Launcher_State new_state; + Eina_Bool res = EINA_TRUE; EINA_SAFETY_ON_NULL_RETURN_VAL(ec, EINA_FALSE); @@ -1541,6 +1545,15 @@ _launcher_handler_cb_hook_vis_uniconify_render_running(void *data EINA_UNUSED, E ELOGF("LAUNCHER_SRV", "Current activity(%p, is_del:%d) was launched by launcher.", ec, activity, e_object_is_del(E_OBJECT(activity))); + // workaround to show default window effect for the + // w-home main window when home key is pressed. + if (lc->home_key_pressed) + { + ELOGF("LAUNCHER_SRV", "HomeKey was pressed. Ignore client-side launching effect. activity_ec:%p", ec, activity); + e_policy_animatable_lock(lc->launched_ec, E_POLICY_ANIMATABLE_CUSTOMIZED, 0); + goto finish; + } + //check state of lc runner = _launcher_handler_launcher_runner_get(); if (runner == lc) @@ -1548,7 +1561,7 @@ _launcher_handler_cb_hook_vis_uniconify_render_running(void *data EINA_UNUSED, E ELOGF("LAUNCHER_SRV", "Launcher(%s) is already runner, do nothing", lc->ec, _launcher_state_to_str(lc->state)); - return EINA_TRUE; + goto finish; } pre_runner = _launcher_handler_launcher_pre_runner_get(); @@ -1576,15 +1589,26 @@ _launcher_handler_cb_hook_vis_uniconify_render_running(void *data EINA_UNUSED, E new_state = LAUNCHER_STATE_PREPARING; } - - if (!sent) return EINA_FALSE; + if (!sent) + { + res = EINA_FALSE; + goto finish; + } _launcher_state_set(lc, new_state); _launcher_handler_launcher_runner_set(lc); } } - return EINA_TRUE; +finish: + // workaround to show default window effect for the + // w-home main window when home key is pressed. + if (lc->home_key_pressed) + { + lc->home_key_pressed = EINA_FALSE; + ELOGF("LAUNCHER_SRV", "HomeKey Pressed:1->0", ec); + } + return res; } static Eina_Bool @@ -2289,3 +2313,50 @@ e_service_launcher_callee_register(E_Client *callee, pid_t pid, const char *appi } } } + +// workaround to show default window effect for the +// w-home main window when home key is pressed. +EINTERN void +e_service_launcher_home_key_up_handle(E_Client *ec) +{ + E_Service_Launcher *lc, *pre_runner; + + if (!ec) return; + if (!e_policy_client_is_home_screen(ec)) return; + + lc = _launcher_handler_launcher_find(ec); + if (!lc) return; + + pre_runner = _launcher_handler_launcher_pre_runner_get(); + + ELOGF("LAUNCHER_SRV", "HomeKey Check launcher:%s pre_runner:%p", + ec, + lc == pre_runner ? "true" : "false", + pre_runner ? pre_runner->ec : NULL); + + if (pre_runner != lc) return; + if (lc->home_key_pressed) return; + + lc->home_key_pressed = EINA_TRUE; + + ELOGF("LAUNCHER_SRV", "HomeKey Pressed:0->1", ec); +} + +// workaround to show default window effect for the +// w-home main window when home key is pressed. +EINTERN void +e_service_launcher_home_key_up_cleanup(E_Client *ec) +{ + E_Service_Launcher *lc; + + if (!ec) return; + + lc = _launcher_handler_launcher_find(ec); + if (!lc) return; + + if (!lc->home_key_pressed) return; + + lc->home_key_pressed = EINA_FALSE; + + ELOGF("LAUNCHER_SRV", "HomeKey Pressed:1->0 VIS...", ec); +} diff --git a/src/bin/services/e_service_launcher.h b/src/bin/services/e_service_launcher.h index abd4d399a5..3e0a231817 100644 --- a/src/bin/services/e_service_launcher.h +++ b/src/bin/services/e_service_launcher.h @@ -13,4 +13,9 @@ EINTERN void e_service_launcher_release_shared_widget_launch(E_Clie EINTERN void e_service_launcher_callee_register(E_Client *callee, pid_t pid, const char *appid, const char *splash_path, const char *splash_group); EINTERN void e_service_launcher_appid_register(const char *appid, pid_t pid); +// workaround to show default window effect for the +// w-home main window when home key is pressed. +EINTERN void e_service_launcher_home_key_up_handle(E_Client *ec); +EINTERN void e_service_launcher_home_key_up_cleanup(E_Client *ec); + #endif