void frame_update_attr(WFrame *frame, int i, WRegion *reg) { GrStyleSpec *spec; bool selected, tagged, dragged, activity; if(i>=frame->titles_n){ /* Might happen when deinitialising */ return; } ensure_create_attrs(); spec=&frame->titles[i].attr; selected=(reg==FRAME_CURRENT(frame)); tagged=(reg!=NULL && reg->flags®ION_TAGGED); dragged=(i==frame->tab_dragged_idx); activity=(reg!=NULL && region_is_activity_r(reg)); gr_stylespec_unalloc(spec); gr_stylespec_set(spec, selected ? GR_ATTR(selected) : GR_ATTR(unselected)); gr_stylespec_set(spec, tagged ? GR_ATTR(tagged) : GR_ATTR(not_tagged)); gr_stylespec_set(spec, dragged ? GR_ATTR(dragged) : GR_ATTR(not_dragged)); gr_stylespec_set(spec, activity ? GR_ATTR(activity) : GR_ATTR(no_activity)); }
static WMenuEntry *preprocess_menu(ExtlTab tab, int *n_entries) { WMenuEntry *entries; ExtlTab entry; int i, n; n=extl_table_get_n(tab); *n_entries=n; if(n<=0) return NULL; entries=ALLOC_N(WMenuEntry, n); if(entries==NULL) return NULL; init_attr(); /* Initialise entries and check submenus */ for(i=1; i<=n; i++){ WMenuEntry *ent=&entries[i-1]; ent->title=NULL; ent->flags=0; gr_stylespec_init(&ent->attr); if(extl_table_geti_t(tab, i, &entry)){ char *attr; ExtlTab sub; ExtlFn fn; if(extl_table_gets_s(entry, "attr", &attr)){ gr_stylespec_load_(&ent->attr, attr, TRUE); free(attr); } if(extl_table_gets_f(entry, "submenu_fn", &fn)){ ent->flags|=WMENUENTRY_SUBMENU; extl_unref_fn(fn); }else if(extl_table_gets_t(entry, "submenu", &sub)){ ent->flags|=WMENUENTRY_SUBMENU; extl_unref_table(sub); } if(ent->flags&WMENUENTRY_SUBMENU) gr_stylespec_set(&ent->attr, GR_ATTR(submenu)); extl_unref_table(entry); } } return entries; }