diff options
author | Ankit Vani <a@nevitus.org> | 2013-09-07 14:50:37 +0530 |
---|---|---|
committer | Ankit Vani <a@nevitus.org> | 2013-09-07 14:50:37 +0530 |
commit | a03a5aa91b3ad9f03180ff70be5ea5db27356b92 (patch) | |
tree | 67e82c0451ed541966693f3c0ed04defa9cc6c69 /libpurple/roomlist.c | |
parent | 62f82816129f2757caa04ef6514e167533124392 (diff) | |
download | pidgin-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.c | 22 |
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; } /*@}*/ |