X-Git-Url: https://git.decadent.org.uk/gitweb/?p=ion3.git;a=blobdiff_plain;f=ioncore%2Fstacking.c;h=0c6480d7b5331ecc7479ca59b16dd6a22f1a6360;hp=9c0be9f02686f37db8d94e6a1ff1c84c8f04469e;hb=e3aec18706513a87eaa7839dfdaf7e0fcd0d8d2a;hpb=ae4260bb64817c11f9a7140324cd3e3ba113e297 diff --git a/ioncore/stacking.c b/ioncore/stacking.c index 9c0be9f..0c6480d 100644 --- a/ioncore/stacking.c +++ b/ioncore/stacking.c @@ -1,7 +1,7 @@ /* * ion/ioncore/stacking.c * - * Copyright (c) Tuomo Valkonen 1999-2007. + * Copyright (c) Tuomo Valkonen 1999-2009. * * See the included file LICENSE for details. */ @@ -552,7 +552,7 @@ WStacking *stacking_find_to_focus(WStacking *stacking, void *filt_data) { uint min_level=STACKING_LEVEL_BOTTOM; - WStacking *st=NULL; + WStacking *st=NULL, *found=NULL; if(stacking==NULL) return NULL; @@ -572,15 +572,21 @@ WStacking *stacking_find_to_focus(WStacking *stacking, if(st->levellevel>=STACKING_LEVEL_MODAL1) min_level=maxof(min_level, st->level); }while(st!=stacking); - return NULL; + return found; } @@ -590,6 +596,12 @@ static bool mapped_filt(WStacking *st, void *unused) } +static bool mapped_filt_neq(WStacking *st, void *st_neq) +{ + return (st!=(WStacking*)st_neq && mapped_filt(st, NULL)); +} + + static bool mgr_filt(WStacking *st, void *mgr_) { return (st->reg!=NULL && REGION_MANAGER(st->reg)==(WRegion*)mgr_); @@ -616,5 +628,16 @@ uint stacking_min_level_mapped(WStacking *stacking) } +bool stacking_must_focus(WStacking *stacking, WStacking *st) +{ + WStacking *stf=stacking_find_to_focus(stacking, NULL, + mapped_filt_neq, NULL, st); + + return (stf==NULL || + (st->level>stf->level && + st->level>=STACKING_LEVEL_MODAL1)); +} + + /*}}}*/