summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@osg.samsung.com>2015-11-16 16:21:52 -0500
committerMike Blumenkrantz <zmike@osg.samsung.com>2015-12-04 16:00:36 -0500
commit27144e5148001f70ce7a4462f914c98b921113b9 (patch)
treef76d4c91bbfb211b69e30f3a68b3ad8041741f7b
parentc8a105bdbaf6d8204e0f29e07cab93e63fb9834a (diff)
downloadenlightenment-27144e5148001f70ce7a4462f914c98b921113b9.tar.gz
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
-rw-r--r--src/bin/e_comp_object.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index ce97702d81..790c70daa2 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;