discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=11c632ab44ed568384c7015e1b9930dc9b46901b

commit 11c632ab44ed568384c7015e1b9930dc9b46901b
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Mon Nov 16 16:21:52 2015 -0500

    further improve csd calculations for x11 clients
    
    there was previously a frame in which maximized x11 csd clients would
    reposition themselves offscreen before rendering
    
    this is now fixed by adjusting the client geometries either upon
    unsetting the csd or re-setting it, allowing the client to retain its
    expected positioning without jitters
---
 src/bin/e_comp_object.c | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index ce97702..790c70d 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -2971,11 +2971,14 @@ e_comp_object_frame_geometry_get(Evas_Object *obj, int 
*l, int *r, int *t, int *
 E_API void
 e_comp_object_frame_geometry_set(Evas_Object *obj, int l, int r, int t, int b)
 {
+   Eina_Bool calc;
+
    API_ENTRY;
    if (cw->frame_object)
      CRI("ACK!");
    if ((cw->client_inset.l == l) && (cw->client_inset.r == r) &&
        (cw->client_inset.t == t) && (cw->client_inset.b == b)) return;
+   calc = cw->client_inset.calc;
    cw->client_inset.calc = l || r || t || b;
    eina_stringshare_replace(&cw->frame_theme, "borderless");
    if (cw->client_inset.calc)
@@ -2983,14 +2986,22 @@ e_comp_object_frame_geometry_set(Evas_Object *obj, int 
l, int r, int t, int 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);
      }
-   else if ((!e_client_has_xwindow(cw->ec)) && (cw->ec->maximized || 
cw->ec->fullscreen))
+   else if (cw->ec->maximized || cw->ec->fullscreen)
      {
-        cw->ec->saved.w -= ((l + r) - (cw->client_inset.l + 
cw->client_inset.r));
-        cw->ec->saved.h -= ((t + b) - (cw->client_inset.t + 
cw->client_inset.b));
+        if (e_client_has_xwindow(cw->ec))
+          {
+             cw->ec->saved.x += l - cw->client_inset.l;
+             cw->ec->saved.y += t - cw->client_inset.t;
+          }
+        else
+          {
+             cw->ec->saved.w -= ((l + r) - (cw->client_inset.l + 
cw->client_inset.r));
+             cw->ec->saved.h -= ((t + b) - (cw->client_inset.t + 
cw->client_inset.b));
+          }
      }
    if (!cw->ec->new_client)
      {
-        if (cw->client_inset.calc)
+        if ((calc || (!e_client_has_xwindow(cw->ec))) && cw->client_inset.calc)
           {
              cw->ec->x -= l - cw->client_inset.l;
              cw->ec->y -= t - cw->client_inset.t;

-- 


Reply via email to