diff options
author | Gary Kramlich <grim@reaperworld.com> | 2020-12-03 22:28:40 -0600 |
---|---|---|
committer | Gary Kramlich <grim@reaperworld.com> | 2020-12-03 22:28:40 -0600 |
commit | 7ce89935fd60981926a43a24b58cada5ec1b217c (patch) | |
tree | db9a90eaf23fde3e7e9977356fe21ab2f8a3a7b8 /libpurple/purplebuddypresence.c | |
parent | e39bfcd3513af588c78d587845c5eb6e30dd176e (diff) | |
download | pidgin-7ce89935fd60981926a43a24b58cada5ec1b217c.tar.gz |
Fix a bug where accounts were losing their active status.
Testing Done:
Compiled and ran locally, verified that an accounts active status is actually saved in `accounts.xml` now.
Reviewed at https://reviews.imfreedom.org/r/262/
Diffstat (limited to 'libpurple/purplebuddypresence.c')
-rw-r--r-- | libpurple/purplebuddypresence.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libpurple/purplebuddypresence.c b/libpurple/purplebuddypresence.c index 07c9ede42d..03051d7d27 100644 --- a/libpurple/purplebuddypresence.c +++ b/libpurple/purplebuddypresence.c @@ -29,6 +29,8 @@ struct _PurpleBuddyPresence { PurplePresence parent; PurpleBuddy *buddy; + + GList *statuses; }; enum { @@ -197,13 +199,24 @@ purple_buddy_presence_update_idle(PurplePresence *presence, gboolean old_idle) static GList * purple_buddy_presence_get_statuses(PurplePresence *presence) { - PurpleAccount *account = NULL; PurpleBuddyPresence *buddy_presence = NULL; buddy_presence = PURPLE_BUDDY_PRESENCE(presence); - account = purple_buddy_get_account(buddy_presence->buddy); - return purple_protocol_get_statuses(account, presence); + /* We cache purple_protocol_get_statuses because it creates all new + * statuses which loses at least the active attribute, which breaks all + * sorts of things. + */ + if(buddy_presence->statuses == NULL) { + PurpleAccount *account = NULL; + + account = purple_buddy_get_account(buddy_presence->buddy); + + buddy_presence->statuses = purple_protocol_get_statuses(account, + presence); + } + + return buddy_presence->statuses; } /****************************************************************************** @@ -250,6 +263,7 @@ purple_buddy_presence_finalize(GObject *obj) { PurpleBuddyPresence *presence = PURPLE_BUDDY_PRESENCE(obj); g_clear_object(&presence->buddy); + g_list_free_full(presence->statuses, g_object_unref); G_OBJECT_CLASS(purple_buddy_presence_parent_class)->finalize(obj); } |