desktop-data-model r7248 - trunk/engine-dbus
- From: otaylor svn gnome org
- To: svn-commits-list gnome org
- Subject: desktop-data-model r7248 - trunk/engine-dbus
- Date: Thu, 7 Feb 2008 23:02:14 +0000 (GMT)
Author: otaylor
Date: Thu Feb 7 23:02:14 2008
New Revision: 7248
URL: http://svn.gnome.org/viewvc/desktop-data-model?rev=7248&view=rev
Log:
Fix bug where we weren't handling removing buddies properly because
on pidgin startup we got BuddyChanged messages for each buddy
before our request to get the list of buddies returned.
Modified:
trunk/engine-dbus/hippo-dbus-im-client.c
Modified: trunk/engine-dbus/hippo-dbus-im-client.c
==============================================================================
--- trunk/engine-dbus/hippo-dbus-im-client.c (original)
+++ trunk/engine-dbus/hippo-dbus-im-client.c Thu Feb 7 23:02:14 2008
@@ -123,8 +123,7 @@
static void
notify_buddy(ImData *id,
- DBusMessageIter *buddy_iter,
- GHashTable *new_resource_ids /* may be NULL */)
+ DBusMessageIter *buddy_iter)
{
char *resource_id = NULL;
@@ -176,13 +175,15 @@
dbus_message_iter_next(buddy_iter);
}
+ resource_id = make_buddy_resource_id(id, protocol, name);
+
if (protocol == NULL || name == NULL) {
- /* not enough info */
- return;
+ hippo_im_remove_buddy(resource_id);
+
+ g_hash_table_remove(id->resource_ids, resource_id);
+ g_free(resource_id);
}
- resource_id = make_buddy_resource_id(id, protocol, name);
-
hippo_im_update_buddy(resource_id,
protocol,
name, alias,
@@ -202,12 +203,9 @@
g_debug("It looks like we already have icon %s", icon ? icon : "(none)");
}
- if (new_resource_ids)
- g_hash_table_replace(new_resource_ids,
- resource_id,
- GINT_TO_POINTER(1));
- else
- g_free(resource_id);
+ g_hash_table_replace(id->resource_ids,
+ resource_id,
+ GINT_TO_POINTER(1));
}
static void
@@ -225,7 +223,7 @@
g_assert(dbus_message_iter_get_arg_type(&toplevel_iter) == DBUS_TYPE_ARRAY);
dbus_message_iter_recurse(&toplevel_iter, &buddy_iter);
- notify_buddy(id, &buddy_iter, NULL);
+ notify_buddy(id, &buddy_iter);
}
@@ -263,10 +261,11 @@
load_state_from_buddy_list(ImData *id,
DBusMessageIter *buddy_array_iter)
{
- GHashTable *new_buddy_resource_ids;
-
- new_buddy_resource_ids = g_hash_table_new_full(g_str_hash, g_str_equal,
- g_free, NULL);
+ GHashTable *old_buddy_resource_ids;
+
+ old_buddy_resource_ids = id->resource_ids;
+ id->resource_ids = g_hash_table_new_full(g_str_hash, g_str_equal,
+ g_free, NULL);
while (dbus_message_iter_get_arg_type(buddy_array_iter) != DBUS_TYPE_INVALID) {
DBusMessageIter buddy_iter;
@@ -274,16 +273,15 @@
g_assert(dbus_message_iter_get_arg_type(buddy_array_iter) == DBUS_TYPE_ARRAY);
dbus_message_iter_recurse(buddy_array_iter, &buddy_iter);
- notify_buddy(id, &buddy_iter, new_buddy_resource_ids);
+ notify_buddy(id, &buddy_iter);
dbus_message_iter_next(buddy_array_iter);
}
/* Figure out what we removed */
- remove_old_resources(id->resource_ids, new_buddy_resource_ids);
+ remove_old_resources(old_buddy_resource_ids, id->resource_ids);
- g_hash_table_destroy(id->resource_ids);
- id->resource_ids = new_buddy_resource_ids;
+ g_hash_table_destroy(old_buddy_resource_ids);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]