1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 20:38:08 +01:00

Added code to automatically convert Icon paths in WMWindowAttributes from

the old .AppInfo/... to the new Library/WindowMaker/... on the fly when
Window Maker starts.
This should allow a transparent transition without any need for users to do
anything.
This commit is contained in:
dan
2005-03-12 01:16:04 +00:00
parent 24e349afe7
commit 24519b6292
2 changed files with 59 additions and 0 deletions

View File

@@ -971,6 +971,53 @@ appendMenu(WMPropList *destarr, WMPropList *array)
#endif
/* Fixup paths for cached pixmaps from .AppInfo to Library/WindowMaker/... */
static Bool
fixupCachedPixmapsPaths(WMPropList *dict)
{
WMPropList *allApps, *app, *props, *iconkey, *icon, *newicon;
char *path, *fixedpath, *ptr, *search, *replace;
int i, len, slen;
Bool changed = False;
search = "/.AppInfo/WindowMaker/";
slen = strlen(search);
iconkey = WMCreatePLString("Icon");
allApps = WMGetPLDictionaryKeys(dict);
for (i=0; i < WMGetPropListItemCount(allApps); i++) {
app = WMGetFromPLArray(allApps, i);
props = WMGetFromPLDictionary(dict, app);
if (!props)
continue;
icon = WMGetFromPLDictionary(props, iconkey);
if (icon && WMIsPLString(icon)) {
path = WMGetFromPLString(icon);
ptr = strstr(path, search);
if (ptr) {
changed = True;
len = (ptr - path);
fixedpath = wmalloc(strlen(path)+32);
strncpy(fixedpath, path, len);
fixedpath[len] = 0;
strcat(fixedpath, "/Library/WindowMaker/CachedPixmaps/");
strcat(fixedpath, ptr+slen);
newicon = WMCreatePLString(fixedpath);
WMPutInPLDictionary(props, iconkey, newicon);
WMReleasePropList(newicon);
wfree(fixedpath);
}
}
}
WMReleasePropList(allApps);
WMReleasePropList(iconkey);
return changed;
}
void
wDefaultsMergeGlobalMenus(WDDomain *menuDomain)
{
@@ -1076,6 +1123,15 @@ wDefaultsInitDomain(char *domain, Bool requireDictionary)
wwarning(_("Domain %s (%s) of defaults database is corrupted!"),
domain, the_path);
}
if (strcmp(domain, "WMWindowAttributes")==0 && db->dictionary) {
if (fixupCachedPixmapsPaths(db->dictionary)) {
WMWritePropListToFile(db->dictionary, db->path, True);
/* re-read the timestamp. if this fails take current time */
if (stat(db->path, &stbuf)<0) {
stbuf.st_mtime = time(NULL);
}
}
}
db->timestamp = stbuf.st_mtime;
} else {
wwarning(_("could not load domain %s from user defaults database"),