summaryrefslogtreecommitdiffstats
path: root/sync/src/sync_syncml_item.c
diff options
context:
space:
mode:
Diffstat (limited to 'sync/src/sync_syncml_item.c')
-rw-r--r--sync/src/sync_syncml_item.c21
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,