fixed to show default window effect for the w-home main window when home key is pressed. 76/232576/1 accepted/tizen/5.5/unified/20200507.152353 submit/tizen_5.5/20200506.112709
authorGwanglim Lee <gl77.lee@samsung.com>
Wed, 6 May 2020 11:03:48 +0000 (20:03 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 6 May 2020 11:21:57 +0000 (20:21 +0900)
Change-Id: I7e23da350d3fa28fa502f1241f5904b816eb0775

src/bin/e_client.c
src/bin/e_keyrouter_events.c
src/bin/services/e_service_launcher.c
src/bin/services/e_service_launcher.h

index 23369a755ed087ca20a75c13703f6b7a8b26ece3..076b5a5bb80841f5175a5276c742196943272b41 100644 (file)
@@ -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)
index 50f36e790f66741eeac424330b8291f9786cdabe..764cb6418b405a5234da02583a21936b626f9681 100644 (file)
@@ -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);
           }
index 08313dad0c238b5dc5711efd571936ff8c30e653..8a7d044c8b7aee250cd3bfce972989d2379344df 100644 (file)
@@ -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);
+}
index abd4d399a5a7c890e1bba27aa9eb43ca75d7517d..3e0a2318177d7f388679afc41005c08a86b0dbef 100644 (file)
@@ -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