aboutsummaryrefslogtreecommitdiff
path: root/src/im-application-list.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/im-application-list.c')
-rw-r--r--src/im-application-list.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/im-application-list.c b/src/im-application-list.c
index b23923a..aaa1c38 100644
--- a/src/im-application-list.c
+++ b/src/im-application-list.c
@@ -1012,15 +1012,21 @@ status_activated (GSimpleAction * action, GVariant * param, gpointer user_data)
{
g_return_if_fail (IM_IS_APPLICATION_LIST(user_data));
ImApplicationList * list = IM_APPLICATION_LIST(user_data);
+ const gchar * status = g_variant_get_string(param, NULL);
g_simple_action_set_state(action, param);
- /* We assume all the applications are now seeing our status
- and updating. We don't need to track their status until
- they tell us different. */
- g_hash_table_remove_all(list->app_status);
+ GList * appshash = g_hash_table_get_keys(list->app_status);
+ GList * appsfree = g_list_copy_deep(appshash, (GCopyFunc)g_strdup, NULL);
+ GList * app;
+
+ for (app = appsfree; app != NULL; app = g_list_next(app)) {
+ g_hash_table_insert(list->app_status, app->data, g_strdup(status));
+ }
+
+ g_list_free(appshash);
+ g_list_free(appsfree);
- const gchar * status = g_variant_get_string(param, NULL);
g_signal_emit (list, signals[STATUS_SET], 0, status);
return;
@@ -1054,16 +1060,8 @@ im_application_list_set_status (ImApplicationList * list, const gchar * id, cons
g_hash_table_insert(list->app_status, im_application_list_canonical_id(id), g_strdup(status));
- GVariant * action_state = NULL;
- g_object_get(list->statusaction, "state", &action_state, NULL);
-
guint final_status = STATUS_ID_OFFLINE;
- if (action_state != NULL) {
- final_status = status2val(g_variant_get_string(action_state, NULL));
- g_variant_unref(action_state);
- }
-
GList * statuses = g_hash_table_get_values(list->app_status);
GList * statusentry;