diff options
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/gui/alarm-notify/save.c | 94 |
2 files changed, 42 insertions, 64 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index d45ea462e7..4701b1bfcf 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,15 @@ +2001-10-31 Ettore Perazzoli <ettore@ximian.com> + + * gui/alarm-notify/save.c (KEY_CALENDARS_TO_LOAD): + Removed. + (KEY_NUM_CALENDARS_TO_LOAD): New key, containing the number of + calendars to load. + (BASE_KEY_CALENDAR_TO_LOAD): New base key name for the URIs of the + calendars to load. + (save_calendars_to_load): Rewrote to not use a sequence, to work + around an ORBit bug that causes bonobo-moniker-xmldb to crash. + (get_calendars_to_load): Likewise. + 2001-10-30 Damon Chaplin <damon@ximian.com> * gui/dialogs/comp-editor.c (comp_editor_remove_page): disconnect diff --git a/calendar/gui/alarm-notify/save.c b/calendar/gui/alarm-notify/save.c index d4666d8cf6..72a52c24fa 100644 --- a/calendar/gui/alarm-notify/save.c +++ b/calendar/gui/alarm-notify/save.c @@ -33,7 +33,8 @@ /* Key names for the configuration values */ #define KEY_LAST_NOTIFICATION_TIME "/Calendar/AlarmNotify/LastNotificationTime" -#define KEY_CALENDARS_TO_LOAD "/Calendar/AlarmNotify/CalendarsToLoad" +#define KEY_NUM_CALENDARS_TO_LOAD "/Calendar/AlarmNotify/NumCalendarsToLoad" +#define BASE_KEY_CALENDAR_TO_LOAD "/Calendar/AlarmNotify/CalendarToLoad" @@ -145,10 +146,8 @@ void save_calendars_to_load (GPtrArray *uris) { Bonobo_ConfigDatabase db; - int len, i; - GNOME_Evolution_Calendar_StringSeq *seq; CORBA_Environment ev; - CORBA_any *any; + int len, i; g_return_if_fail (uris != NULL); @@ -156,38 +155,30 @@ save_calendars_to_load (GPtrArray *uris) if (db == CORBA_OBJECT_NIL) return; - /* Build the sequence of URIs */ - len = uris->len; - seq = GNOME_Evolution_Calendar_StringSeq__alloc (); - seq->_length = len; - seq->_buffer = CORBA_sequence_CORBA_string_allocbuf (len); - CORBA_sequence_set_release (seq, TRUE); + CORBA_exception_init (&ev); + + bonobo_config_set_long (db, KEY_NUM_CALENDARS_TO_LOAD, len, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + g_warning ("Cannot save config key %s -- %s", KEY_NUM_CALENDARS_TO_LOAD, ev._repo_id); for (i = 0; i < len; i++) { - char *uri; + const char *uri; + char *key; uri = uris->pdata[i]; - seq->_buffer[i] = CORBA_string_dup (uri); - } - - /* Save it */ - any = bonobo_arg_new (TC_GNOME_Evolution_Calendar_StringSeq); - any->_value = seq; - - CORBA_exception_init (&ev); - - bonobo_config_set_value (db, KEY_CALENDARS_TO_LOAD, any, &ev); - - if (ev._major != CORBA_NO_EXCEPTION) - g_message ("save_calendars_to_load(): Could not save the list of calendars"); + key = g_strdup_printf ("%s%d", BASE_KEY_CALENDAR_TO_LOAD, i); + bonobo_config_set_string (db, key, uri, &ev); + if (ev._major != CORBA_NO_EXCEPTION) + g_warning ("Cannot save config key %s -- %s", key, ev._repo_id); + g_free (key); + } CORBA_exception_free (&ev); discard_config_db (db); - bonobo_arg_release (any); /* this releases the sequence */ } /** @@ -202,11 +193,9 @@ GPtrArray * get_calendars_to_load (void) { Bonobo_ConfigDatabase db; - GNOME_Evolution_Calendar_StringSeq *seq; CORBA_Environment ev; - CORBA_any *any; - int len, i; GPtrArray *uris; + int len, i; db = get_config_db (); if (db == CORBA_OBJECT_NIL) @@ -216,49 +205,26 @@ get_calendars_to_load (void) CORBA_exception_init (&ev); - any = bonobo_config_get_value (db, KEY_CALENDARS_TO_LOAD, - TC_GNOME_Evolution_Calendar_StringSeq, - &ev); - discard_config_db (db); - - if (ev._major == CORBA_USER_EXCEPTION) { - char *ex_id; - - ex_id = CORBA_exception_id (&ev); - - if (strcmp (ex_id, ex_Bonobo_ConfigDatabase_NotFound) == 0) { - CORBA_exception_free (&ev); - uris = g_ptr_array_new (); - g_ptr_array_set_size (uris, 0); - return uris; - } - } - + len = bonobo_config_get_long_with_default (db, KEY_NUM_CALENDARS_TO_LOAD, 0, &ev); if (ev._major != CORBA_NO_EXCEPTION) { - g_message ("get_calendars_to_load(): Could not get the list of calendars"); - CORBA_exception_free (&ev); - return NULL; + g_warning ("Cannot read key %s -- %s", KEY_NUM_CALENDARS_TO_LOAD, ev._repo_id); + len = 0; } - CORBA_exception_free (&ev); - - /* Decode the value */ - - seq = any->_value; - len = seq->_length; - uris = g_ptr_array_new (); g_ptr_array_set_size (uris, len); - for (i = 0; i < len; i++) - uris->pdata[i] = g_strdup (seq->_buffer[i]); + for (i = 0; i < len; i++) { + char *key; + + key = g_strdup_printf ("%s%d", BASE_KEY_CALENDAR_TO_LOAD, i); + uris->pdata[i] = bonobo_config_get_string_with_default (db, key, "", &ev); + if (ev._major != NULL) + g_warning ("Cannot read key %s -- %s", key, ev._repo_id); + g_free (key); + } -#if 0 - /* FIXME: The any and sequence are leaked. If we release them this way, - * we crash inside the ORB freeing routines :( - */ - bonobo_arg_release (any); -#endif + CORBA_exception_free (&ev); return uris; } |