Mercurial > pidgin.yaz
diff libpurple/prpl.h @ 23111:718a9c287839
Use up the last padding for PurplePluginProtocolInfo in a way that allows
adding newer functions without causing any major version bump. This is
based on the changes from the .vv branch. I changed the
PURPLE_PROTOCOL_PLUGIN_HAS_FUNC macro a little so it can be used for the
old as well as the new functions. Someone should confirm this looks OK.
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Mon, 05 May 2008 06:19:46 +0000 |
parents | 3fee7e01e51c |
children | bb41bdce8981 |
line wrap: on
line diff
--- a/libpurple/prpl.h Wed Apr 30 21:09:59 2008 +0000 +++ b/libpurple/prpl.h Mon May 05 06:19:46 2008 +0000 @@ -398,9 +398,34 @@ gboolean (*send_attention)(PurpleConnection *gc, const char *username, guint type); GList *(*get_attention_types)(PurpleAccount *acct); - void (*_purple_reserved4)(void); + /** + * The size of the PurplePluginProtocolInfo. This should always be sizeof(PurplePluginProtocolInfo). + * This allows adding more functions to this struct without requiring a major version bump. + */ + unsigned long struct_size; + + /* NOTE: + * If more functions are added, they should accessed using the following syntax: + * + * if (PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, new_function)) + * prpl->new_function(...); + * + * instead of + * + * if (prpl->new_function != NULL) + * prpl->new_function(...); + * + * The PURPLE_PROTOCOL_PLUGIN_HAS_FUNC macro can be used for the older member + * functions (e.g. login, send_im etc.) too. + */ }; +#define PURPLE_PROTOCOL_PLUGIN_HAS_FUNC(prpl, member) \ + (((G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < G_STRUCT_OFFSET(PurplePluginProtocolInfo, struct_size)) \ + || (G_STRUCT_OFFSET(PurplePluginProtocolInfo, member) < prpl->struct_size)) && \ + prpl->member != NULL) + + #define PURPLE_IS_PROTOCOL_PLUGIN(plugin) \ ((plugin)->info->type == PURPLE_PLUGIN_PROTOCOL)