summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivek Dasmohapatra <vivek@collabora.co.uk>2011-03-03 19:45:33 +0000
committerVivek Dasmohapatra <vivek@collabora.co.uk>2011-03-03 19:45:33 +0000
commit69a89f369a79e6a838cc947a2cc6d36c13d052ea (patch)
tree01e5fa0935cae8d8ac4bd6e11f023b03def93834
parentae8e6e74bb7e94b03d5c21239f0b1a93612ab8e4 (diff)
downloadtelepathy-mission-control-69a89f369a79e6a838cc947a2cc6d36c13d052ea.tar.gz
Update watch/unwatch functions and tracking hash to the new setup
-rw-r--r--src/mcd-account-manager-sso.c51
1 files changed, 12 insertions, 39 deletions
diff --git a/src/mcd-account-manager-sso.c b/src/mcd-account-manager-sso.c
index 470faf50..3cc247a3 100644
--- a/src/mcd-account-manager-sso.c
+++ b/src/mcd-account-manager-sso.c
@@ -392,24 +392,11 @@ static void unwatch_account_keys (McdAccountManagerSso *sso,
AgAccountId id)
{
gpointer watch_key = GUINT_TO_POINTER (id);
- GHashTable *account_watches = g_hash_table_lookup (sso->watches, watch_key);
+ WatchData *wd = g_hash_table_lookup (sso->watches, watch_key);
AgAccount *account = ag_manager_get_account (sso->ag_manager, id);
- GHashTableIter iter;
- gpointer key, value;
-
- if (account_watches == NULL || account == NULL)
- return;
-
- g_hash_table_iter_init (&iter, account_watches);
- while (g_hash_table_iter_next (&iter, &key, &value))
- {
- WatchData *watch = value;
-
- ag_account_remove_watch (account, watch->watch);
- watch->watch = NULL;
- free_watch_data (watch);
- }
+ if (wd != NULL && account != NULL)
+ ag_account_remove_watch (account, wd->watch);
g_hash_table_remove (sso->watches, watch_key);
}
@@ -477,36 +464,22 @@ static void _sso_updated (AgAccount * account,
}
static void watch_for_updates (McdAccountManagerSso *sso,
- AgAccount *account,
- Setting *setting)
+ AgAccount *account)
{
WatchData *data;
gpointer id = GUINT_TO_POINTER (account->id);
- GHashTable *account_watches = g_hash_table_lookup (sso->watches, id);
- if (!setting->readable)
+ /* already watching account? let's be idempotent */
+ if (g_hash_table_lookup (sso->watches, id) != NULL)
return;
- if (account_watches == NULL)
- {
- account_watches =
- g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
- g_hash_table_insert (sso->watches, id, account_watches);
- }
- else if (g_hash_table_lookup (account_watches, setting->mc_name) != NULL)
- {
- return; /* already being watched */
- }
+ DEBUG ("watching AG ID %u for updates", account->id);
- DEBUG ("watching %u.%s [%s] for updates",
- account->id,
- setting->mc_name,
- setting->ag_name);
+ g_signal_connect (account, "enabled", G_CALLBACK (_sso_toggled), sso);
- data = make_watch_data (sso, setting->mc_name);
- data->watch = ag_account_watch_key (account, setting->ag_name, _sso_updated,
- data);
- g_hash_table_insert (account_watches, g_strdup (setting->mc_name), data);
+ data = make_watch_data (sso);
+ data->watch = ag_account_watch_dir (account, "", _sso_updated, data);
+ g_hash_table_insert (sso->watches, id, data);
}
static void _sso_toggled (GObject *object,
@@ -738,7 +711,7 @@ mcd_account_manager_sso_init (McdAccountManagerSso *self)
g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_free);
self->watches =
g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL,
- (GDestroyNotify) g_hash_table_unref);
+ (GDestroyNotify) free_watch_data);
self->pending_signals = g_queue_new ();
}