e_desk: zoom disorder on quickpanel window 09/158709/5
authorJuyeon Lee <juyeonne.lee@samsung.com>
Thu, 2 Nov 2017 12:54:08 +0000 (21:54 +0900)
committerJuyeon Lee <juyeonne.lee@samsung.com>
Tue, 7 Nov 2017 07:31:11 +0000 (07:31 +0000)
the quickpanel window client is not belong to any smart obj after boot
but, by below condition it became a smart obj member
1. of e_desk smart obj once quickpanel open/close execution done
2. of mover smart obj while dragging mover obj for quicpanel effect

desk-zoom should not be applied on the quickpanel if it belongs to smart obj
because its parent is e_desk smart obj and zoom is already set

Change-Id: Id4cd216934183209b180e0a324e45e0fafff0bb6

src/bin/e_desk.c
src/bin/services/e_service_quickpanel.c

index ae8827cc06d7b5db795b6dffa9ab92bc605d00ca..f62cc8fe0f13489cea76f9a9eeab0ab4eeaaf347 100644 (file)
@@ -1157,19 +1157,6 @@ _e_desk_hide_begin(E_Desk *desk, int dx, int dy)
      }
 }
 
-static void
-_e_desk_zoom_first_set(E_Desk *desk)
-{
-   E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
-
-   sd->zoom.ratio_x = 1.0;
-   sd->zoom.ratio_y = 1.0;
-   sd->zoom.center_x = 0;
-   sd->zoom.center_y = 0;
-
-   _e_desk_object_zoom(desk->smart_obj, 1.0, 1.0, 0, 0);
-}
-
 static void
 _e_desk_smart_init(E_Desk *desk)
 {
@@ -1183,10 +1170,12 @@ _e_desk_smart_init(E_Desk *desk)
    desk->smart_obj = evas_object_smart_add(e_comp->evas, _e_desk_smart_class_new());
    e_desk_geometry_set(desk, zone->x, zone->y, zone->w, zone->h);
 
-   /* FIXME indicator object won't be work, if remove this code.
-    * I have no idea why this code is necessary, so I just let it be. */
-//   e_desk_zoom_set(desk, 1.0, 1.0, 0, 0);
-   _e_desk_zoom_first_set(desk);
+   E_DESK_SMART_DATA_GET_OR_RETURN(desk->smart_obj, sd);
+
+   sd->zoom.ratio_x = 1.0;
+   sd->zoom.ratio_y = 1.0;
+   sd->zoom.center_x = 0;
+   sd->zoom.center_y = 0;
 }
 
 static Eina_Bool
@@ -1196,6 +1185,9 @@ _e_desk_smart_client_cb_resize(void *data, int type, void *event)
    E_Desk_Smart_Data *sd;
    E_Client *ec = NULL;
 
+   if (!data) goto end;
+   if (!event) goto end;
+
    ev = event;
    sd = data;
    ec = ev->ec;
@@ -1249,19 +1241,26 @@ _e_desk_smart_member_add(Evas_Object *obj, Evas_Object *child)
 
    ec = evas_object_data_get(child, "E_Client");
    if (ec)
-     _e_desk_smart_client_add(obj, ec);
+     e_desk_client_del(ec->desk, ec);
 }
 
 static void
 _e_desk_smart_member_del(Evas_Object *obj, Evas_Object *child)
 {
-   E_Client *ec;
+   E_Client *ec = NULL;
+   Evas_Object *parent = NULL;
 
    _e_desk_parent_sc->member_del(obj, child);
 
+   // if quickpanel packed into mover smart obj, _e_desk_smart_member_del is called
+   // but parent is still e_desk, because mover's parent is the same e_desk
+   // than don't add ec on the sd->clists
+   parent = evas_object_smart_parent_get(child);
+   if (parent && (parent == obj)) return;
+
    ec = evas_object_data_get(child, "E_Client");
    if (ec)
-     _e_desk_smart_client_del(obj, ec);
+     e_desk_client_add(ec->desk, ec);
 }
 
 static void
@@ -1276,8 +1275,14 @@ _e_desk_smart_set_user(Evas_Smart_Class *sc)
 static void
 _e_desk_smart_client_add(Evas_Object *obj, E_Client *ec)
 {
+   Evas_Object *parent = NULL;
+
    E_DESK_SMART_DATA_GET_OR_RETURN(obj, sd);
 
+   // if ec is a member of e_desk, don't add it in data.
+   parent = evas_object_smart_parent_get(ec->frame);
+   if (parent && (parent == ec->desk->smart_obj)) return;
+
    if (eina_list_data_find(sd->clients, ec))
      return;
 
@@ -1293,6 +1298,9 @@ _e_desk_smart_client_del(Evas_Object *obj, E_Client *ec)
    if (!eina_list_data_find(sd->clients, ec))
      return;
 
+   if (sd->zoom.enabled)
+     _e_desk_client_zoom(ec, 1.0, 1.0, 0, 0);
+
    sd->clients = eina_list_remove(sd->clients, ec);
    evas_object_smart_changed(obj);
 }
index 09d2c878cf9276d7bfa48542795bd97ca8707fce..a543d54c8999ab64c10b1d5af31879c08def1fde 100644 (file)
@@ -168,6 +168,13 @@ _mover_intercept_show(void *data, Evas_Object *obj)
    e_comp_object_dirty(ec->frame);
    e_comp_object_render(ec->frame);
 
+   // desk-zoom-set apply map on all e_desk's smart_data(clients)
+   // to properly pack a quickpanel window on the mover's e_layout_object
+   // (to became a member of mover) it shouldn't be in e_desk's clists.
+   // because mover (also smart obj) is a member of e_desk
+   // otherwize, desk-zoom will mutiplied on a ec again.
+   e_desk_client_del(ec->desk, ec);
+
    e_layout_pack(md->qp_layout_obj, ec->frame);
 
   // create base_clip
@@ -264,16 +271,6 @@ _mover_smart_del(Evas_Object *obj)
    e_comp_object_dirty(ec->frame);
    e_comp_object_render(ec->frame);
 
-   /* workaround:
-    * if remove this evas_object_map_enable_set() passing false and true,
-    * we can see the afterimage of move object.
-    * to avoid this probelm, we need it. */
-   if (ec->desk->smart_obj)
-     {
-        evas_object_map_enable_set(ec->desk->smart_obj, EINA_FALSE);
-        evas_object_map_enable_set(ec->desk->smart_obj, EINA_TRUE);
-     }
-
    e_layout_unpack(ec->frame);
    e_desk_smart_member_add(ec->desk, ec->frame);