ec->indicator.opacity_mode = TIZEN_INDICATOR_OPACITY_MODE_BG_TRANSPARENT;
}
+ // Parse extra config for launcher_service
+ if ((extra_config) && (extra_config->size))
+ {
+ char *p_char;
+ int len = 0;
+ int size = extra_config->size;
+
+ while (size > 0)
+ {
+ p_char = extra_config->data + len;
+ len = strlen(p_char) + 1;
+ size -= len;
+
+ if (!e_util_strcmp(p_char, SPLASH_CONFIG_CUSTOM_EFFECT_CALLEE))
+ {
+ // parse next data(appid) from array
+ if (size > 0)
+ {
+ p_char = p_char + len;
+ len = strlen(p_char) + 1;
+ size -= len;
+
+ splash->appid = eina_stringshare_add(p_char);
+ splash->custom_effect_callee = EINA_TRUE;
+
+ ELOGF("TZPOL",
+ "Launchscreen setup | custom effect callee set appid(%s)",
+ ec, splash->appid);
+ }
+ splash->valid = EINA_TRUE;
+ return EINA_TRUE;
+ }
+ }
+ }
+
intercepted = e_policy_interceptor_call(E_POLICY_INTERCEPT_LAUNCHSCREEN_OBJECT_SETUP,
ec,
pfname, ftype, depth,
/* Post job of setup content_type */
- //Parse extra config
- if ((extra_config) && (extra_config->size))
- {
- char *p_char;
- int len = 0;
- int size = extra_config->size;
-
- while (size > 0)
- {
- p_char = extra_config->data + len;
- len = strlen(p_char) + 1;
- size -= len;
-
- if (!e_util_strcmp(p_char, SPLASH_CONFIG_CUSTOM_EFFECT_CALLEE))
- {
- //parse next data(appid) from array
- if (size > 0)
- {
- p_char = p_char + len;
- len = strlen(p_char) + 1;
- size -= len;
-
- splash->appid = eina_stringshare_add(p_char);
- splash->custom_effect_callee = EINA_TRUE;
-
- ELOGF("TZPOL",
- "Launchscreen setup | custom effect callee set appid(%s)",
- ec, splash->appid);
- }
- else break;
- }
- }
- }
-
//Setup indicator
if (indicator)
{
eina_list_free(clients);
old_ec = tzlaunch_splash->ec;
+
+ if (tzlaunch_splash->custom_effect_callee)
+ {
+ old_ec->ignored = EINA_FALSE;
+ old_ec->visible = EINA_TRUE;
+ if (old_ec->new_client)
+ e_comp->new_clients--;
+ old_ec->new_client = EINA_FALSE;
+ old_ec->icccm.accepts_focus = EINA_TRUE;
+
+ if (new_ec)
+ e_service_launcher_callee_register(new_ec, pid, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME);
+ else
+ e_service_launcher_callee_register(old_ec, pid, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME);
+
+ if (tzlaunch_splash->timeout)
+ {
+ ecore_timer_del(tzlaunch_splash->timeout);
+ tzlaunch_splash->timeout = NULL;
+ }
+ if (!e_config->launchscreen_without_timer)
+ tzlaunch_splash->timeout = ecore_timer_add(e_config->launchscreen_timeout, _launchscreen_splash_timeout, tzlaunch_splash);
+
+ ELOGF("TZPOL", "Launchscreen img(%d) set owner pid: %d new_ec:%p old_ec:%p",
+ tzlaunch_splash->ec,
+ wl_resource_get_id(res_tzlaunch_splash), pid, new_ec, old_ec);
+
+ tzlaunch_splash->pid = pid;
+ tzlaunch_splash->ec->netwm.pid = pid;
+ tzlaunch_splash->ec->use_splash = EINA_TRUE;
+
+ return;
+ }
+
if (new_ec)
{
if (e_comp_object_content_set(new_ec->frame,
e_comp->launchscrns = eina_list_append(e_comp->launchscrns, new_ec);
- if (tzlaunch_splash->custom_effect_callee)
- {
- e_service_launcher_callee_register(new_ec, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME);
- }
-
evas_object_show(new_ec->frame);
e_client_raise(new_ec);
old_ec->new_client = EINA_FALSE;
old_ec->icccm.accepts_focus = EINA_TRUE;
- if (tzlaunch_splash->custom_effect_callee)
- {
- e_service_launcher_callee_register(old_ec, tzlaunch_splash->appid, tzlaunch_splash->path, SPLASH_GROUP_NAME);
- }
-
evas_object_show(old_ec->frame);
e_client_raise(old_ec);
}
wl_array_init(&info_array);
if (lc->direction == TWS_SERVICE_LAUNCHER_DIRECTION_FORWARD)
{
- content_type = e_comp_object_content_type_get(target_ec->frame);
- switch (content_type)
+ if (lc->target.splash_path)
{
- case E_COMP_OBJECT_CONTENT_TYPE_EXT_IMAGE:
- content = e_comp_object_content_get(target_ec->frame);
- EINA_SAFETY_ON_NULL_GOTO(content, fail);
+ target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_EDJE;
+ target_path = lc->target.splash_path;
+ target_group = lc->target.splash_group;
- target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_IMAGE;
- evas_object_image_file_get(content, &target_path, NULL);
- EINA_SAFETY_ON_NULL_GOTO(target_path, fail);
+ len = strlen(target_path) + 1;
+ p_char = wl_array_add(&info_array, len);
+ EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
- len = strlen(target_path) + 1;
- p_char = wl_array_add(&info_array, len);
- EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
+ strncpy(p_char, target_path, len);
- strncpy(p_char, target_path, len);
- break;
- case E_COMP_OBJECT_CONTENT_TYPE_EXT_EDJE:
- content = e_comp_object_content_get(target_ec->frame);
- EINA_SAFETY_ON_NULL_GOTO(content, fail);
+ len = strlen(target_group) + 1;
+ p_char = wl_array_add(&info_array, len);
+ EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
- target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_EDJE;
- target_path = lc->target.splash_path;
- target_group = lc->target.splash_group;
- if ((!target_path) || (!target_group))
- edje_object_file_get(content, &target_path, &target_group);
- EINA_SAFETY_ON_NULL_GOTO(target_path, fail);
- EINA_SAFETY_ON_NULL_GOTO(target_group, fail);
+ strncpy(p_char, target_group, len);
+ }
+ else
+ {
+ content_type = e_comp_object_content_type_get(target_ec->frame);
+ switch (content_type)
+ {
+ case E_COMP_OBJECT_CONTENT_TYPE_EXT_IMAGE:
+ content = e_comp_object_content_get(target_ec->frame);
+ EINA_SAFETY_ON_NULL_GOTO(content, fail);
- len = strlen(target_path) + 1;
- p_char = wl_array_add(&info_array, len);
- EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
+ target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_IMAGE;
+ evas_object_image_file_get(content, &target_path, NULL);
+ EINA_SAFETY_ON_NULL_GOTO(target_path, fail);
- strncpy(p_char, target_path, len);
+ len = strlen(target_path) + 1;
+ p_char = wl_array_add(&info_array, len);
+ EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
- len = strlen(target_group) + 1;
- p_char = wl_array_add(&info_array, len);
- EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
+ strncpy(p_char, target_path, len);
+ break;
+ case E_COMP_OBJECT_CONTENT_TYPE_EXT_EDJE:
+ content = e_comp_object_content_get(target_ec->frame);
+ EINA_SAFETY_ON_NULL_GOTO(content, fail);
- strncpy(p_char, target_group, len);
+ target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_EDJE;
+ target_path = lc->target.splash_path;
+ target_group = lc->target.splash_group;
+ if ((!target_path) || (!target_group))
+ edje_object_file_get(content, &target_path, &target_group);
+ EINA_SAFETY_ON_NULL_GOTO(target_path, fail);
+ EINA_SAFETY_ON_NULL_GOTO(target_group, fail);
- break;
- default:
- target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_REMOTE_SURFACE;
- res_id = e_pixmap_res_id_get(target_ec->pixmap);
+ len = strlen(target_path) + 1;
+ p_char = wl_array_add(&info_array, len);
+ EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
+
+ strncpy(p_char, target_path, len);
+
+ len = strlen(target_group) + 1;
+ p_char = wl_array_add(&info_array, len);
+ EINA_SAFETY_ON_NULL_GOTO(p_char, fail);
- p_u32 = wl_array_add(&info_array, sizeof(uint32_t));
- EINA_SAFETY_ON_NULL_GOTO(p_u32, fail);
+ strncpy(p_char, target_group, len);
- *p_u32 = res_id;
+ break;
+ default:
+ target_type = TWS_SERVICE_LAUNCHER_TARGET_TYPE_REMOTE_SURFACE;
+ res_id = e_pixmap_res_id_get(target_ec->pixmap);
+
+ p_u32 = wl_array_add(&info_array, sizeof(uint32_t));
+ EINA_SAFETY_ON_NULL_GOTO(p_u32, fail);
+
+ *p_u32 = res_id;
+ }
}
}
else
}
}
+static void
+_do_launch_splash_image(E_Service_Launcher *lc)
+{
+ E_Service_Launcher *pre_runner;
+ Eina_Bool sent = EINA_FALSE;
+
+ ELOGF("LAUNCHER_SRV", "Splash launching callee pid:%d appid(%s)",
+ lc->ec, lc->target.pid, lc->target.appid);
+
+ EINA_SAFETY_ON_TRUE_RETURN(lc->ec->visibility.obscured == E_VISIBILITY_FULLY_OBSCURED);
+ EINA_SAFETY_ON_FALSE_RETURN(lc->target.pid >= 0);
+
+ pre_runner = _launcher_handler_launcher_pre_runner_get();
+ if (pre_runner == lc)
+ {
+ _launcher_handler_launcher_pre_runner_set(NULL);
+ _launcher_launched_ec_set(lc, NULL);
+ }
+
+ lc->serial = wl_display_next_serial(e_comp_wl->wl.disp);
+
+ ELOGF("LAUNCHER_SRV", "target_ec:%p", lc->ec, lc->target.ec);
+
+ sent = _launcher_prepare_forward_send(lc, lc->target.ec);
+ EINA_SAFETY_ON_FALSE_RETURN(sent);
+
+ _launcher_state_set(lc, LAUNCHER_STATE_PREPARING);
+ _launcher_handler_launcher_runner_set(lc);
+
+ return;
+}
+
EINTERN void
-e_service_launcher_callee_register(E_Client *callee, const char *appid, const char *splash_path, const char *splash_group)
+e_service_launcher_callee_register(E_Client *callee, pid_t pid, const char *appid, const char *splash_path, const char *splash_group)
{
E_Service_Launcher *runner;
if (!e_util_strcmp(appid, runner->target.appid))
{
runner->target.ec = callee;
+ runner->target.pid = pid;
runner->target.splash_path = eina_stringshare_add(splash_path);
runner->target.splash_group = eina_stringshare_add(splash_group);
- ELOGF("LAUNCHER_SRV", "Register callee(%p) by appid(%s)",
- runner->ec, runner->target.ec, runner->target.appid);
+ ELOGF("LAUNCHER_SRV", "Register callee(%p) by appid(%s) path:%s launch splash image",
+ runner->ec, runner->target.ec, runner->target.appid, runner->target.splash_path);
+
+ if (runner->target.ec)
+ _do_launch_splash_image(runner);
}
}
}