diff options
Diffstat (limited to 'sync/src/sync_syncml_item.c')
-rw-r--r-- | sync/src/sync_syncml_item.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/sync/src/sync_syncml_item.c b/sync/src/sync_syncml_item.c index 00a9b56..0e57959 100644 --- a/sync/src/sync_syncml_item.c +++ b/sync/src/sync_syncml_item.c @@ -80,6 +80,7 @@ static const SyncGConfSchema syncml_config[] = { typedef struct { SyncSyncMLType type; + gchar *name; gchar *username; gchar *password; gchar *dir; @@ -152,7 +153,7 @@ sync_syncml_item_get_member (SyncItem *item) /* Configure OpenSync conf */ gconf_root = g_strconcat (GCONF_ROOT, - sync_item_get_name (item), NULL); + data->name, NULL); xml_config = g_strdup_printf (SYNCML_CONFIG, gconf_root, sync_syncml_type_to_type_string (data->type), @@ -173,7 +174,7 @@ sync_syncml_item_get_member (SyncItem *item) gconf_path = g_strconcat (gconf_root, NAME_KEY, NULL); gconf_client_set_string (client, gconf_path, - sync_item_get_name (item), NULL); + data->name, NULL); g_free (gconf_path); gconf_path = g_strconcat (gconf_root, ADR_KEY, NULL); @@ -218,9 +219,10 @@ sync_syncml_item_get_member (SyncItem *item) static void sync_syncml_free_data (SyncSyncMLItemData *data) { + g_free (data->name); g_free (data->username); g_free (data->password); - if (data->dir) g_free (data->dir); + g_free (data->dir); g_free (data); } @@ -231,14 +233,23 @@ sync_syncml_item_new (const gchar *name, const gchar *address, { SyncItem *item; SyncSyncMLItemData *data; + gchar *full_name; - item = sync_item_new (name, address, sync_syncml_item_get_member); + /* Append the type to the name for the OpenSync config, but use the + * same name for different types for the GConf config, to avoid + * duplicating configuration. + */ + full_name = g_strconcat (name, "-", + sync_syncml_type_to_type_string (type), NULL); + item = sync_item_new (full_name, address, sync_syncml_item_get_member); + g_free (full_name); data = g_new0 (SyncSyncMLItemData, 1); + data->name = g_strdup (name); data->type = type; data->username = username ? g_strdup (username) : g_strdup (""); data->password = password ? g_strdup (password) : g_strdup (""); - data->dir = dir ? g_strdup (dir) : NULL; + data->dir = dir ? g_strdup (dir) : g_strdup (""); sync_item_set_data (item, data); sync_item_set_data_free_func (item, |