rem: Xft_Family *family; Xft_Typeface *face;
add: Family *family; Typeface *face;
context: familyClick(WMWidget *w, void *data){    WMList *lPtr = (WMList*)w;    WMListItem *item;    Xft_Family *family;    Xft_Typeface *face;    FontPanel *panel = (FontPanel*)data;    WMArrayIterator i;    /* current typeface and size */    char *oface = NULL;    char *osize = NULL;    int facei = -1;    int sizei = -1;    /* must try to keep the same typeface and size for the new family */    item = WMGetListSelectedItem(panel->typLs);    if (item)        oface = wstrdup(item->text);    osize = WMGetTextFieldText(panel->sizT);    item = WMGetListSelectedItem(lPtr);    family = (Xft_Family*)item->clientData;    WMClearList(panel->typLs);    WM_ITERATE_ARRAY(family->typefaces, face, i) {        char buffer[256];        int top=0;        WMListItem *fitem;        strcpy(buffer, face->typeface);        if(strcasecmp(face->typeface, "Roman") == 0)            top = 1;        if(strcasecmp(face->typeface, "Regular") == 0)            top = 1;        if (top)            fitem = WMInsertListItem(panel->typLs, 0, buffer);        else            fitem = WMAddListItem(panel->typLs, buffer);        fitem->clientData = face;    }    if (oface) {        facei = WMFindRowOfListItemWithTitle(panel->typLs, oface);        wfree(oface);    }    if (facei < 0) {        facei = 0;    }    WMSelectListItem(panel->typLs, facei);    typefaceClick(panel->typLs, panel);    if (osize) {        sizei = WMFindRowOfListItemWithTitle(panel->sizLs, osize);    }    if (sizei >= 0) {        WMSelectListItem(panel->sizLs, sizei);        sizeClick(panel->sizLs, panel);    }    if (osize)        wfree(osize);    preview(panel);}