launch screen: added dummy ec and pixmap for E_Launch_Screen. 60/68160/3
authorDoyoun Kang <doyoun.kang@samsung.com>
Tue, 3 May 2016 00:37:13 +0000 (09:37 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Wed, 4 May 2016 05:20:10 +0000 (22:20 -0700)
For this patch, the below window of the launch screen can change
the visibility to fully obscured.

Change-Id: I3485dffa90805e209a0c08a89b7cdfe8cdfb3cae

src/bin/e_client.c
src/bin/e_comp.c
src/bin/e_comp.h
src/bin/e_info_server.c
src/bin/e_pixmap.c
src/bin/e_pixmap.h

index bada22903d470b0b93dc77160862e490ff72682b..2f8d9b42fbfafde4be6d600de94c9fdc1a738907 100644 (file)
@@ -2703,7 +2703,8 @@ _e_client_visibility_zone_calculate(E_Zone *zone)
           }
         else
           {
-             if (!evas_object_visible_get(ec->frame))
+             if ((!evas_object_visible_get(ec->frame)) &&
+                 (ec != e_comp->launchscrn->ec))
                {
                   if (cdata && !cdata->mapped)
                     {
index 661140a0eeb65cb5b63bc2b5fcc64d5188a9d3e9..25fe686826d8c6abad49071227afed41377269f5 100644 (file)
@@ -1155,7 +1155,13 @@ _e_comp_screensaver_off(void *data EINA_UNUSED, int type EINA_UNUSED, void *even
 static void
 _e_launchscreen_free(E_Launch_Screen *plscrn)
 {
-   if(plscrn->shobj) evas_object_del(plscrn->shobj);
+   if (plscrn->shobj)
+     evas_object_del(plscrn->shobj);
+   if (plscrn->ep)
+     e_pixmap_del(plscrn->ep);
+   if (plscrn->ec)
+     e_object_del(E_OBJECT(plscrn->ec));
+
    E_FREE(plscrn);
 }
 
@@ -1183,10 +1189,33 @@ _e_launchscreen_new(Ecore_Evas *ee)
    evas_object_resize(plscrn->shobj, e_comp->w, e_comp->h);
    evas_object_layer_set(plscrn->shobj, E_LAYER_CLIENT_TOP);
    edje_object_file_set(plscrn->shobj, conf->launch_file, "e/comp/effects/launch");
+
+   plscrn->ep = e_pixmap_new(E_PIXMAP_TYPE_NONE, 0);
+   EINA_SAFETY_ON_NULL_GOTO(plscrn->ep, error);
+   plscrn->ec = e_client_new(plscrn->ep, 0, 1);
+   EINA_SAFETY_ON_NULL_GOTO(plscrn->ec, error);
+
+   if (plscrn->ec->frame)
+     evas_object_resize(plscrn->ec->frame, plscrn->ec->zone->w, plscrn->ec->zone->h);
+
+   plscrn->ec->netwm.pid = getpid();
+   plscrn->ec->netwm.name = eina_stringshare_add("E-launch_screen");
+   plscrn->ec->ignored = EINA_TRUE;
+
    return plscrn;
 
 error:
    ERR("Could not initialize launchscreen");
+   if (plscrn)
+     {
+        if (plscrn->shobj)
+          evas_object_del(plscrn->shobj);
+        if (plscrn->ep)
+          e_pixmap_del(plscrn->ep);
+        if (plscrn->ec)
+          e_object_del(E_OBJECT(plscrn->ec));
+        E_FREE(plscrn);
+     }
    return NULL;
 }
 
index 54f52094067cb5ebbd49caaf0b78c77c4624d23b..076c65f9d941356a5ce12ce80ff2de2b2dfba280 100644 (file)
@@ -83,7 +83,9 @@ typedef struct E_Comp_Screen_Iface
 typedef struct _E_Launch_Screen
 {
    Evas_Object *shobj;
-   Ecore_Timer    *timeout;
+   E_Pixmap    *ep;
+   E_Client    *ec;
+   Ecore_Timer *timeout;
 } E_Launch_Screen;
 
 typedef struct _E_Comp_Hook E_Comp_Hook;
index 4dccce04e3b33f306d683e8264627a68fcbca008..cde8c32418f094b81c71e02d243fdbe396fc9f9d 100644 (file)
@@ -80,12 +80,17 @@ _msg_clients_append(Eldbus_Message_Iter *iter)
 
         if (ec->pixmap)
           res_id = e_pixmap_res_id_get(ec->pixmap);
+
+        pid = ec->netwm.pid;
 #ifdef HAVE_WAYLAND_ONLY
-        if (ec->comp_data)
+        if (pid <= 0)
           {
-             E_Comp_Wl_Client_Data *cdata = (E_Comp_Wl_Client_Data*)ec->comp_data;
-             if (cdata->surface)
-               wl_client_get_credentials(wl_resource_get_client(cdata->surface), &pid, NULL, NULL);
+             if (ec->comp_data)
+               {
+                  E_Comp_Wl_Client_Data *cdata = (E_Comp_Wl_Client_Data*)ec->comp_data;
+                  if (cdata->surface)
+                    wl_client_get_credentials(wl_resource_get_client(cdata->surface), &pid, NULL, NULL);
+               }
           }
 #endif
         if (e_comp->hwc)
index 9e943cfb390d3659969a0b82d0de473b9eb92990..343cb7adb65edbd012618be66cdd7e7d4835a80c 100644 (file)
@@ -9,11 +9,12 @@
 
 #include <uuid.h>
 
-static Eina_Hash *pixmaps[2] = {NULL};
-static Eina_Hash *deleted[2] = {NULL};
+static Eina_Hash *pixmaps[E_PIXMAP_TYPE_MAX] = {NULL};
+static Eina_Hash *deleted[E_PIXMAP_TYPE_MAX] = {NULL};
 static Eina_Hash *res_ids = NULL;
 static uint32_t res_id = 0;
-static Eina_Hash *aliases[2] = {NULL};
+static Eina_Hash *aliases[E_PIXMAP_TYPE_MAX] = {NULL};
+static uint32_t dummy_pixmap_id = 0;
 
 struct _E_Pixmap
 {
@@ -152,7 +153,7 @@ _e_pixmap_find(E_Pixmap_Type type, va_list *l)
    uintptr_t id;
    E_Pixmap *cp;
 
-   if (type != E_PIXMAP_TYPE_WL) return NULL;
+   if (type == E_PIXMAP_TYPE_X) return NULL;
    if (!pixmaps[type]) return NULL;
 
    id = va_arg(*l, uintptr_t);
@@ -184,7 +185,8 @@ E_API void
 e_pixmap_del(E_Pixmap *cp)
 {
    if (!cp) return;
-   if (cp->type != E_PIXMAP_TYPE_WL) return;
+   if (cp->type == E_PIXMAP_TYPE_X) return;
+
    if (eina_hash_find(pixmaps[cp->type], &cp->win))
      {
         eina_hash_del_by_key(pixmaps[cp->type], &cp->win);
@@ -196,7 +198,8 @@ E_API Eina_Bool
 e_pixmap_is_del(E_Pixmap *cp)
 {
    if (!cp) return 0;
-   if (cp->type != E_PIXMAP_TYPE_WL) return 0;
+   if (cp->type == E_PIXMAP_TYPE_X) return 0;
+
    return !!eina_hash_find(deleted[cp->type], &cp->win);
 }
 
@@ -215,12 +218,17 @@ e_pixmap_new(E_Pixmap_Type type, ...)
    va_list l;
    uintptr_t id;
 
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(type == E_PIXMAP_TYPE_WL, NULL);
+   EINA_SAFETY_ON_TRUE_RETURN_VAL(type == E_PIXMAP_TYPE_X, NULL);
 
    va_start(l, type);
 
    id = va_arg(l, uintptr_t);
 
+   if (type == E_PIXMAP_TYPE_NONE)
+     {
+        id = dummy_pixmap_id++;
+     }
+
    if (pixmaps[type])
      {
         cp = eina_hash_find(pixmaps[type], &id);
index 60acc64517ae4dcd665502038ed6806a8792ab08..7a7e10613e94ef17ea2ec27d2e785b8ad28b10fa 100644 (file)
@@ -7,6 +7,7 @@ typedef enum
    E_PIXMAP_TYPE_X,
    E_PIXMAP_TYPE_WL,
    E_PIXMAP_TYPE_NONE,
+   E_PIXMAP_TYPE_MAX
 } E_Pixmap_Type;
 
 #else