#include "e_view_client_intern.h"
#include "e_comp_canvas_intern.h"
#include "e_config_intern.h"
+#include "e_view_rect.h"
#include <tizen-launch-server-protocol.h>
E_Pixmap *ep; /* pixmap for launch screen client */
E_Client *ec; /* client for launch screen image */
Ecore_Timer *timeout; /* launch screen image hide timer */
+ E_View_Rect *input_blocker_rect; /* input consumer of launch screen */
Eina_Bool valid; /* validation check */
Eina_Bool replaced;
Eina_Bool set_view_listener;
struct wl_listener view_destroy_listener;
struct wl_listener view_hide_listener;
+ struct wl_listener view_show_listener;
};
typedef enum _Launch_Img_File_type
#define SPLASH_GROUP_NAME "effect"
#define SPLASH_CONFIG_CUSTOM_EFFECT_CALLEE "_CUSTOM_EFFECT_CALLEE_"
+static E_View_Rect *_tzlaunch_input_blocker_create(E_Tizen_Launch_Effect_Splash *splash);
+static void _tzlaunch_input_blocker_destroy(E_Tizen_Launch_Effect_Splash *splash);
+
static void
_e_tizen_launch_effect_type_unset(uint32_t pid)
{
if (tzlaunch_splash->set_view_listener)
{
+ e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_SHOW, &tzlaunch_splash->view_show_listener);
e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_HIDE, &tzlaunch_splash->view_hide_listener);
e_view_event_listener_del(tzlaunch_splash->view, E_VIEW_DESTROY, &tzlaunch_splash->view_destroy_listener);
tzlaunch_splash->set_view_listener = EINA_FALSE;
"Launchscreen hide | pid %d, replaced:%d, tzlaunch_pixmap:%p, ec_pixmap:%p",
ec, tzlaunch_splash->pid, tzlaunch_splash->replaced, tzlaunch_splash->ep, ec->pixmap);
+ if (tzlaunch_splash->input_blocker_rect)
+ {
+ _tzlaunch_input_blocker_destroy(tzlaunch_splash);
+ ELOGF("TZPOL", "Remove input blocker for launchscreen", ec);
+ tzlaunch_splash->input_blocker_rect = NULL;
+ }
+
if ((ec->pixmap) &&
(ec->pixmap == tzlaunch_splash->ep))
{
tzlaunch_splash = wl_container_of(listener, tzlaunch_splash, view_hide_listener);
}
+static void
+_launchscreen_splash_cb_view_show(struct wl_listener *listener, void *data)
+{
+ E_Tizen_Launch_Effect_Splash *tzlaunch_splash;
+ E_View *input_blocker_view;
+
+ tzlaunch_splash = wl_container_of(listener, tzlaunch_splash, view_show_listener);
+
+ if (tzlaunch_splash->input_blocker_rect)
+ {
+ input_blocker_view = e_view_rect_view_get(tzlaunch_splash->input_blocker_rect);
+ ELOGF("TZPOL", "Raise input blocker for launchscreen", tzlaunch_splash->ec);
+ e_view_show(input_blocker_view);
+ e_view_raise_to_top(input_blocker_view);
+ }
+}
+
static Eina_Bool
_launchscreen_splash_timeout(void *data)
{
view_client = e_client_view_get(ec);
parent_view_tree = e_view_parent_get(e_view_client_view_get(view_client));
+ e_comp_size_get(&comp_w, &comp_h);
if (splash->type == LAUNCH_IMG_FILE_TYPE_IMAGE)
{
return EINA_FALSE;
}
- e_comp_size_get(&comp_w, &comp_h);
e_view_image_fill_set(splash->view_image, 0, 0, comp_w, comp_h);
e_view_image_filled_set(splash->view_image, EINA_TRUE);
return EINA_FALSE;
}
- e_comp_size_get(&comp_w, &comp_h);
-
e_view_edje_geometry_set(splash->view_edje, 0, 0, comp_w, comp_h);
if (depth == 32)
ELOGF("TZPOL", "Launchscreen setup | set external_view_edje(%p)", ec, splash->view_edje);
}
+ if (splash->input_blocker_rect)
+ {
+ ELOGF("TZPOL", "Setup input blocker for launchscreen", ec);
+ e_view_position_set(e_view_rect_view_get(splash->input_blocker_rect), 0, 0);
+ e_view_rect_size_set(splash->input_blocker_rect, comp_w, comp_h);
+ e_view_freeze_events_set(e_view_rect_view_get(splash->input_blocker_rect), EINA_TRUE);
+ e_view_show(e_view_rect_view_get(splash->input_blocker_rect));
+ }
+
/* Post job of setup content_type */
//Parse extra config
splash->view_hide_listener.notify = _launchscreen_splash_cb_view_hide;
e_view_event_listener_add(splash->view, E_VIEW_HIDE, &splash->view_hide_listener);
+ splash->view_show_listener.notify = _launchscreen_splash_cb_view_show;
+ e_view_event_listener_add(splash->view, E_VIEW_SHOW, &splash->view_show_listener);
+
splash->set_view_listener = EINA_TRUE;
}
_tzlaunch_splash_iface_cb_launch_v2,
};
+static E_View_Rect *
+_tzlaunch_input_blocker_create(E_Tizen_Launch_Effect_Splash *splash)
+{
+ E_Client *ec;
+ E_View_Rect *input_blocker_rect;
+ E_View *input_blocker_view;
+ const int color[4] = {0, 0, 0, 0};
+
+ ec = splash->ec;
+
+ input_blocker_rect = e_view_rect_create(e_view_parent_get(e_view_client_view_get(e_client_view_get(ec))), ec->w, ec->h, color);
+ input_blocker_view = e_view_rect_view_get(input_blocker_rect);
+ e_view_name_set(input_blocker_view, "splash->input_blocker_rect");
+ e_view_position_set(input_blocker_view, ec->x, ec->y);
+ e_view_client_member_add(e_client_view_get(ec), input_blocker_view);
+
+ return input_blocker_rect;
+}
+
+static void
+_tzlaunch_input_blocker_destroy(E_Tizen_Launch_Effect_Splash *splash)
+{
+ E_Client *ec;
+ E_View *input_blocker_view;
+
+ if (!splash || !splash->input_blocker_rect) return;
+
+ ec = splash->ec;
+ input_blocker_view = e_view_rect_view_get(splash->input_blocker_rect);
+
+ e_view_hide(input_blocker_view);
+ e_view_destroy(input_blocker_view);
+
+ return;
+}
+
static E_Tizen_Launch_Effect_Splash *
_tzlaunch_splash_add(struct wl_resource *res_tzlaunch_effect, struct wl_resource *res_tzlaunch_splash)
{
e_client_icccm_name_set(tzlaunch_splash->ec, "Launchscreen");
tzlaunch_splash->ec->ignored = EINA_TRUE;
+ tzlaunch_splash->input_blocker_rect = _tzlaunch_input_blocker_create(tzlaunch_splash);
+ ELOGF("TZPOL", "Create input blocker for launchscreen", tzlaunch_splash->ec);
+
e_comp_launchscrn_ec_add(tzlaunch_splash->ec);
return tzlaunch_splash;
if (tzlaunch_splash)
{
ERR("Could not initialize launchscreen client");
+ if (tzlaunch_splash->input_blocker_rect)
+ _tzlaunch_input_blocker_destroy(tzlaunch_splash);
if (tzlaunch_splash->ep)
e_pixmap_win_id_del(tzlaunch_splash->ep);
if (tzlaunch_splash->ec)