work around fatal API flaw in gconf, so we can detect whether ints/bools are set before we substitute default values

This commit is contained in:
Robey Pointer 2000-09-08 03:30:22 +00:00
parent 855a3a8d2f
commit a66f4e1157
2 changed files with 39 additions and 14 deletions

View file

@ -1,3 +1,11 @@
2000-09-07 Robey Pointer <robey@eazel.com>
* components/services/install/lib/eazel-install-metadata.c:
(get_conf_string), (get_conf_int), (get_conf_boolean):
Work around fatal API flaw in gconf, so we can detect whether
ints/bools are set before we substitute default values.
2000-09-07 Andy Hertzfeld <andy@eazel.com>
* libnautilus-extensions/nautilus-icon-dnd.c:

View file

@ -33,7 +33,7 @@
#define INSTALL_GCONF_PATH "/apps/eazel-trilobite/install"
/* these are NOT reasonable defaults. */
#define DEFAULT_SERVER "ham.eazel.com"
#define DEFAULT_SERVER "services.eazel.com"
#define DEFAULT_PORT 8888
@ -78,6 +78,8 @@ get_conf_string (const char *key, const char *default_value)
value = gconf_get_string (conf_engine, full_key, NULL);
if ((value == NULL) && (default_value != NULL)) {
value = g_strdup (default_value);
/* write default value to gconf */
gconf_set_string (conf_engine, full_key, default_value, NULL);
}
g_free (full_key);
return value;
@ -87,14 +89,21 @@ static int
get_conf_int (const char *key, int default_value)
{
char *full_key;
int value;
GConfError *error = NULL;
GConfValue *value;
int out;
full_key = g_strdup_printf ("%s/%s", INSTALL_GCONF_PATH, key);
value = gconf_get_int (conf_engine, full_key, &error);
if (error != NULL) {
value = default_value;
gconf_error_destroy (error);
value = gconf_get (conf_engine, full_key, NULL);
if (value && (value->type == GCONF_VALUE_INT)) {
out = gconf_value_int (value);
gconf_value_destroy (value);
} else {
if (value) {
gconf_value_destroy (value);
}
out = default_value;
/* write default value to gconf */
gconf_set_int (conf_engine, full_key, default_value, NULL);
}
g_free (full_key);
@ -105,18 +114,26 @@ static gboolean
get_conf_boolean (const char *key, gboolean default_value)
{
char *full_key;
gboolean value;
GConfError *error = NULL;
GConfValue *value;
gboolean out;
full_key = g_strdup_printf ("%s/%s", INSTALL_GCONF_PATH, key);
value = gconf_get_bool (conf_engine, full_key, &error);
if (error != NULL) {
value = default_value;
gconf_error_destroy (error);
/* gconf API is so crappy that we can't use gconf_get_bool or anything nice */
value = gconf_get (conf_engine, full_key, NULL);
if (value && (value->type == GCONF_VALUE_BOOL)) {
out = gconf_value_bool (value);
gconf_value_destroy (value);
} else {
if (value) {
gconf_value_destroy (value);
}
out = default_value;
/* write default value to gconf */
gconf_set_bool (conf_engine, full_key, default_value, NULL);
}
g_free (full_key);
return value;
return out;
}
static URLType