static void reparent_mgd(WRegion *sub, WWindow *par) { WFitParams subfp; subfp.g=REGION_GEOM(sub); subfp.mode=REGION_FIT_EXACT; if(!region_fitrep(sub, par, &subfp)){ warn(TR("Error reparenting %s."), region_name(sub)); region_detach_manager(sub); } }
bool menu_fitrep(WMenu *menu, WWindow *par, const WFitParams *fp) { WFitParams oldfp; if(par!=NULL && !region_same_rootwin((WRegion*)par, (WRegion*)menu)) return FALSE; oldfp=menu->last_fp; menu->last_fp=*fp; menu_do_refit(menu, par, &oldfp); if(menu->submenu!=NULL && !menu->pmenu_mode) region_fitrep((WRegion*)(menu->submenu), par, fp); return TRUE; }
static WInfoWin *setup_moveres_display(WWindow *parent, int cx, int cy) { GrBorderWidths bdw; GrFontExtents fnte; WInfoWin *infowin; WFitParams fp; fp.mode=REGION_FIT_EXACT; fp.g.x=0; fp.g.y=0; fp.g.w=1; fp.g.h=1; infowin=create_infowin(parent, &fp, "moveres_display"); if(infowin==NULL) return NULL; grbrush_get_border_widths(INFOWIN_BRUSH(infowin), &bdw); grbrush_get_font_extents(INFOWIN_BRUSH(infowin), &fnte); /* Create move/resize position/size display window */ fp.g.w=3; fp.g.w+=chars_for_num(REGION_GEOM(parent).w); fp.g.w+=chars_for_num(REGION_GEOM(parent).h); fp.g.w*=max_width(INFOWIN_BRUSH(infowin), "0123456789x+"); fp.g.w+=bdw.left+bdw.right; fp.g.h=fnte.max_height+bdw.top+bdw.bottom;; fp.g.x=cx-fp.g.w/2; fp.g.y=cy-fp.g.h/2; region_fitrep((WRegion*)infowin, NULL, &fp); region_map((WRegion*)infowin); return infowin; }
bool group_fitrep(WGroup *ws, WWindow *par, const WFitParams *fp) { WGroupIterTmp tmp; WStacking *unweaved=NULL; int xdiff=0, ydiff=0; WStacking *st; WWindow *oldpar; WRectangle g; oldpar=REGION_PARENT(ws); if(par==NULL){ if(fp->mode®ION_FIT_WHATEVER) return TRUE; REGION_GEOM(ws)=fp->g; }else{ if(!region_same_rootwin((WRegion*)ws, (WRegion*)par)) return FALSE; if(ws->managed_stdisp!=NULL && ws->managed_stdisp->reg!=NULL) region_detach_manager(ws->managed_stdisp->reg); assert(ws->managed_stdisp==NULL); xdiff=fp->g.x-REGION_GEOM(ws).x; ydiff=fp->g.y-REGION_GEOM(ws).y; region_unset_parent((WRegion*)ws); XReparentWindow(ioncore_g.dpy, ws->dummywin, par->win, -1, -1); region_set_parent((WRegion*)ws, par); REGION_GEOM(ws).x=fp->g.x; REGION_GEOM(ws).y=fp->g.y; if(!(fp->mode®ION_FIT_WHATEVER)){ REGION_GEOM(ws).w=fp->g.w; REGION_GEOM(ws).h=fp->g.h; } if(oldpar!=NULL) unweaved=stacking_unweave(&oldpar->stacking, wsfilt, (void*)ws); } FOR_ALL_NODES_IN_GROUP(ws, st, tmp){ WFitParams fp2=*fp; if(st->reg==NULL) continue; g=REGION_GEOM(st->reg); g.x+=xdiff; g.y+=ydiff; if(fp->mode®ION_FIT_WHATEVER){ fp2.g=g; }else{ fp2.g=REGION_GEOM(ws); sizepolicy(&st->szplcy, st->reg, &g, REGION_RQGEOM_WEAK_ALL, &fp2); } if(!region_fitrep(st->reg, par, &fp2)){ warn(TR("Error reparenting %s."), region_name(st->reg)); region_detach_manager(st->reg); } }