From cf6fbf7e1351029a124cea0c59e0ae76c2e82ea5 Mon Sep 17 00:00:00 2001 From: dan Date: Mon, 19 Apr 1999 00:09:21 +0000 Subject: [PATCH] Fixed some problems with WMGetDefaultsFromPath(). --- WINGs/userdefaults.c | 188 ++++++++++++++++++++++++++------------------------- src/dock.c | 3 +- 2 files changed, 97 insertions(+), 94 deletions(-) diff --git a/WINGs/userdefaults.c b/WINGs/userdefaults.c index 1d0a5bc4..1f892eb6 100644 --- a/WINGs/userdefaults.c +++ b/WINGs/userdefaults.c @@ -30,10 +30,11 @@ typedef struct W_UserDefaults { static UserDefaults *sharedUserDefaults = NULL; -static UserDefaults **sharedDefaultsList = NULL; + static Bool registeredSaveOnExit = False; + extern char *WMGetApplicationName(); #define DEFAULTS_DIR "/Defaults" @@ -90,17 +91,12 @@ saveDefaultsChanges(int foo, void *bar) saveDefaultsChanges(void) #endif { - /* save the user defaults database */ - if (sharedUserDefaults && sharedUserDefaults->dirty) { - PLSave(sharedUserDefaults->appDomain, YES); - } - - /* now save the extra defaults databases we may have */ - if (sharedDefaultsList) { - UserDefaults *tmp = *sharedDefaultsList; + /* save the user defaults databases */ + if (sharedUserDefaults) { + UserDefaults *tmp = sharedUserDefaults; while (tmp) { - if (tmp->dirty) + if (tmp->appDomain && tmp->dirty) PLSave(tmp->appDomain, YES); tmp = tmp->next; } @@ -133,93 +129,102 @@ WMSynchronizeUserDefaults(WMUserDefaults *database) WMUserDefaults* WMGetStandardUserDefaults(void) -{ - if (!sharedUserDefaults) { - WMUserDefaults *defaults; - - proplist_t domain; - proplist_t key; - 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); +{ + WMUserDefaults *defaults; + proplist_t domain; + proplist_t key; + char *path; + int i; + + if (sharedUserDefaults) { + defaults = sharedUserDefaults; + while (defaults) { + /* Trick, path == NULL only for StandardUserDefaults db */ + if (defaults->path == NULL) + return defaults; + defaults = defaults->next; + } + } + + /* we didn't found the database we are looking for. Go read it. */ + defaults = wmalloc(sizeof(WMUserDefaults)); + memset(defaults, 0, sizeof(WMUserDefaults)); - defaults->appDomain = domain; + defaults->defaults = PLMakeDictionaryFromEntries(NULL, NULL, NULL); - if (domain) - PLInsertDictionaryEntry(defaults->defaults, key, domain); + defaults->searchList = wmalloc(sizeof(proplist_t)*3); - PLRelease(key); + /* application domain */ + key = PLMakeString(WMGetApplicationName()); + defaults->searchList[0] = key; - /* global domain */ - key = PLMakeString("WMGLOBAL"); - defaults->searchList[1] = key; + /* temporary kluge */ + if (strcmp(WMGetApplicationName(), "WindowMaker")==0) { + domain = NULL; + path = NULL; + } else { + path = wdefaultspathfordomain(PLGetString(key)); - path = wdefaultspathfordomain(PLGetString(key)); + domain = PLGetProplistWithPath(path); + } + if (!domain) { + proplist_t p; - domain = PLGetProplistWithPath(path); - - free(path); + domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL); + if (path) { + p = PLMakeString(path); + PLSetFilename(domain, p); + PLRelease(p); + } + } + if (path) + free(path); - if (!domain) - domain = PLMakeDictionaryFromEntries(NULL, NULL, NULL); + defaults->appDomain = domain; + + if (domain) + PLInsertDictionaryEntry(defaults->defaults, key, domain); - if (domain) - PLInsertDictionaryEntry(defaults->defaults, key, domain); + PLRelease(key); - PLRelease(key); - - /* terminate list */ - defaults->searchList[2] = NULL; + /* global domain */ + key = PLMakeString("WMGLOBAL"); + defaults->searchList[1] = key; - defaults->searchListArray=PLMakeArrayFromElements(NULL,NULL); - + path = wdefaultspathfordomain(PLGetString(key)); - i = 0; - while (defaults->searchList[i]) { - PLAppendArrayElement(defaults->searchListArray, - defaults->searchList[i]); - i++; - } + 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); - sharedUserDefaults = defaults; - - registerSaveOnExit(); + i = 0; + while (defaults->searchList[i]) { + PLAppendArrayElement(defaults->searchListArray, + defaults->searchList[i]); + i++; } - return sharedUserDefaults; + if (sharedUserDefaults) + defaults->next = sharedUserDefaults; + sharedUserDefaults = defaults; + + registerSaveOnExit(); + + return defaults; } @@ -234,10 +239,10 @@ WMGetDefaultsFromPath(char *path) assert(path != NULL); - if (sharedDefaultsList) { - defaults = *sharedDefaultsList; + if (sharedUserDefaults) { + defaults = sharedUserDefaults; while (defaults) { - if (strcmp(defaults->path, path) == 0) + if (defaults->path && strcmp(defaults->path, path) == 0) return defaults; defaults = defaults->next; } @@ -251,12 +256,13 @@ WMGetDefaultsFromPath(char *path) 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, '/'); if (!name) name = path; else name++; + key = PLMakeString(name); defaults->searchList[0] = key; @@ -292,16 +298,12 @@ WMGetDefaultsFromPath(char *path) i++; } - if (sharedDefaultsList) - defaults->next = *sharedDefaultsList; - sharedDefaultsList = &defaults; + if (sharedUserDefaults) + defaults->next = sharedUserDefaults; + sharedUserDefaults = defaults; registerSaveOnExit(); - name = PLGetDescriptionIndent(defaults->defaults, 0); - puts(name); - free(name); - return defaults; } diff --git a/src/dock.c b/src/dock.c index eb0c566d..5afc9ba3 100644 --- a/src/dock.c +++ b/src/dock.c @@ -425,6 +425,7 @@ wClipMakeTile(WScreen *scr, RImage *normalTile) ROperateLine(tile, RAddOperation, tp, 2, wPreferences.icon_size-3, pt, &light); + /* arrow bevel */ ROperateLine(tile, RSubtractOperation, ICON_SIZE - 5 - as, 5, ICON_SIZE - 6, 5, &dark); 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, wPreferences.icon_size-2, &light); + /* arrow bevel */ ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 6 - as, 5 + as, ICON_SIZE - 6, &dark); ROperateLine(tile, RSubtractOperation, 5, ICON_SIZE - 5 - as, 5, ICON_SIZE - 6, &dark); - ROperateLine(tile, RAddOperation, 5, ICON_SIZE - 6, 5 + as, ICON_SIZE - 6, &light); -- 2.11.4.GIT