e_policy_wl/e_service_launcher: support tizen_policy_set_appid 50/215150/2 submit/tizen/20191014.064156
authorMinJeong Kim <minjjj.kim@samsung.com>
Wed, 2 Oct 2019 04:31:23 +0000 (13:31 +0900)
committerMinJeong Kim <minjjj.kim@samsung.com>
Mon, 7 Oct 2019 08:17:41 +0000 (17:17 +0900)
Change-Id: I961bf49fa03ce58e9e27f570c482795301bf64da
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/bin/e_policy_wl.c
src/bin/services/e_service_launcher.c
src/bin/services/e_service_launcher.h

index 8537ea43f59c38345a7437ef579c09fb8ffd458b..30cc649fda0b1a2abe83a0371c281b85fe088640 100644 (file)
@@ -3301,6 +3301,21 @@ _tzpol_iface_cb_has_video(struct wl_client *client, struct wl_resource *res_tzpo
    ec->comp_data->has_video_client = has;
 }
 
+static void
+_tzpol_iface_cb_set_appid(struct wl_client *client, struct wl_resource *res_tzpol, uint32_t pid, const char *appid)
+{
+   E_Policy_Wl_Tzpol *tzpol;
+
+   tzpol = _e_policy_wl_tzpol_get(res_tzpol);
+   EINA_SAFETY_ON_NULL_RETURN(tzpol);
+
+   ELOGF("TZPOL", "Set appid(%s) pid(%d)", NULL, appid, pid);
+
+   /* TODO: deliver to appinfo */
+
+   e_service_launcher_appid_register(appid, pid);
+}
+
 // --------------------------------------------------------
 // tizen_policy_interface
 // --------------------------------------------------------
@@ -3345,6 +3360,7 @@ static const struct tizen_policy_interface _tzpol_iface =
    _tzpol_iface_cb_ack_conformant_region,
    _tzpol_iface_cb_destroy,
    _tzpol_iface_cb_has_video,
+   _tzpol_iface_cb_set_appid,
 };
 
 static void
index dacbbeac16e684e759b92ac7ad1e96925ebafc10..5679edf664f127b7715cb27c9d327063148d6f78 100644 (file)
@@ -818,10 +818,10 @@ _launcher_cb_launch(struct wl_client *client EINA_UNUSED,
      }
 
    lc->serial = serial;
+   lc->target.pid = pid;
 
-   if (pid > 0 )
+   if (pid >= 0 )
      {
-        lc->target.pid = pid;
         ecs = _launcher_clients_find_by_pid(pid);
         EINA_LIST_FOREACH(ecs, l, target_ec)
           {
@@ -907,10 +907,10 @@ _launcher_cb_launch_with_shared_widget(struct wl_client *client EINA_UNUSED,
 
    lc->with_swl = EINA_TRUE; /* set swl flag */
    lc->serial = serial;
+   lc->target.pid = pid;
 
-   if (pid > 0)
+   if (pid >= 0)
      {
-        lc->target.pid = pid;
         ecs = _launcher_clients_find_by_pid(pid);
         EINA_LIST_FOREACH(ecs, l, target_ec)
           {
@@ -1523,9 +1523,9 @@ _launcher_handler_cb_hook_intercept_show_helper(void *data, E_Client *ec)
          else if (ec == runner->ec) goto show_allow;  //show launcher
          break;
       case LAUNCHER_STATE_MONITORING:             //waiting creation of target window
-         if ((runner->target.pid > 0) &&
-             (ec->netwm.pid != runner->target.pid)) goto show_allow; //detect by pid
-         if ((runner->target.appid) && (runner->target.ec != ec)) goto show_allow; //detect by appid
+         if ((runner->target.pid >= 0) && (ec->netwm.pid != runner->target.pid)) goto show_allow; //detect by pid
+         if ((runner->target.appid) && (runner->target.ec) && (runner->target.ec != ec)) goto show_allow; //detect by appid
+         if ((runner->target.appid) && (runner->target.pid < 0) && (!runner->target.ec)) goto show_allow; //not enough info
          if (e_object_is_del(E_OBJECT(ec))) goto show_allow;
 
          if (runner->with_swl)
@@ -1916,3 +1916,24 @@ e_service_launcher_callee_register(const char *appid, E_Client *callee)
           }
      }
 }
+
+EINTERN void
+e_service_launcher_appid_register(const char *appid, pid_t pid)
+{
+   E_Service_Launcher *runner;
+
+   runner = _launcher_handler_launcher_runner_get();
+   EINA_SAFETY_ON_NULL_RETURN(runner);
+   EINA_SAFETY_ON_TRUE_RETURN(runner->state != LAUNCHER_STATE_MONITORING);
+
+   if (runner->target.appid)
+     {
+        if (!e_util_strcmp(appid, runner->target.appid))
+          {
+             runner->target.pid = pid;
+
+             ELOGF("LAUNCHER_SRV", "Register callee pid:%d  by appid(%s)",
+                   runner->ec, pid, runner->target.appid);
+          }
+     }
+}
index b55df22836eb865128831d9090719a7e27d1ce1e..f20b706f9a67b5420066d5eae46bf90b4cf7f296 100644 (file)
@@ -9,6 +9,8 @@ EINTERN void              e_service_launcher_client_set(E_Client *ec);
 EINTERN void              e_service_launcher_client_unset(E_Client *ec);
 EINTERN void              e_service_launcher_prepare_send_with_shared_widget_info(E_Client *target_ec, const char *shared_widget_info, uint32_t state, uint32_t serial);
 EINTERN void              e_service_launcher_release_shared_widget_launch(E_Client *ec);
+
 EINTERN void              e_service_launcher_callee_register(const char *appid, E_Client *callee);
+EINTERN void              e_service_launcher_appid_register(const char *appid, pid_t pid);
 
 #endif