ughhh this makes my head hurt. can you make a list of possible cases which weren't covered by the previous code so that I can at least improve this for e19?
On Wed, 11 Sep 2013 09:03:18 -0700 Carsten Haitzler (Rasterman) - Enlightenment Git <no-re...@enlightenment.org> wrote: > raster pushed a commit to branch master. > > commit 2ca1a5a5d4aaeb346c4209415dedc75399e0b518 > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> > Date: Thu Sep 12 01:23:23 2013 +0900 > > fix comp fullscreen nocomp detection to work properly given comp changes > --- > src/bin/e_comp.c | 108 > +++++++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 106 insertions(+), 2 deletions(-) > > diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c > index faf7e9a..c4a3ffd 100644 > --- a/src/bin/e_comp.c > +++ b/src/bin/e_comp.c > @@ -200,6 +200,96 @@ _e_comp_child_hide(E_Comp_Win *cw) > } > } > > +static Eina_Bool > +_e_comp_visible_object_clip_is(Evas_Object *obj) > +{ > + Evas_Object *clip; > + int a; > + > + clip = evas_object_clip_get(obj); > + if (!evas_object_visible_get(clip)) return EINA_FALSE; > + evas_object_color_get(clip, NULL, NULL, NULL, &a); > + if (a <= 0) return EINA_FALSE; > + if (evas_object_clip_get(clip)) > + return _e_comp_visible_object_clip_is(clip); > + return EINA_TRUE; > +} > + > +static Eina_Bool > +_e_comp_visible_object_is(Evas_Object *obj, Evas_Coord x, Evas_Coord y, > Evas_Coord w, Evas_Coord h) > +{ > + const char *type = evas_object_type_get(obj); > + Evas_Coord xx, yy, ww, hh; > + > + if (!type) return EINA_FALSE; > + evas_object_geometry_get(obj, &xx, &yy, &ww, &hh); > + if (E_INTERSECTS(x, y, w, h, xx, yy, ww, hh)) > + { > + if ((evas_object_visible_get(obj)) > + && (!evas_object_clipees_get(obj)) > + ) > + { > + int a; > + > + evas_object_color_get(obj, NULL, NULL, NULL, &a); > + if (a > 0) > + { > + if ((!strcmp(type, "rectangle")) || > + (!strcmp(type, "image")) || > + (!strcmp(type, "text")) || > + (!strcmp(type, "textblock")) || > + (!strcmp(type, "textgrid")) || > + (!strcmp(type, "polygon")) || > + (!strcmp(type, "line"))) > + { > + if (evas_object_clip_get(obj)) > + return _e_comp_visible_object_clip_is(obj); > + return EINA_TRUE; > + } > + else > + { > + Eina_List *children; > + > + if ((children = evas_object_smart_members_get(obj))) > + { > + Eina_List *l; > + Evas_Object *o; > + > + EINA_LIST_FOREACH(children, l, o) > + { > + if (_e_comp_visible_object_is(o, x, y, w, > h)) > + { > + if (evas_object_clip_get(o)) > + { > + children = > eina_list_free(children); > + return > _e_comp_visible_object_clip_is(o); > + } > + children = eina_list_free(children); > + return EINA_TRUE; > + } > + } > + eina_list_free(children); > + } > + } > + } > + } > + } > + return EINA_FALSE; > +} > + > +static Eina_Bool > +_e_comp_visible_object_is_above(Evas_Object *obj, Evas_Coord x, Evas_Coord > y, Evas_Coord w, Evas_Coord h) > +{ > + Evas_Object *above; > + > + for (above = evas_object_above_get(obj); above; > + above = evas_object_above_get(above)) > + { > + if (_e_comp_visible_object_is(above, x, y, w, h)) return EINA_TRUE; > + } > + return EINA_FALSE; > +} > + > static E_Comp_Win * > _e_comp_fullscreen_check(E_Comp *c) > { > @@ -212,11 +302,25 @@ _e_comp_fullscreen_check(E_Comp *c) > continue; > if (!cw->bd) continue; > if ((cw->x == 0) && (cw->y == 0) && > - ((cw->bd->client.w) >= c->man->w) && > - ((cw->bd->client.h) >= c->man->h) && > + ((cw->bd->client.w) == c->man->w) && > + ((cw->bd->client.h) == c->man->h) && > + (cw->bd->client_inset.l == 0) && (cw->bd->client_inset.r == 0) && > + (cw->bd->client_inset.t == 0) && (cw->bd->client_inset.b == 0) && > (!cw->argb) && (!cw->shaped) && (!cw->bg_win) > ) > { > + // check for objects above... > + Evas_Object *parent = NULL, *o = NULL; > + > + o = cw->obj; > + do > + { > + if (_e_comp_visible_object_is_above > + (o, 0, 0, c->man->w, c->man->h)) return NULL; > + parent = evas_object_smart_parent_get(o); > + if (parent) o = parent; > + } > + while (parent); > return cw; > } > return NULL; > ------------------------------------------------------------------------------ How ServiceNow helps IT people transform IT departments: 1. Consolidate legacy IT systems to a single system of record for IT 2. Standardize and globalize service processes across IT 3. Implement zero-touch automation to replace manual, redundant tasks http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel