summaryrefslogtreecommitdiff
path: root/libpurple/roomlist.c
diff options
context:
space:
mode:
authorAnkit Vani <a@nevitus.org>2013-09-07 14:50:37 +0530
committerAnkit Vani <a@nevitus.org>2013-09-07 14:50:37 +0530
commita03a5aa91b3ad9f03180ff70be5ea5db27356b92 (patch)
tree67e82c0451ed541966693f3c0ed04defa9cc6c69 /libpurple/roomlist.c
parent62f82816129f2757caa04ef6514e167533124392 (diff)
downloadpidgin-a03a5aa91b3ad9f03180ff70be5ea5db27356b92.tar.gz
Added protocol interface methods connection_new, roomlist_new, whiteboard_new, xfer_new.
These functions can be used to return protocol-specific derived types. 'state' from PurpleWhiteboard has been removed since only yahoo uses it. Yahoo's whiteboard subclass can handle this.
Diffstat (limited to 'libpurple/roomlist.c')
-rw-r--r--libpurple/roomlist.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/libpurple/roomlist.c b/libpurple/roomlist.c
index e3f4be9658..6d68b5c978 100644
--- a/libpurple/roomlist.c
+++ b/libpurple/roomlist.c
@@ -419,12 +419,26 @@ purple_roomlist_get_type(void)
PurpleRoomlist *purple_roomlist_new(PurpleAccount *account)
{
+ PurpleRoomlist *list;
+ PurpleProtocol *protocol;
+
g_return_val_if_fail(account != NULL, NULL);
- return g_object_new(PURPLE_TYPE_ROOMLIST,
- PROP_ACCOUNT_S, account,
- NULL
- );
+ protocol = purple_protocols_find(purple_account_get_protocol_id(account));
+
+ g_return_val_if_fail(protocol != NULL, NULL);
+
+ if (PURPLE_PROTOCOL_IMPLEMENTS(protocol, roomlist_new))
+ list = purple_protocol_iface_roomlist_new(protocol, account);
+ else
+ list = g_object_new(PURPLE_TYPE_ROOMLIST,
+ PROP_ACCOUNT_S, account,
+ NULL
+ );
+
+ g_return_val_if_fail(list != NULL, NULL);
+
+ return list;
}
/*@}*/