update csd using deltas of previous values
authorMike Blumenkrantz <zmike@osg.samsung.com>
Mon, 19 Oct 2015 21:19:32 +0000 (17:19 -0400)
committerMike Blumenkrantz <zmike@osg.samsung.com>
Tue, 20 Oct 2015 16:20:24 +0000 (12:20 -0400)
when applying new csd to a window which already has csd, the previous
csd must be removed in order to apply any new csd offsets in order to
avoid unwanted moving/resizing

src/bin/e_comp_object.c

index 0e50926..bdedd97 100644 (file)
@@ -2938,21 +2938,21 @@ e_comp_object_frame_geometry_set(Evas_Object *obj, int l, int r, int t, int b)
      CRI("ACK!");
    if ((cw->client_inset.l == l) && (cw->client_inset.r == r) &&
        (cw->client_inset.t == t) && (cw->client_inset.b == b)) return;
-   cw->client_inset.l = l;
-   cw->client_inset.r = r;
-   cw->client_inset.t = t;
-   cw->client_inset.b = b;
    cw->client_inset.calc = l || r || t || b;
    eina_stringshare_replace(&cw->frame_theme, "borderless");
-   cw->ec->w += l + r;
-   cw->ec->h += t + b;
+   cw->ec->w += (l + r) - (cw->client_inset.l + cw->client_inset.r);
+   cw->ec->h += (t + b) - (cw->client_inset.t + cw->client_inset.b);
    if (!cw->ec->new_client)
      {
-        cw->ec->x -= l;
-        cw->ec->y -= t;
+        cw->ec->x -= l - cw->client_inset.l;
+        cw->ec->y -= t - cw->client_inset.t;
         cw->ec->changes.pos = cw->ec->changes.size = 1;
         EC_CHANGED(cw->ec);
      }
+   cw->client_inset.l = l;
+   cw->client_inset.r = r;
+   cw->client_inset.t = t;
+   cw->client_inset.b = b;
 }
 
 E_API Eina_Bool