rem: buffer = wmalloc(strlen(instance)+strlen(class)+2); sprintf(buffer, "%s.%s", instance, class);
add: buffer = StrConcatDot(instance, class);
context: saveSettings(WMButton *button, InspectorPanel *panel){    WWindow *wwin = panel->inspected;    WDDomain *db = WDWindowAttributes;    WMPropList *dict = db->dictionary;    WMPropList *winDic, *appDic, *value, *key, *key2;    char *icon_file;    int flags = 0;    int different = 0, different2 = 0;    /* Save will apply the changes and save them */    applySettings(panel->applyBtn, panel);    if (WMGetButtonSelected(panel->instRb) != 0)        key = WMCreatePLString(wwin->wm_instance);    else if (WMGetButtonSelected(panel->clsRb) != 0)        key = WMCreatePLString(wwin->wm_class);    else if (WMGetButtonSelected(panel->bothRb) != 0) {        char *buffer;        buffer = wmalloc(strlen(wwin->wm_instance)+strlen(wwin->wm_class)+2);        sprintf(buffer, "%s.%s", wwin->wm_instance, wwin->wm_class);        key = WMCreatePLString(buffer);        wfree(buffer);    } else if (WMGetButtonSelected(panel->defaultRb) != 0) {        key = WMRetainPropList(AnyWindow);        flags = UPDATE_DEFAULTS;    } else        key = NULL;    if (!key)        return;    if (!dict) {        dict = WMCreatePLDictionary(NULL, NULL, NULL);        if (dict) {            db->dictionary = dict;        } else {            WMReleasePropList(key);            return;        }    }    if (showIconFor(WMWidgetScreen(button), panel, NULL, NULL,		    USE_TEXT_FIELD) < 0)        return;    WMPLSetCaseSensitive(True);    winDic = WMCreatePLDictionary(NULL, NULL, NULL);    appDic = WMCreatePLDictionary(NULL, NULL, NULL);    /* Update icon for window */    icon_file = WMGetTextFieldText(panel->fileText);    if (icon_file) {        if (icon_file[0] != 0) {            value = WMCreatePLString(icon_file);            different |= insertAttribute(dict, winDic, AIcon, value, flags);            different2 |= insertAttribute(dict, appDic, AIcon, value, flags);            WMReleasePropList(value);        }        wfree(icon_file);    }    {	int i = WMGetPopUpButtonSelectedItem(panel->wsP);	i--;	if (i>=0 && i < panel->frame->screen_ptr->workspace_count) {	    value = WMCreatePLString(panel->frame->screen_ptr->workspaces[i]->name);	    different |= insertAttribute(dict, winDic, AStartWorkspace, value, 					 flags);	    WMReleasePropList(value);        }    }    flags |= IS_BOOLEAN;    value = (WMGetButtonSelected(panel->alwChk)!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AAlwaysUserIcon, value, flags);    value = (WMGetButtonSelected(panel->attrChk[0])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoTitlebar,     value, flags);    value = (WMGetButtonSelected(panel->attrChk[1])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoResizebar,     value, flags);    value = (WMGetButtonSelected(panel->attrChk[2])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoCloseButton,   value, flags);    value = (WMGetButtonSelected(panel->attrChk[3])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoMiniaturizeButton, value, flags);    value = (WMGetButtonSelected(panel->attrChk[4])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoBorder, value, flags);    value = (WMGetButtonSelected(panel->attrChk[5])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AKeepOnTop,       value, flags);    value = (WMGetButtonSelected(panel->attrChk[6])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AKeepOnBottom,    value, flags);    value = (WMGetButtonSelected(panel->attrChk[7])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AOmnipresent,     value, flags);    value = (WMGetButtonSelected(panel->attrChk[8])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AStartMiniaturized, value, flags);    value = (WMGetButtonSelected(panel->attrChk[9])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AStartMaximized,  value, flags);    value = (WMGetButtonSelected(panel->attrChk[10])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AFullMaximize,  value, flags);    value = (WMGetButtonSelected(panel->moreChk[0])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoKeyBindings,   value, flags);    value = (WMGetButtonSelected(panel->moreChk[1])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoMouseBindings, value, flags);    value = (WMGetButtonSelected(panel->moreChk[2])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ASkipWindowList, value, flags);    value = (WMGetButtonSelected(panel->moreChk[3])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AUnfocusable, value, flags);    value = (WMGetButtonSelected(panel->moreChk[4])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AKeepInsideScreen,value, flags);    value = (WMGetButtonSelected(panel->moreChk[5])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoHideOthers,    value, flags);    value = (WMGetButtonSelected(panel->moreChk[6])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ADontSaveSession, value, flags);    value = (WMGetButtonSelected(panel->moreChk[7])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, AEmulateAppIcon,  value, flags);#ifdef XKB_BUTTON_HINT    value = (WMGetButtonSelected(panel->moreChk[8])!=0) ? Yes : No;    different |= insertAttribute(dict, winDic, ANoLanguageButton, value, flags);#endif    if (wwin->main_window!=None && wApplicationOf(wwin->main_window)!=NULL) {        value = (WMGetButtonSelected(panel->appChk[0])!=0) ? Yes : No;        different2 |= insertAttribute(dict, appDic, AStartHidden, value, flags);        value = (WMGetButtonSelected(panel->appChk[1])!=0) ? Yes : No;        different2 |= insertAttribute(dict, appDic, ANoAppIcon, value, flags);        value = (WMGetButtonSelected(panel->appChk[2])!=0) ? Yes : No;        different2 |= insertAttribute(dict, appDic, ASharedAppIcon, value, flags);    }    if (wwin->fake_group) {        key2 = WMCreatePLString(wwin->fake_group->identifier);        if (WMIsPropListEqualTo(key, key2)) {            WMMergePLDictionaries(winDic, appDic, True);            different |= different2;        } else {            WMRemoveFromPLDictionary(dict, key2);            if (different2) {                WMPutInPLDictionary(dict, key2, appDic);            }        }        WMReleasePropList(key2);        WMReleasePropList(appDic);    } else if (wwin->main_window != wwin->client_win) {        WApplication *wapp = wApplicationOf(wwin->main_window);	if (wapp) {            char *instance = wapp->main_window_desc->wm_instance;            char *class = wapp->main_window_desc->wm_class;            char *buffer;            buffer = wmalloc(strlen(instance)+strlen(class)+2);            sprintf(buffer, "%s.%s", instance, class);	    key2 = WMCreatePLString(buffer);            wfree(buffer);            if (WMIsPropListEqualTo(key, key2)) {                WMMergePLDictionaries(winDic, appDic, True);                different |= different2;            } else {                WMRemoveFromPLDictionary(dict, key2);                if (different2) {                    WMPutInPLDictionary(dict, key2, appDic);                }            }            WMReleasePropList(key2);            WMReleasePropList(appDic);        }    } else {        WMMergePLDictionaries(winDic, appDic, True);        different |= different2;        WMReleasePropList(appDic);    }    WMRemoveFromPLDictionary(dict, key);    if (different) {        WMPutInPLDictionary(dict, key, winDic);    }    WMReleasePropList(key);     WMReleasePropList(winDic);    UpdateDomainFile(db);    /* clean up */    WMPLSetCaseSensitive(False);}