From 11c632ab44ed568384c7015e1b9930dc9b46901b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 16 Nov 2015 16:21:52 -0500 Subject: [PATCH] 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 ce97702d8..790c70daa 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;