mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 12:28:22 +01:00
Fixed some problems with WMGetDefaultsFromPath().
This commit is contained in:
@@ -30,10 +30,11 @@ typedef struct W_UserDefaults {
|
|||||||
|
|
||||||
|
|
||||||
static UserDefaults *sharedUserDefaults = NULL;
|
static UserDefaults *sharedUserDefaults = NULL;
|
||||||
static UserDefaults **sharedDefaultsList = NULL;
|
|
||||||
static Bool registeredSaveOnExit = False;
|
static Bool registeredSaveOnExit = False;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern char *WMGetApplicationName();
|
extern char *WMGetApplicationName();
|
||||||
|
|
||||||
#define DEFAULTS_DIR "/Defaults"
|
#define DEFAULTS_DIR "/Defaults"
|
||||||
@@ -90,17 +91,12 @@ saveDefaultsChanges(int foo, void *bar)
|
|||||||
saveDefaultsChanges(void)
|
saveDefaultsChanges(void)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* save the user defaults database */
|
/* save the user defaults databases */
|
||||||
if (sharedUserDefaults && sharedUserDefaults->dirty) {
|
if (sharedUserDefaults) {
|
||||||
PLSave(sharedUserDefaults->appDomain, YES);
|
UserDefaults *tmp = sharedUserDefaults;
|
||||||
}
|
|
||||||
|
|
||||||
/* now save the extra defaults databases we may have */
|
|
||||||
if (sharedDefaultsList) {
|
|
||||||
UserDefaults *tmp = *sharedDefaultsList;
|
|
||||||
|
|
||||||
while (tmp) {
|
while (tmp) {
|
||||||
if (tmp->dirty)
|
if (tmp->appDomain && tmp->dirty)
|
||||||
PLSave(tmp->appDomain, YES);
|
PLSave(tmp->appDomain, YES);
|
||||||
tmp = tmp->next;
|
tmp = tmp->next;
|
||||||
}
|
}
|
||||||
@@ -134,92 +130,101 @@ WMSynchronizeUserDefaults(WMUserDefaults *database)
|
|||||||
WMUserDefaults*
|
WMUserDefaults*
|
||||||
WMGetStandardUserDefaults(void)
|
WMGetStandardUserDefaults(void)
|
||||||
{
|
{
|
||||||
if (!sharedUserDefaults) {
|
WMUserDefaults *defaults;
|
||||||
WMUserDefaults *defaults;
|
proplist_t domain;
|
||||||
|
proplist_t key;
|
||||||
proplist_t domain;
|
char *path;
|
||||||
proplist_t key;
|
int i;
|
||||||
char *path;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
defaults = wmalloc(sizeof(WMUserDefaults));
|
|
||||||
memset(defaults, 0, sizeof(WMUserDefaults));
|
|
||||||
|
|
||||||
defaults->defaults = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
|
||||||
|
|
||||||
defaults->searchList = wmalloc(sizeof(proplist_t)*3);
|
|
||||||
|
|
||||||
/* application domain */
|
|
||||||
key = PLMakeString(WMGetApplicationName());
|
|
||||||
defaults->searchList[0] = key;
|
|
||||||
|
|
||||||
/* temporary kluge */
|
|
||||||
if (strcmp(WMGetApplicationName(), "WindowMaker")==0) {
|
|
||||||
domain = NULL;
|
|
||||||
path = NULL;
|
|
||||||
} else {
|
|
||||||
path = wdefaultspathfordomain(PLGetString(key));
|
|
||||||
|
|
||||||
domain = PLGetProplistWithPath(path);
|
|
||||||
}
|
|
||||||
if (!domain) {
|
|
||||||
proplist_t p;
|
|
||||||
|
|
||||||
domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
|
||||||
if (path) {
|
|
||||||
p = PLMakeString(path);
|
|
||||||
PLSetFilename(domain, p);
|
|
||||||
PLRelease(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (path)
|
|
||||||
free(path);
|
|
||||||
|
|
||||||
defaults->appDomain = domain;
|
|
||||||
|
|
||||||
if (domain)
|
|
||||||
PLInsertDictionaryEntry(defaults->defaults, key, domain);
|
|
||||||
|
|
||||||
PLRelease(key);
|
|
||||||
|
|
||||||
/* global domain */
|
|
||||||
key = PLMakeString("WMGLOBAL");
|
|
||||||
defaults->searchList[1] = key;
|
|
||||||
|
|
||||||
path = wdefaultspathfordomain(PLGetString(key));
|
|
||||||
|
|
||||||
domain = PLGetProplistWithPath(path);
|
|
||||||
|
|
||||||
free(path);
|
|
||||||
|
|
||||||
if (!domain)
|
|
||||||
domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
|
||||||
|
|
||||||
if (domain)
|
|
||||||
PLInsertDictionaryEntry(defaults->defaults, key, domain);
|
|
||||||
|
|
||||||
PLRelease(key);
|
|
||||||
|
|
||||||
/* terminate list */
|
|
||||||
defaults->searchList[2] = NULL;
|
|
||||||
|
|
||||||
defaults->searchListArray=PLMakeArrayFromElements(NULL,NULL);
|
|
||||||
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (defaults->searchList[i]) {
|
|
||||||
PLAppendArrayElement(defaults->searchListArray,
|
|
||||||
defaults->searchList[i]);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedUserDefaults = defaults;
|
|
||||||
|
|
||||||
registerSaveOnExit();
|
|
||||||
|
|
||||||
|
if (sharedUserDefaults) {
|
||||||
|
defaults = sharedUserDefaults;
|
||||||
|
while (defaults) {
|
||||||
|
/* Trick, path == NULL only for StandardUserDefaults db */
|
||||||
|
if (defaults->path == NULL)
|
||||||
|
return defaults;
|
||||||
|
defaults = defaults->next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sharedUserDefaults;
|
/* we didn't found the database we are looking for. Go read it. */
|
||||||
|
defaults = wmalloc(sizeof(WMUserDefaults));
|
||||||
|
memset(defaults, 0, sizeof(WMUserDefaults));
|
||||||
|
|
||||||
|
defaults->defaults = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
||||||
|
|
||||||
|
defaults->searchList = wmalloc(sizeof(proplist_t)*3);
|
||||||
|
|
||||||
|
/* application domain */
|
||||||
|
key = PLMakeString(WMGetApplicationName());
|
||||||
|
defaults->searchList[0] = key;
|
||||||
|
|
||||||
|
/* temporary kluge */
|
||||||
|
if (strcmp(WMGetApplicationName(), "WindowMaker")==0) {
|
||||||
|
domain = NULL;
|
||||||
|
path = NULL;
|
||||||
|
} else {
|
||||||
|
path = wdefaultspathfordomain(PLGetString(key));
|
||||||
|
|
||||||
|
domain = PLGetProplistWithPath(path);
|
||||||
|
}
|
||||||
|
if (!domain) {
|
||||||
|
proplist_t p;
|
||||||
|
|
||||||
|
domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
||||||
|
if (path) {
|
||||||
|
p = PLMakeString(path);
|
||||||
|
PLSetFilename(domain, p);
|
||||||
|
PLRelease(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (path)
|
||||||
|
free(path);
|
||||||
|
|
||||||
|
defaults->appDomain = domain;
|
||||||
|
|
||||||
|
if (domain)
|
||||||
|
PLInsertDictionaryEntry(defaults->defaults, key, domain);
|
||||||
|
|
||||||
|
PLRelease(key);
|
||||||
|
|
||||||
|
/* global domain */
|
||||||
|
key = PLMakeString("WMGLOBAL");
|
||||||
|
defaults->searchList[1] = key;
|
||||||
|
|
||||||
|
path = wdefaultspathfordomain(PLGetString(key));
|
||||||
|
|
||||||
|
domain = PLGetProplistWithPath(path);
|
||||||
|
|
||||||
|
free(path);
|
||||||
|
|
||||||
|
if (!domain)
|
||||||
|
domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL);
|
||||||
|
|
||||||
|
if (domain)
|
||||||
|
PLInsertDictionaryEntry(defaults->defaults, key, domain);
|
||||||
|
|
||||||
|
PLRelease(key);
|
||||||
|
|
||||||
|
/* terminate list */
|
||||||
|
defaults->searchList[2] = NULL;
|
||||||
|
|
||||||
|
defaults->searchListArray=PLMakeArrayFromElements(NULL,NULL);
|
||||||
|
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (defaults->searchList[i]) {
|
||||||
|
PLAppendArrayElement(defaults->searchListArray,
|
||||||
|
defaults->searchList[i]);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sharedUserDefaults)
|
||||||
|
defaults->next = sharedUserDefaults;
|
||||||
|
sharedUserDefaults = defaults;
|
||||||
|
|
||||||
|
registerSaveOnExit();
|
||||||
|
|
||||||
|
return defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -234,10 +239,10 @@ WMGetDefaultsFromPath(char *path)
|
|||||||
|
|
||||||
assert(path != NULL);
|
assert(path != NULL);
|
||||||
|
|
||||||
if (sharedDefaultsList) {
|
if (sharedUserDefaults) {
|
||||||
defaults = *sharedDefaultsList;
|
defaults = sharedUserDefaults;
|
||||||
while (defaults) {
|
while (defaults) {
|
||||||
if (strcmp(defaults->path, path) == 0)
|
if (defaults->path && strcmp(defaults->path, path) == 0)
|
||||||
return defaults;
|
return defaults;
|
||||||
defaults = defaults->next;
|
defaults = defaults->next;
|
||||||
}
|
}
|
||||||
@@ -251,12 +256,13 @@ WMGetDefaultsFromPath(char *path)
|
|||||||
|
|
||||||
defaults->searchList = wmalloc(sizeof(proplist_t)*2);
|
defaults->searchList = wmalloc(sizeof(proplist_t)*2);
|
||||||
|
|
||||||
/* the domain we want go first */
|
/* the domain we want, go in the first position */
|
||||||
name = strrchr(path, '/');
|
name = strrchr(path, '/');
|
||||||
if (!name)
|
if (!name)
|
||||||
name = path;
|
name = path;
|
||||||
else
|
else
|
||||||
name++;
|
name++;
|
||||||
|
|
||||||
key = PLMakeString(name);
|
key = PLMakeString(name);
|
||||||
defaults->searchList[0] = key;
|
defaults->searchList[0] = key;
|
||||||
|
|
||||||
@@ -292,16 +298,12 @@ WMGetDefaultsFromPath(char *path)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sharedDefaultsList)
|
if (sharedUserDefaults)
|
||||||
defaults->next = *sharedDefaultsList;
|
defaults->next = sharedUserDefaults;
|
||||||
sharedDefaultsList = &defaults;
|
sharedUserDefaults = defaults;
|
||||||
|
|
||||||
registerSaveOnExit();
|
registerSaveOnExit();
|
||||||
|
|
||||||
name = PLGetDescriptionIndent(defaults->defaults, 0);
|
|
||||||
puts(name);
|
|
||||||
free(name);
|
|
||||||
|
|
||||||
return defaults;
|
return defaults;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -425,6 +425,7 @@ wClipMakeTile(WScreen *scr, RImage *normalTile)
|
|||||||
ROperateLine(tile, RAddOperation, tp, 2, wPreferences.icon_size-3,
|
ROperateLine(tile, RAddOperation, tp, 2, wPreferences.icon_size-3,
|
||||||
pt, &light);
|
pt, &light);
|
||||||
|
|
||||||
|
/* arrow bevel */
|
||||||
ROperateLine(tile, RSubtractOperation, ICON_SIZE - 5 - as, 5,
|
ROperateLine(tile, RSubtractOperation, ICON_SIZE - 5 - as, 5,
|
||||||
ICON_SIZE - 6, 5, &dark);
|
ICON_SIZE - 6, 5, &dark);
|
||||||
ROperateLine(tile, RSubtractOperation, ICON_SIZE - 6 - as, 5,
|
ROperateLine(tile, RSubtractOperation, ICON_SIZE - 6 - as, 5,
|
||||||
@@ -439,11 +440,11 @@ wClipMakeTile(WScreen *scr, RImage *normalTile)
|
|||||||
ROperateLine(tile, RSubtractOperation, 0, tp-2, pt+1,
|
ROperateLine(tile, RSubtractOperation, 0, tp-2, pt+1,
|
||||||
wPreferences.icon_size-2, &light);
|
wPreferences.icon_size-2, &light);
|
||||||
|
|
||||||
|
/* arrow bevel */
|
||||||
ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 6 - as,
|
ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 6 - as,
|
||||||
5 + as, ICON_SIZE - 6, &dark);
|
5 + as, ICON_SIZE - 6, &dark);
|
||||||
ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 5 - as, 5,
|
ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 5 - as, 5,
|
||||||
ICON_SIZE - 6, &dark);
|
ICON_SIZE - 6, &dark);
|
||||||
|
|
||||||
ROperateLine(tile, RAddOperation, 5, ICON_SIZE - 6, 5 + as, ICON_SIZE - 6,
|
ROperateLine(tile, RAddOperation, 5, ICON_SIZE - 6, 5 + as, ICON_SIZE - 6,
|
||||||
&light);
|
&light);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user