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-11-16 16:25:34 -0500
commit11c632ab44ed568384c7015e1b9930dc9b46901b (patch)
tree4a987b23798323f103088f889dc7102bdcda29e5
parente5f56f95e9c67239162f6508a3cf609ebdcbce90 (diff)
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 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 *
2971E_API void 2971E_API void
2972e_comp_object_frame_geometry_set(Evas_Object *obj, int l, int r, int t, int b) 2972e_comp_object_frame_geometry_set(Evas_Object *obj, int l, int r, int t, int b)
2973{ 2973{
2974 Eina_Bool calc;
2975
2974 API_ENTRY; 2976 API_ENTRY;
2975 if (cw->frame_object) 2977 if (cw->frame_object)
2976 CRI("ACK!"); 2978 CRI("ACK!");
2977 if ((cw->client_inset.l == l) && (cw->client_inset.r == r) && 2979 if ((cw->client_inset.l == l) && (cw->client_inset.r == r) &&
2978 (cw->client_inset.t == t) && (cw->client_inset.b == b)) return; 2980 (cw->client_inset.t == t) && (cw->client_inset.b == b)) return;
2981 calc = cw->client_inset.calc;
2979 cw->client_inset.calc = l || r || t || b; 2982 cw->client_inset.calc = l || r || t || b;
2980 eina_stringshare_replace(&cw->frame_theme, "borderless"); 2983 eina_stringshare_replace(&cw->frame_theme, "borderless");
2981 if (cw->client_inset.calc) 2984 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)
2983 cw->ec->w += (l + r) - (cw->client_inset.l + cw->client_inset.r); 2986 cw->ec->w += (l + r) - (cw->client_inset.l + cw->client_inset.r);
2984 cw->ec->h += (t + b) - (cw->client_inset.t + cw->client_inset.b); 2987 cw->ec->h += (t + b) - (cw->client_inset.t + cw->client_inset.b);
2985 } 2988 }
2986 else if ((!e_client_has_xwindow(cw->ec)) && (cw->ec->maximized || cw->ec->fullscreen)) 2989 else if (cw->ec->maximized || cw->ec->fullscreen)
2987 { 2990 {
2988 cw->ec->saved.w -= ((l + r) - (cw->client_inset.l + cw->client_inset.r)); 2991 if (e_client_has_xwindow(cw->ec))
2989 cw->ec->saved.h -= ((t + b) - (cw->client_inset.t + cw->client_inset.b)); 2992 {
2993 cw->ec->saved.x += l - cw->client_inset.l;
2994 cw->ec->saved.y += t - cw->client_inset.t;
2995 }
2996 else
2997 {
2998 cw->ec->saved.w -= ((l + r) - (cw->client_inset.l + cw->client_inset.r));
2999 cw->ec->saved.h -= ((t + b) - (cw->client_inset.t + cw->client_inset.b));
3000 }
2990 } 3001 }
2991 if (!cw->ec->new_client) 3002 if (!cw->ec->new_client)
2992 { 3003 {
2993 if (cw->client_inset.calc) 3004 if ((calc || (!e_client_has_xwindow(cw->ec))) && cw->client_inset.calc)
2994 { 3005 {
2995 cw->ec->x -= l - cw->client_inset.l; 3006 cw->ec->x -= l - cw->client_inset.l;
2996 cw->ec->y -= t - cw->client_inset.t; 3007 cw->ec->y -= t - cw->client_inset.t;