Tue, 01 Oct 2019 07:19:14 +0000
Merged in default (pull request #578)
Remove Purple type macros
--- a/ChangeLog.API Tue Oct 01 02:21:00 2019 -0400 +++ b/ChangeLog.API Tue Oct 01 07:19:14 2019 +0000 @@ -78,17 +78,6 @@ * purple_plugin_info_get_pref_request_cb * purple_plugin_info_get_ui_data * purple_plugin_info_set_ui_data - * purple_plugin_register_type - * purple_plugin_add_interface - * PURPLE_DEFINE_TYPE - * PURPLE_DEFINE_TYPE_EXTENDED - * PURPLE_IMPLEMENT_INTERFACE_STATIC - * PURPLE_IMPLEMENT_INTERFACE - * PURPLE_DEFINE_DYNAMIC_TYPE - * PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED - * PURPLE_IMPLEMENT_INTERFACE_DYNAMIC - * PURPLE_DEFINE_STATIC_TYPE - * PURPLE_DEFINE_STATIC_TYPE_EXTENDED * PurpleProtocol, inherits GObject. Please see the documentation for details. * PurpleProtocolAction
--- a/finch/plugins/grouping.c Tue Oct 01 02:21:00 2019 -0400 +++ b/finch/plugins/grouping.c Tue Oct 01 07:19:14 2019 +0000 @@ -41,18 +41,23 @@ * GObject code */ static void -finch_grouping_node_init(FinchGroupingNode *node) +finch_grouping_node_init(G_GNUC_UNUSED FinchGroupingNode *node) { } static void -finch_grouping_node_class_init(FinchGroupingNodeClass *klass) +finch_grouping_node_class_init(G_GNUC_UNUSED FinchGroupingNodeClass *klass) +{ +} + +static void +finch_grouping_node_class_finalize(G_GNUC_UNUSED FinchGroupingNodeClass *klass) { } GType finch_grouping_node_get_type(void); -PURPLE_DEFINE_TYPE(FinchGroupingNode, finch_grouping_node, - PURPLE_TYPE_BLIST_NODE); +G_DEFINE_DYNAMIC_TYPE(FinchGroupingNode, finch_grouping_node, + PURPLE_TYPE_BLIST_NODE); /** * Online/Offline @@ -358,7 +363,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - finch_grouping_node_register_type(plugin); + finch_grouping_node_register_type(G_TYPE_MODULE(plugin)); default_manager = finch_blist_manager_find("default");
--- a/libpurple/plugins.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/plugins.c Tue Oct 01 07:19:14 2019 +0000 @@ -262,29 +262,6 @@ plugins_to_disable = g_list_prepend(plugins_to_disable, plugin); } -GType -purple_plugin_register_type(PurplePlugin *plugin, GType parent, - const gchar *name, const GTypeInfo *info, - GTypeFlags flags) -{ - g_return_val_if_fail(G_IS_TYPE_MODULE(plugin), G_TYPE_INVALID); - - return g_type_module_register_type(G_TYPE_MODULE(plugin), - parent, name, info, flags); -} - -void -purple_plugin_add_interface(PurplePlugin *plugin, GType instance_type, - GType interface_type, - const GInterfaceInfo *interface_info) -{ - g_return_if_fail(G_IS_TYPE_MODULE(plugin)); - - g_type_module_add_interface(G_TYPE_MODULE(plugin), - instance_type, interface_type, - interface_info); -} - gboolean purple_plugin_is_internal(PurplePlugin *plugin) { @@ -629,19 +606,8 @@ return purple_plugin_action_new(action->label, action->callback); } -GType -purple_plugin_action_get_type(void) -{ - static GType type = 0; - - if (G_UNLIKELY(type == 0)) { - type = g_boxed_type_register_static("PurplePluginAction", - (GBoxedCopyFunc)purple_plugin_action_copy, - (GBoxedFreeFunc)purple_plugin_action_free); - } - - return type; -} +G_DEFINE_BOXED_TYPE(PurplePluginAction, purple_plugin_action, + purple_plugin_action_copy, purple_plugin_action_free) /************************************************************************** * Plugins API
--- a/libpurple/plugins.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/plugins.h Tue Oct 01 07:19:14 2019 +0000 @@ -54,17 +54,9 @@ typedef GPluginPluginInterface PurplePluginInterface; #define PURPLE_TYPE_PLUGIN_INFO (purple_plugin_info_get_type()) -#define PURPLE_PLUGIN_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PURPLE_TYPE_PLUGIN_INFO, PurplePluginInfo)) -#define PURPLE_PLUGIN_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PURPLE_TYPE_PLUGIN_INFO, PurplePluginInfoClass)) -#define PURPLE_IS_PLUGIN_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PURPLE_TYPE_PLUGIN_INFO)) -#define PURPLE_IS_PLUGIN_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PURPLE_TYPE_PLUGIN_INFO)) -#define PURPLE_PLUGIN_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PURPLE_TYPE_PLUGIN_INFO, PurplePluginInfoClass)) - typedef struct _PurplePluginInfo PurplePluginInfo; -typedef struct _PurplePluginInfoClass PurplePluginInfoClass; #define PURPLE_TYPE_PLUGIN_ACTION (purple_plugin_action_get_type()) - typedef struct _PurplePluginAction PurplePluginAction; #include "pluginpref.h" @@ -145,16 +137,6 @@ gpointer ui_data; }; -struct _PurplePluginInfoClass { - GPluginPluginInfoClass parent_class; - - /*< private >*/ - void (*_purple_reserved1)(void); - void (*_purple_reserved2)(void); - void (*_purple_reserved3)(void); - void (*_purple_reserved4)(void); -}; - /** * PurplePluginAction: * @label: The label to display in the user interface. @@ -226,113 +208,6 @@ return pluginunload(PURPLE_PLUGIN(p), e); \ } -/** - * PURPLE_DEFINE_TYPE: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, words separated by '_'. - * @T_P: The #GType of the parent type. - * - * A convenience macro for type implementations, which defines a *_get_type() - * function; and a *_register_type() function for use in your plugin's load - * function. You must define an instance initialization function *_init() - * and a class initialization function *_class_init() for the type. - */ -#define PURPLE_DEFINE_TYPE(TN, t_n, T_P) \ - PURPLE_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P) - -/** - * PURPLE_DEFINE_TYPE_EXTENDED: - * @TN: The name of the new type, in Camel case. - * @t_n: The name of the new type, in lowercase, words separated by '_'. - * @T_P: The #GType of the parent type. - * @flags: #GTypeFlags to register the type with. - * @CODE: Custom code that gets inserted in *_get_type(). - * - * A more general version of PURPLE_DEFINE_TYPE() which allows you to - * specify #GTypeFlags and custom code. - */ -#define PURPLE_DEFINE_TYPE_EXTENDED \ - PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED - -/** - * PURPLE_IMPLEMENT_INTERFACE_STATIC: - * @TYPE_IFACE: The #GType of the interface to add. - * @iface_init: The interface init function. - * - * A convenience macro to ease static interface addition in the CODE section - * of PURPLE_DEFINE_TYPE_EXTENDED(). You should use this macro if the - * interface is a part of the libpurple core. - */ -#define PURPLE_IMPLEMENT_INTERFACE_STATIC(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - g_type_add_interface_static(type_id, TYPE_IFACE, &interface_info); \ -} - -/** - * PURPLE_IMPLEMENT_INTERFACE: - * @TYPE_IFACE: The #GType of the interface to add. - * @iface_init: The interface init function. - * - * A convenience macro to ease interface addition in the CODE section - * of PURPLE_DEFINE_TYPE_EXTENDED(). You should use this macro if the - * interface lives in the plugin. - */ -#define PURPLE_IMPLEMENT_INTERFACE(TYPE_IFACE, iface_init) \ - PURPLE_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) - -/** - * PURPLE_DEFINE_DYNAMIC_TYPE: - * - * A convenience macro for dynamic type implementations. - */ -#define PURPLE_DEFINE_DYNAMIC_TYPE(TN, t_n, T_P) \ - PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED (TN, t_n, T_P, 0, {}) - -/** - * PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED: - * - * A more general version of PURPLE_DEFINE_DYNAMIC_TYPE(). - */ -#define PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \ -static GType type_name##_type_id = 0; \ -G_MODULE_EXPORT GType type_name##_get_type(void) { \ - return type_name##_type_id; \ -} \ -void type_name##_register_type(PurplePlugin *); \ -void type_name##_register_type(PurplePlugin *plugin) { \ - GType type_id; \ - const GTypeInfo type_info = { \ - sizeof (TypeName##Class), \ - (GBaseInitFunc) NULL, \ - (GBaseFinalizeFunc) NULL, \ - (GClassInitFunc) type_name##_class_init, \ - (GClassFinalizeFunc) NULL, \ - NULL, \ - sizeof (TypeName), \ - 0, \ - (GInstanceInitFunc) type_name##_init, \ - NULL \ - }; \ - type_id = purple_plugin_register_type(plugin, TYPE_PARENT, #TypeName, \ - &type_info, (GTypeFlags) flags); \ - type_name##_type_id = type_id; \ - { CODE ; } \ -} - -/** - * PURPLE_IMPLEMENT_INTERFACE_DYNAMIC: - * - * A convenience macro to ease dynamic interface addition. - */ -#define PURPLE_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \ - const GInterfaceInfo interface_info = { \ - (GInterfaceInitFunc) iface_init, NULL, NULL \ - }; \ - purple_plugin_add_interface(plugin, type_id, TYPE_IFACE, &interface_info); \ -} - G_BEGIN_DECLS /**************************************************************************/ @@ -404,37 +279,6 @@ void purple_plugin_disable(PurplePlugin *plugin); /** - * purple_plugin_register_type: - * @plugin: The plugin that is registering the type. - * @parent: Type from which this type will be derived. - * @name: Name of the new type. - * @info: Information to initialize and destroy a type's classes and - * instances. - * @flags: Bitwise combination of values that determines the nature - * (e.g. abstract or not) of the type. - * - * Registers a new dynamic type. - * - * Returns: The new GType, or %G_TYPE_INVALID if registration failed. - */ -GType purple_plugin_register_type(PurplePlugin *plugin, GType parent, - const gchar *name, const GTypeInfo *info, - GTypeFlags flags); - -/** - * purple_plugin_add_interface: - * @plugin: The plugin that is adding the interface type. - * @instance_type: The GType of the instantiable type. - * @interface_type: The GType of the interface type. - * @interface_info: Information used to manage the interface type. - * - * Adds a dynamic interface type to an instantiable type. - */ -void purple_plugin_add_interface(PurplePlugin *plugin, GType instance_type, - GType interface_type, - const GInterfaceInfo *interface_info); - -/** * purple_plugin_is_internal: * @plugin: The plugin. * @@ -467,7 +311,8 @@ * * Returns: The #GType for the #PurplePluginInfo object. */ -GType purple_plugin_info_get_type(void); +G_DECLARE_FINAL_TYPE(PurplePluginInfo, purple_plugin_info, PURPLE, PLUGIN_INFO, + GPluginPluginInfo) /** * purple_plugin_info_new:
--- a/libpurple/protocol.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocol.c Tue Oct 01 07:19:14 2019 +0000 @@ -119,20 +119,6 @@ protocol->icon_spec = NULL; } -void -purple_protocol_override(PurpleProtocol *protocol, - PurpleProtocolOverrideFlags flags) -{ - g_return_if_fail(PURPLE_IS_PROTOCOL(protocol)); - - if (flags & PURPLE_PROTOCOL_OVERRIDE_USER_SPLITS) - user_splits_free(protocol); - if (flags & PURPLE_PROTOCOL_OVERRIDE_PROTOCOL_OPTIONS) - account_options_free(protocol); - if (flags & PURPLE_PROTOCOL_OVERRIDE_ICON_SPEC) - icon_spec_free(protocol); -} - /************************************************************************** * GObject stuff **************************************************************************/
--- a/libpurple/protocol.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocol.h Tue Oct 01 07:19:14 2019 +0000 @@ -56,21 +56,6 @@ #include "whiteboard.h" /** - * PurpleProtocolOverrideFlags: - * - * Flags to indicate what base protocol's data a derived protocol wants to - * override. - * - * See purple_protocol_override(). - */ -typedef enum /*< flags >*/ -{ - PURPLE_PROTOCOL_OVERRIDE_USER_SPLITS = 1 << 1, - PURPLE_PROTOCOL_OVERRIDE_PROTOCOL_OPTIONS = 1 << 2, - PURPLE_PROTOCOL_OVERRIDE_ICON_SPEC = 1 << 3, -} PurpleProtocolOverrideFlags; - -/** * PurpleProtocol: * @id: Protocol ID * @name: Translated name of the protocol @@ -746,19 +731,6 @@ */ PurpleWhiteboardOps *purple_protocol_get_whiteboard_ops(const PurpleProtocol *protocol); -/** - * purple_protocol_override: - * @protocol: The protocol instance. - * @flags: What instance data to delete. - * - * Lets derived protocol types override the base type's instance data, such as - * protocol options, user splits, icon spec, etc. - * This function is called in the *_init() function of your derived protocol, - * to delete the parent type's data so you can define your own. - */ -void purple_protocol_override(PurpleProtocol *protocol, - PurpleProtocolOverrideFlags flags); - /**************************************************************************/ /* Protocol Class API */ /**************************************************************************/
--- a/libpurple/protocols/bonjour/bonjour.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/bonjour/bonjour.c Tue Oct 01 07:19:14 2019 +0000 @@ -630,8 +630,9 @@ } static void -bonjour_protocol_init(PurpleProtocol *protocol) +bonjour_protocol_init(BonjourProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option; protocol->id = "prpl-bonjour"; @@ -662,12 +663,19 @@ } static void -bonjour_protocol_class_init(PurpleProtocolClass *klass) +bonjour_protocol_class_init(BonjourProtocolClass *klass) { - klass->login = bonjour_login; - klass->close = bonjour_close; - klass->status_types = bonjour_status_types; - klass->list_icon = bonjour_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = bonjour_login; + protocol_class->close = bonjour_close; + protocol_class->status_types = bonjour_status_types; + protocol_class->list_icon = bonjour_list_icon; +} + +static void +bonjour_protocol_class_finalize(G_GNUC_UNUSED BonjourProtocolClass *klass) +{ } static void @@ -704,21 +712,20 @@ xfer_iface->new_xfer = bonjour_new_xfer; } -PURPLE_DEFINE_TYPE_EXTENDED( - BonjourProtocol, bonjour_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + BonjourProtocol, bonjour_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - bonjour_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + bonjour_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - bonjour_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + bonjour_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - bonjour_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + bonjour_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - bonjour_protocol_xfer_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + bonjour_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -741,7 +748,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - bonjour_protocol_register_type(plugin); + bonjour_protocol_register_type(G_TYPE_MODULE(plugin)); xep_xfer_register(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/facebook/facebook.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/facebook/facebook.c Tue Oct 01 07:19:14 2019 +0000 @@ -1536,8 +1536,9 @@ } static void -facebook_protocol_init(PurpleProtocol *protocol) +facebook_protocol_init(FacebookProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); GList *opts = NULL; PurpleAccountOption *opt; @@ -1573,12 +1574,19 @@ } static void -facebook_protocol_class_init(PurpleProtocolClass *klass) +facebook_protocol_class_init(FacebookProtocolClass *klass) { - klass->login = fb_login; - klass->close = fb_close; - klass->status_types = fb_status_types; - klass->list_icon = fb_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = fb_login; + protocol_class->close = fb_close; + protocol_class->status_types = fb_status_types; + protocol_class->list_icon = fb_list_icon; +} + +static void +facebook_protocol_class_finalize(G_GNUC_UNUSED FacebookProtocolClass *klass) +{ } static void @@ -1621,20 +1629,19 @@ iface->cancel = fb_roomlist_cancel; } -PURPLE_DEFINE_TYPE_EXTENDED( - FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + FacebookProtocol, facebook_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - facebook_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - facebook_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - facebook_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - facebook_protocol_chat_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - facebook_protocol_roomlist_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + facebook_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + facebook_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + facebook_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + facebook_protocol_chat_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + facebook_protocol_roomlist_iface_init)); static void fb_cmds_register(void) @@ -1694,7 +1701,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - facebook_protocol_register_type(plugin); + facebook_protocol_register_type(G_TYPE_MODULE(plugin)); fb_protocol = purple_protocols_add(FACEBOOK_TYPE_PROTOCOL, error); if (fb_protocol == NULL) {
--- a/libpurple/protocols/gg/gg.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/gg/gg.c Tue Oct 01 07:19:14 2019 +0000 @@ -1000,8 +1000,9 @@ } static void -ggp_protocol_init(PurpleProtocol *protocol) +ggp_protocol_init(GGPProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option; GList *encryption_options = NULL; GList *protocol_version = NULL; @@ -1052,12 +1053,19 @@ } static void -ggp_protocol_class_init(PurpleProtocolClass *klass) +ggp_protocol_class_init(GGPProtocolClass *klass) { - klass->login = ggp_login; - klass->close = ggp_close; - klass->status_types = ggp_status_types; - klass->list_icon = ggp_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = ggp_login; + protocol_class->close = ggp_close; + protocol_class->status_types = ggp_status_types; + protocol_class->list_icon = ggp_list_icon; +} + +static void +ggp_protocol_class_finalize(G_GNUC_UNUSED GGPProtocolClass *klass) +{ } static void @@ -1130,30 +1138,29 @@ xfer_iface->new_xfer = ggp_edisc_xfer_send_new; } -PURPLE_DEFINE_TYPE_EXTENDED( - GGPProtocol, ggp_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + GGPProtocol, ggp_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - ggp_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + ggp_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - ggp_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + ggp_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - ggp_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + ggp_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - ggp_protocol_chat_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + ggp_protocol_chat_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - ggp_protocol_roomlist_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + ggp_protocol_roomlist_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - ggp_protocol_privacy_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + ggp_protocol_privacy_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - ggp_protocol_xfer_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + ggp_protocol_xfer_iface_init)); static gchar * plugin_extra(PurplePlugin *plugin) @@ -1189,7 +1196,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - ggp_protocol_register_type(plugin); + ggp_protocol_register_type(G_TYPE_MODULE(plugin)); ggp_xfer_register(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/irc/irc.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/irc/irc.c Tue Oct 01 07:19:14 2019 +0000 @@ -954,8 +954,9 @@ } static void -irc_protocol_init(PurpleProtocol *protocol) +irc_protocol_init(IRCProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split; PurpleAccountOption *option; @@ -1002,12 +1003,19 @@ } static void -irc_protocol_class_init(PurpleProtocolClass *klass) +irc_protocol_class_init(IRCProtocolClass *klass) { - klass->login = irc_login; - klass->close = irc_close; - klass->status_types = irc_status_types; - klass->list_icon = irc_blist_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = irc_login; + protocol_class->close = irc_close; + protocol_class->status_types = irc_status_types; + protocol_class->list_icon = irc_blist_icon; +} + +static void +irc_protocol_class_finalize(G_GNUC_UNUSED IRCProtocolClass *klass) +{ } static void @@ -1062,27 +1070,26 @@ xfer_iface->new_xfer = irc_dccsend_new_xfer; } -PURPLE_DEFINE_TYPE_EXTENDED( - IRCProtocol, irc_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + IRCProtocol, irc_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - irc_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + irc_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - irc_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + irc_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - irc_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + irc_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - irc_protocol_chat_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + irc_protocol_chat_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - irc_protocol_roomlist_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + irc_protocol_roomlist_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - irc_protocol_xfer_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + irc_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -1105,7 +1112,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - irc_protocol_register_type(plugin); + irc_protocol_register_type(G_TYPE_MODULE(plugin)); irc_xfer_register(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/jabber/gtalk.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/jabber/gtalk.c Tue Oct 01 07:19:14 2019 +0000 @@ -34,8 +34,9 @@ } static void -gtalk_protocol_init(PurpleProtocol *protocol) +gtalk_protocol_init(GTalkProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split; PurpleAccountOption *option; GList *encryption_values = NULL; @@ -104,9 +105,16 @@ } static void -gtalk_protocol_class_init(PurpleProtocolClass *klass) +gtalk_protocol_class_init(GTalkProtocolClass *klass) { - klass->list_icon = gtalk_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->list_icon = gtalk_list_icon; +} + +static void +gtalk_protocol_class_finalize(G_GNUC_UNUSED GTalkProtocolClass *klass) +{ } static void @@ -117,9 +125,16 @@ server_iface->unregister_user = NULL; } -PURPLE_DEFINE_TYPE_EXTENDED( - GTalkProtocol, gtalk_protocol, JABBER_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + GTalkProtocol, gtalk_protocol, JABBER_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + gtalk_protocol_server_iface_init)); - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - gtalk_protocol_server_iface_init) -); +/* This exists solely because the above macro makes gtalk_protocol_register_type + * static. */ +void +gtalk_protocol_register(PurplePlugin *plugin) +{ + gtalk_protocol_register_type(G_TYPE_MODULE(plugin)); +}
--- a/libpurple/protocols/jabber/gtalk.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/jabber/gtalk.h Tue Oct 01 07:19:14 2019 +0000 @@ -45,7 +45,8 @@ /** * Registers the GTalkProtocol type in the type system. */ -void gtalk_protocol_register_type(PurplePlugin *plugin); +G_GNUC_INTERNAL +void gtalk_protocol_register(PurplePlugin *plugin); /** * Returns the GType for the GTalkProtocol object.
--- a/libpurple/protocols/jabber/jabber.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/jabber/jabber.c Tue Oct 01 07:19:14 2019 +0000 @@ -4091,8 +4091,10 @@ } static void -jabber_protocol_init(PurpleProtocol *protocol) +jabber_protocol_init(JabberProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + protocol->id = "prpl-jabber"; protocol->name = "XMPP"; protocol->options = OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME | @@ -4109,12 +4111,19 @@ } static void -jabber_protocol_class_init(PurpleProtocolClass *klass) +jabber_protocol_class_init(JabberProtocolClass *klass) { - klass->login = jabber_login; - klass->close = jabber_close; - klass->status_types = jabber_status_types; - klass->list_icon = jabber_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = jabber_login; + protocol_class->close = jabber_close; + protocol_class->status_types = jabber_status_types; + protocol_class->list_icon = jabber_list_icon; +} + +static void +jabber_protocol_class_finalize(G_GNUC_UNUSED JabberProtocolClass *klass) +{ } static void @@ -4210,36 +4219,36 @@ xfer_iface->new_xfer = jabber_si_new_xfer; } -PURPLE_DEFINE_TYPE_EXTENDED( - JabberProtocol, jabber_protocol, PURPLE_TYPE_PROTOCOL, G_TYPE_FLAG_ABSTRACT, - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - jabber_protocol_client_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - jabber_protocol_server_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - jabber_protocol_im_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - jabber_protocol_chat_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - jabber_protocol_privacy_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - jabber_protocol_roomlist_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ATTENTION, - jabber_protocol_attention_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_MEDIA, - jabber_protocol_media_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - jabber_protocol_xfer_iface_init) -); +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + JabberProtocol, jabber_protocol, PURPLE_TYPE_PROTOCOL, + G_TYPE_FLAG_ABSTRACT, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + jabber_protocol_client_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + jabber_protocol_server_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + jabber_protocol_im_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + jabber_protocol_chat_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + jabber_protocol_privacy_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + jabber_protocol_roomlist_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ATTENTION, + jabber_protocol_attention_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_MEDIA, + jabber_protocol_media_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + jabber_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -4274,10 +4283,10 @@ jingle_rtp_register(plugin); #endif - jabber_protocol_register_type(plugin); - - gtalk_protocol_register_type(plugin); - xmpp_protocol_register_type(plugin); + jabber_protocol_register_type(G_TYPE_MODULE(plugin)); + + gtalk_protocol_register(plugin); + xmpp_protocol_register(plugin); jabber_si_xfer_register(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/jabber/xmpp.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/jabber/xmpp.c Tue Oct 01 07:19:14 2019 +0000 @@ -28,8 +28,9 @@ #include "xmpp.h" static void -xmpp_protocol_init(PurpleProtocol *protocol) +xmpp_protocol_init(XMPPProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split; PurpleAccountOption *option; GList *encryption_values = NULL; @@ -98,8 +99,21 @@ } static void -xmpp_protocol_class_init(PurpleProtocolClass *klass) +xmpp_protocol_class_init(G_GNUC_UNUSED XMPPProtocolClass *klass) +{ +} + +static void +xmpp_protocol_class_finalize(G_GNUC_UNUSED XMPPProtocolClass *klass) { } -PURPLE_DEFINE_TYPE(XMPPProtocol, xmpp_protocol, JABBER_TYPE_PROTOCOL); +G_DEFINE_DYNAMIC_TYPE(XMPPProtocol, xmpp_protocol, JABBER_TYPE_PROTOCOL); + +/* This exists solely because the above macro makes xmpp_protocol_register_type + * static. */ +void +xmpp_protocol_register(PurplePlugin *plugin) +{ + xmpp_protocol_register_type(G_TYPE_MODULE(plugin)); +}
--- a/libpurple/protocols/jabber/xmpp.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/jabber/xmpp.h Tue Oct 01 07:19:14 2019 +0000 @@ -45,7 +45,8 @@ /** * Registers the XMPPProtocol type in the type system. */ -void xmpp_protocol_register_type(PurplePlugin *plugin); +G_GNUC_INTERNAL +void xmpp_protocol_register(PurplePlugin *plugin); /** * Returns the GType for the XMPPProtocol object.
--- a/libpurple/protocols/novell/novell.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/novell/novell.c Tue Oct 01 07:19:14 2019 +0000 @@ -3486,8 +3486,9 @@ } static void -novell_protocol_init(PurpleProtocol *protocol) +novell_protocol_init(NovellProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option; protocol->id = "prpl-novell"; @@ -3503,12 +3504,19 @@ } static void -novell_protocol_class_init(PurpleProtocolClass *klass) +novell_protocol_class_init(NovellProtocolClass *klass) { - klass->login = novell_login; - klass->close = novell_close; - klass->status_types = novell_status_types; - klass->list_icon = novell_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = novell_login; + protocol_class->close = novell_close; + protocol_class->status_types = novell_status_types; + protocol_class->list_icon = novell_list_icon; +} + +static void +novell_protocol_class_finalize(G_GNUC_UNUSED NovellProtocolClass *klass) +{ } static void @@ -3562,24 +3570,23 @@ privacy_iface->set_permit_deny = novell_set_permit_deny; } -PURPLE_DEFINE_TYPE_EXTENDED( - NovellProtocol, novell_protocol, PURPLE_TYPE_PROTOCOL, 0, - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - novell_protocol_client_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - novell_protocol_server_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - novell_protocol_im_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - novell_protocol_chat_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - novell_protocol_privacy_iface_init) -); +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + NovellProtocol, novell_protocol, PURPLE_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + novell_protocol_client_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + novell_protocol_server_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + novell_protocol_im_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + novell_protocol_chat_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + novell_protocol_privacy_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -3602,7 +3609,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - novell_protocol_register_type(plugin); + novell_protocol_register_type(G_TYPE_MODULE(plugin)); my_protocol = purple_protocols_add(NOVELL_TYPE_PROTOCOL, error); if (!my_protocol)
--- a/libpurple/protocols/null/nullprpl.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/null/nullprpl.c Tue Oct 01 07:19:14 2019 +0000 @@ -976,36 +976,38 @@ * Initialize the protocol instance. see protocol.h for more information. */ static void -null_protocol_init(PurpleProtocol *protocol) +null_protocol_init(NullProtocol *self) { - PurpleAccountUserSplit *split; - PurpleAccountOption *option; + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + PurpleAccountUserSplit *split; + PurpleAccountOption *option; - protocol->id = "prpl-null"; - protocol->name = "Null - Testing Protocol"; - protocol->options = OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC; - protocol->icon_spec = purple_buddy_icon_spec_new( - "png,jpg,gif", /* format */ - 0, /* min_width */ - 0, /* min_height */ - 128, /* max_width */ - 128, /* max_height */ - 10000, /* max_filesize */ - PURPLE_ICON_SCALE_DISPLAY /* scale_rules */ - ); + protocol->id = "prpl-null"; + protocol->name = "Null - Testing Protocol"; + protocol->options = OPT_PROTO_NO_PASSWORD | OPT_PROTO_CHAT_TOPIC; + protocol->icon_spec = purple_buddy_icon_spec_new( + "png,jpg,gif", /* format */ + 0, /* min_width */ + 0, /* min_height */ + 128, /* max_width */ + 128, /* max_height */ + 10000, /* max_filesize */ + PURPLE_ICON_SCALE_DISPLAY /* scale_rules */ + ); - /* see accountopt.h for information about user splits and protocol options */ - split = purple_account_user_split_new( - _("Example user split"), /* text shown to user */ - "default", /* default value */ - '@'); /* field separator */ - option = purple_account_option_string_new( - _("Example option"), /* text shown to user */ - "example", /* pref name */ - "default"); /* default value */ + /* see accountopt.h for information about user splits and protocol + * options */ + split = purple_account_user_split_new( + _("Example user split"), /* text shown to user */ + "default", /* default value */ + '@'); /* field separator */ + option = purple_account_option_string_new( + _("Example option"), /* text shown to user */ + "example", /* pref name */ + "default"); /* default value */ - protocol->user_splits = g_list_append(NULL, split); - protocol->account_options = g_list_append(NULL, option); + protocol->user_splits = g_list_append(NULL, split); + protocol->account_options = g_list_append(NULL, option); } /* @@ -1014,12 +1016,19 @@ */ static void -null_protocol_class_init(PurpleProtocolClass *klass) +null_protocol_class_init(NullProtocolClass *klass) { - klass->login = null_login; - klass->close = null_close; - klass->status_types = null_status_types; - klass->list_icon = null_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = null_login; + protocol_class->close = null_close; + protocol_class->status_types = null_status_types; + protocol_class->list_icon = null_list_icon; +} + +static void +null_protocol_class_finalize(G_GNUC_UNUSED NullProtocolClass *klass) +{ } static void @@ -1099,27 +1108,26 @@ * to register this type with the type system, and null_protocol_get_type() * which returns the registered GType. */ -PURPLE_DEFINE_TYPE_EXTENDED( - NullProtocol, null_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + NullProtocol, null_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - null_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + null_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - null_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + null_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - null_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + null_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - null_protocol_chat_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + null_protocol_chat_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - null_protocol_privacy_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + null_protocol_privacy_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - null_protocol_roomlist_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + null_protocol_roomlist_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -1146,8 +1154,8 @@ plugin_load(PurplePlugin *plugin, GError **error) { /* register the NULL_TYPE_PROTOCOL type in the type system. this function - * is defined by PURPLE_DEFINE_TYPE_EXTENDED. */ - null_protocol_register_type(plugin); + * is defined by G_DEFINE_DYNAMIC_TYPE_EXTENDED. */ + null_protocol_register_type(G_TYPE_MODULE(plugin)); /* add the protocol to the core */ my_protocol = purple_protocols_add(NULL_TYPE_PROTOCOL, error);
--- a/libpurple/protocols/oscar/aim.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/oscar/aim.c Tue Oct 01 07:19:14 2019 +0000 @@ -29,8 +29,10 @@ #include "oscarcommon.h" static void -aim_protocol_init(PurpleProtocol *protocol) +aim_protocol_init(AIMProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + protocol->id = "prpl-aim"; protocol->name = "AIM"; @@ -38,9 +40,16 @@ } static void -aim_protocol_class_init(PurpleProtocolClass *klass) +aim_protocol_class_init(AIMProtocolClass *klass) { - klass->list_icon = oscar_list_icon_aim; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->list_icon = oscar_list_icon_aim; +} + +static void +aim_protocol_class_finalize(G_GNUC_UNUSED AIMProtocolClass *klass) +{ } static void @@ -57,12 +66,19 @@ privacy_iface->set_permit_deny = oscar_set_aim_permdeny; } -PURPLE_DEFINE_TYPE_EXTENDED( - AIMProtocol, aim_protocol, OSCAR_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + AIMProtocol, aim_protocol, OSCAR_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + aim_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - aim_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + aim_protocol_privacy_iface_init)); - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - aim_protocol_privacy_iface_init) -); +/* This exists solely because the above macro makes aim_protocol_register_type + * static. */ +void +aim_protocol_register(PurplePlugin *plugin) +{ + aim_protocol_register_type(G_TYPE_MODULE(plugin)); +}
--- a/libpurple/protocols/oscar/aim.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/oscar/aim.h Tue Oct 01 07:19:14 2019 +0000 @@ -45,7 +45,8 @@ /** * Registers the AIMProtocol type in the type system. */ -void aim_protocol_register_type(PurplePlugin *plugin); +G_GNUC_INTERNAL +void aim_protocol_register(PurplePlugin *plugin); /** * Returns the GType for the AIMProtocol object.
--- a/libpurple/protocols/oscar/icq.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/oscar/icq.c Tue Oct 01 07:19:14 2019 +0000 @@ -45,8 +45,10 @@ } static void -icq_protocol_init(PurpleProtocol *protocol) +icq_protocol_init(ICQProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + protocol->id = "prpl-icq"; protocol->name = "ICQ"; @@ -54,9 +56,16 @@ } static void -icq_protocol_class_init(PurpleProtocolClass *klass) +icq_protocol_class_init(ICQProtocolClass *klass) { - klass->list_icon = oscar_list_icon_icq; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->list_icon = oscar_list_icon_icq; +} + +static void +icq_protocol_class_finalize(G_GNUC_UNUSED ICQProtocolClass *klass) +{ } static void @@ -67,9 +76,16 @@ client_iface->get_max_message_size = icq_get_max_message_size; } -PURPLE_DEFINE_TYPE_EXTENDED( - ICQProtocol, icq_protocol, OSCAR_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + ICQProtocol, icq_protocol, OSCAR_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + icq_protocol_client_iface_init)); - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - icq_protocol_client_iface_init) -); +/* This exists solely because the above macro makes icq_protocol_register_type + * static. */ +void +icq_protocol_register(PurplePlugin *plugin) +{ + icq_protocol_register_type(G_TYPE_MODULE(plugin)); +}
--- a/libpurple/protocols/oscar/icq.h Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/oscar/icq.h Tue Oct 01 07:19:14 2019 +0000 @@ -45,7 +45,8 @@ /** * Registers the ICQProtocol type in the type system. */ -void icq_protocol_register_type(PurplePlugin *plugin); +G_GNUC_INTERNAL +void icq_protocol_register(PurplePlugin *plugin); /** * Returns the GType for the ICQProtocol object.
--- a/libpurple/protocols/oscar/oscar.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/oscar/oscar.c Tue Oct 01 07:19:14 2019 +0000 @@ -5677,8 +5677,10 @@ } static void -oscar_protocol_init(PurpleProtocol *protocol) +oscar_protocol_init(OscarProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + protocol->options = OPT_PROTO_MAIL_CHECK | OPT_PROTO_INVITE_MESSAGE | OPT_PROTO_AUTHORIZATION_DENIED_MESSAGE; protocol->icon_spec = purple_buddy_icon_spec_new("gif,jpeg,bmp,ico", @@ -5688,11 +5690,18 @@ } static void -oscar_protocol_class_init(PurpleProtocolClass *klass) +oscar_protocol_class_init(OscarProtocolClass *klass) { - klass->login = oscar_login; - klass->close = oscar_close; - klass->status_types = oscar_status_types; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = oscar_login; + protocol_class->close = oscar_close; + protocol_class->status_types = oscar_status_types; +} + +static void +oscar_protocol_class_finalize(G_GNUC_UNUSED OscarProtocolClass *klass) +{ } static void @@ -5760,27 +5769,27 @@ xfer_iface->new_xfer = oscar_new_xfer; } -PURPLE_DEFINE_TYPE_EXTENDED( - OscarProtocol, oscar_protocol, PURPLE_TYPE_PROTOCOL, G_TYPE_FLAG_ABSTRACT, - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - oscar_protocol_client_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - oscar_protocol_server_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - oscar_protocol_im_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - oscar_protocol_chat_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - oscar_protocol_privacy_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - oscar_protocol_xfer_iface_init) -); +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + OscarProtocol, oscar_protocol, PURPLE_TYPE_PROTOCOL, + G_TYPE_FLAG_ABSTRACT, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + oscar_protocol_client_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + oscar_protocol_server_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + oscar_protocol_im_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + oscar_protocol_chat_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + oscar_protocol_privacy_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + oscar_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -5803,10 +5812,10 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - oscar_protocol_register_type(plugin); - - aim_protocol_register_type(plugin); - icq_protocol_register_type(plugin); + oscar_protocol_register_type(G_TYPE_MODULE(plugin)); + + aim_protocol_register(plugin); + icq_protocol_register(plugin); oscar_xfer_register(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/sametime/sametime.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/sametime/sametime.c Tue Oct 01 07:19:14 2019 +0000 @@ -5197,65 +5197,72 @@ } } +static void +mw_protocol_init(mwProtocol *self) +{ + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + PurpleAccountUserSplit *split; + PurpleAccountOption *opt; + GList *l = NULL; + + protocol->id = PROTOCOL_ID; + protocol->name = PROTOCOL_NAME; + + /* set up the preferences */ + purple_prefs_add_none(MW_PROTOCOL_OPT_BASE); + purple_prefs_add_int(MW_PROTOCOL_OPT_BLIST_ACTION, + BLIST_CHOICE_DEFAULT); + + /* set up account ID as user:server */ + split = purple_account_user_split_new(_("Server"), + MW_PLUGIN_DEFAULT_HOST, ':'); + protocol->user_splits = g_list_append(protocol->user_splits, split); + + /* remove dead preferences */ + purple_prefs_remove(MW_PROTOCOL_OPT_PSYCHIC); + purple_prefs_remove(MW_PROTOCOL_OPT_SAVE_DYNAMIC); + + /* port to connect to */ + opt = purple_account_option_int_new(_("Port"), MW_KEY_PORT, + MW_PLUGIN_DEFAULT_PORT); + l = g_list_append(l, opt); + + { /* copy the old force login setting from prefs if it's + there. Don't delete the preference, since there may be more + than one account that wants to check for it. */ + gboolean b = FALSE; + const char *label = _("Force login (ignore server redirects)"); + + if (purple_prefs_exists(MW_PROTOCOL_OPT_FORCE_LOGIN)) + b = purple_prefs_get_bool(MW_PROTOCOL_OPT_FORCE_LOGIN); + + opt = purple_account_option_bool_new(label, MW_KEY_FORCE, b); + l = g_list_append(l, opt); + } + + /* pretend to be Sametime Connect */ + opt = purple_account_option_bool_new(_("Hide client identity"), + MW_KEY_FAKE_IT, FALSE); + l = g_list_append(l, opt); + + protocol->account_options = l; + l = NULL; +} static void -mw_protocol_init(PurpleProtocol *protocol) +mw_protocol_class_init(mwProtocolClass *klass) { - PurpleAccountUserSplit *split; - PurpleAccountOption *opt; - GList *l = NULL; - - protocol->id = PROTOCOL_ID; - protocol->name = PROTOCOL_NAME; - - /* set up the preferences */ - purple_prefs_add_none(MW_PROTOCOL_OPT_BASE); - purple_prefs_add_int(MW_PROTOCOL_OPT_BLIST_ACTION, BLIST_CHOICE_DEFAULT); - - /* set up account ID as user:server */ - split = purple_account_user_split_new(_("Server"), - MW_PLUGIN_DEFAULT_HOST, ':'); - protocol->user_splits = g_list_append(protocol->user_splits, split); - - /* remove dead preferences */ - purple_prefs_remove(MW_PROTOCOL_OPT_PSYCHIC); - purple_prefs_remove(MW_PROTOCOL_OPT_SAVE_DYNAMIC); - - /* port to connect to */ - opt = purple_account_option_int_new(_("Port"), MW_KEY_PORT, - MW_PLUGIN_DEFAULT_PORT); - l = g_list_append(l, opt); - - { /* copy the old force login setting from prefs if it's - there. Don't delete the preference, since there may be more - than one account that wants to check for it. */ - gboolean b = FALSE; - const char *label = _("Force login (ignore server redirects)"); - - if(purple_prefs_exists(MW_PROTOCOL_OPT_FORCE_LOGIN)) - b = purple_prefs_get_bool(MW_PROTOCOL_OPT_FORCE_LOGIN); - - opt = purple_account_option_bool_new(label, MW_KEY_FORCE, b); - l = g_list_append(l, opt); - } - - /* pretend to be Sametime Connect */ - opt = purple_account_option_bool_new(_("Hide client identity"), - MW_KEY_FAKE_IT, FALSE); - l = g_list_append(l, opt); - - protocol->account_options = l; - l = NULL; -} - + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = mw_protocol_login; + protocol_class->close = mw_protocol_close; + protocol_class->status_types = mw_protocol_status_types; + protocol_class->list_icon = mw_protocol_list_icon; +} static void -mw_protocol_class_init(PurpleProtocolClass *klass) +mw_protocol_class_finalize(G_GNUC_UNUSED mwProtocolClass *klass) { - klass->login = mw_protocol_login; - klass->close = mw_protocol_close; - klass->status_types = mw_protocol_status_types; - klass->list_icon = mw_protocol_list_icon; } @@ -5331,29 +5338,26 @@ xfer_iface->new_xfer = mw_protocol_new_xfer; } - -PURPLE_DEFINE_TYPE_EXTENDED( - mwProtocol, mw_protocol, PURPLE_TYPE_PROTOCOL, 0, - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - mw_protocol_client_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - mw_protocol_server_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - mw_protocol_im_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - mw_protocol_chat_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_PRIVACY, - mw_protocol_privacy_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - mw_protocol_xfer_iface_init) -); - +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + mwProtocol, mw_protocol, PURPLE_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + mw_protocol_client_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + mw_protocol_server_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + mw_protocol_im_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + mw_protocol_chat_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_PRIVACY, + mw_protocol_privacy_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + mw_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -5383,7 +5387,7 @@ GLogLevelFlags logflags = G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION; - mw_protocol_register_type(plugin); + mw_protocol_register_type(G_TYPE_MODULE(plugin)); mw_xfer_register_type(G_TYPE_MODULE(plugin));
--- a/libpurple/protocols/silc/silc.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/silc/silc.c Tue Oct 01 07:19:14 2019 +0000 @@ -2113,10 +2113,10 @@ NULL }; - static void -silcpurple_protocol_init(PurpleProtocol *protocol) +silcpurple_protocol_init(SilcProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option; PurpleAccountUserSplit *split; char tmp[256]; @@ -2195,12 +2195,19 @@ } static void -silcpurple_protocol_class_init(PurpleProtocolClass *klass) +silcpurple_protocol_class_init(SilcProtocolClass *klass) { - klass->login = silcpurple_login; - klass->close = silcpurple_close; - klass->status_types = silcpurple_away_states; - klass->list_icon = silcpurple_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = silcpurple_login; + protocol_class->close = silcpurple_close; + protocol_class->status_types = silcpurple_away_states; + protocol_class->list_icon = silcpurple_list_icon; +} + +static void +silcpurple_protocol_class_finalize(G_GNUC_UNUSED SilcProtocolClass *klass) +{ } static void @@ -2259,27 +2266,26 @@ xfer_iface->new_xfer = silcpurple_ftp_new_xfer; } -PURPLE_DEFINE_TYPE_EXTENDED( - SilcProtocol, silcpurple_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + SilcProtocol, silcpurple_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - silcpurple_protocol_client_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + silcpurple_protocol_client_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - silcpurple_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + silcpurple_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - silcpurple_protocol_im_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + silcpurple_protocol_im_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - silcpurple_protocol_chat_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + silcpurple_protocol_chat_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, - silcpurple_protocol_roomlist_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ROOMLIST, + silcpurple_protocol_roomlist_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_XFER, - silcpurple_protocol_xfer_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_XFER, + silcpurple_protocol_xfer_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -2308,7 +2314,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - silcpurple_protocol_register_type(plugin); + silcpurple_protocol_register_type(G_TYPE_MODULE(plugin)); my_protocol = purple_protocols_add(SILCPURPLE_TYPE_PROTOCOL, error); if (!my_protocol)
--- a/libpurple/protocols/simple/simple.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/simple/simple.c Tue Oct 01 07:19:14 2019 +0000 @@ -2146,8 +2146,9 @@ } static void -simple_protocol_init(PurpleProtocol *protocol) +simple_protocol_init(SIMPLEProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split; PurpleAccountOption *option; @@ -2176,12 +2177,19 @@ } static void -simple_protocol_class_init(PurpleProtocolClass *klass) +simple_protocol_class_init(SIMPLEProtocolClass *klass) { - klass->login = simple_login; - klass->close = simple_close; - klass->status_types = simple_status_types; - klass->list_icon = simple_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = simple_login; + protocol_class->close = simple_close; + protocol_class->status_types = simple_status_types; + protocol_class->list_icon = simple_list_icon; +} + +static void +simple_protocol_class_finalize(G_GNUC_UNUSED SIMPLEProtocolClass *klass) +{ } static void @@ -2201,15 +2209,14 @@ im_iface->send_typing = simple_typing; } -PURPLE_DEFINE_TYPE_EXTENDED( - SIMPLEProtocol, simple_protocol, PURPLE_TYPE_PROTOCOL, 0, +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + SIMPLEProtocol, simple_protocol, PURPLE_TYPE_PROTOCOL, 0, - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - simple_protocol_server_iface_init) + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + simple_protocol_server_iface_init) - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - simple_protocol_im_iface_init) -); + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + simple_protocol_im_iface_init)); static PurplePluginInfo * plugin_query(GError **error) @@ -2238,7 +2245,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - simple_protocol_register_type(plugin); + simple_protocol_register_type(G_TYPE_MODULE(plugin)); my_protocol = purple_protocols_add(SIMPLE_TYPE_PROTOCOL, error); if (!my_protocol)
--- a/libpurple/protocols/zephyr/zephyr.c Tue Oct 01 02:21:00 2019 -0400 +++ b/libpurple/protocols/zephyr/zephyr.c Tue Oct 01 07:19:14 2019 +0000 @@ -2911,8 +2911,9 @@ static void -zephyr_protocol_init(PurpleProtocol *protocol) +zephyr_protocol_init(ZephyrProtocol *self) { + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option; const gchar *tmp = get_exposure_level(); @@ -2950,12 +2951,20 @@ static void -zephyr_protocol_class_init(PurpleProtocolClass *klass) +zephyr_protocol_class_init(ZephyrProtocolClass *klass) { - klass->login = zephyr_login; - klass->close = zephyr_close; - klass->status_types = zephyr_status_types; - klass->list_icon = zephyr_list_icon; + PurpleProtocolClass *protocol_class = PURPLE_PROTOCOL_CLASS(klass); + + protocol_class->login = zephyr_login; + protocol_class->close = zephyr_close; + protocol_class->status_types = zephyr_status_types; + protocol_class->list_icon = zephyr_list_icon; +} + + +static void +zephyr_protocol_class_finalize(G_GNUC_UNUSED ZephyrProtocolClass *klass) +{ } @@ -3001,22 +3010,20 @@ } -PURPLE_DEFINE_TYPE_EXTENDED( - ZephyrProtocol, zephyr_protocol, PURPLE_TYPE_PROTOCOL, 0, - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CLIENT, - zephyr_protocol_client_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_SERVER, - zephyr_protocol_server_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_IM, - zephyr_protocol_im_iface_init) - - PURPLE_IMPLEMENT_INTERFACE_STATIC(PURPLE_TYPE_PROTOCOL_CHAT, - zephyr_protocol_chat_iface_init) -); - +G_DEFINE_DYNAMIC_TYPE_EXTENDED( + ZephyrProtocol, zephyr_protocol, PURPLE_TYPE_PROTOCOL, 0, + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT, + zephyr_protocol_client_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_SERVER, + zephyr_protocol_server_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_IM, + zephyr_protocol_im_iface_init) + + G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CHAT, + zephyr_protocol_chat_iface_init)); static PurplePluginInfo *plugin_query(GError **error) { @@ -3039,7 +3046,7 @@ static gboolean plugin_load(PurplePlugin *plugin, GError **error) { - zephyr_protocol_register_type(plugin); + zephyr_protocol_register_type(G_TYPE_MODULE(plugin)); my_protocol = purple_protocols_add(ZEPHYR_TYPE_PROTOCOL, error); if (!my_protocol)
--- a/pidgin/plugins/ticker/gtkticker.c Tue Oct 01 02:21:00 2019 -0400 +++ b/pidgin/plugins/ticker/gtkticker.c Tue Oct 01 07:19:14 2019 +0000 @@ -65,8 +65,15 @@ static GtkContainerClass *parent_class = NULL; +G_DEFINE_DYNAMIC_TYPE(GtkTicker, gtk_ticker, GTK_TYPE_CONTAINER); -PURPLE_DEFINE_TYPE(GtkTicker, gtk_ticker, GTK_TYPE_CONTAINER); +/* This exists solely because the above macro makes gtk_ticker_register_type + * static. */ +void +gtk_ticker_register(PurplePlugin *plugin) +{ + gtk_ticker_register_type(G_TYPE_MODULE(plugin)); +} static void gtk_ticker_finalize(GObject *object) { gtk_ticker_stop_scroll(GTK_TICKER(object)); @@ -100,6 +107,11 @@ container_class->child_type = gtk_ticker_child_type; } +static void +gtk_ticker_class_finalize(G_GNUC_UNUSED GtkTickerClass *klass) +{ +} + static GType gtk_ticker_child_type (GtkContainer *container) { return GTK_TYPE_WIDGET;
--- a/pidgin/plugins/ticker/gtkticker.h Tue Oct 01 02:21:00 2019 -0400 +++ b/pidgin/plugins/ticker/gtkticker.h Tue Oct 01 07:19:14 2019 +0000 @@ -48,7 +48,8 @@ G_MODULE_EXPORT G_DECLARE_FINAL_TYPE(GtkTicker, gtk_ticker, GTK, TICKER, GtkContainer) -void gtk_ticker_register_type (PurplePlugin *plugin); +G_GNUC_INTERNAL +void gtk_ticker_register(PurplePlugin *plugin); GtkWidget* gtk_ticker_new (void); void gtk_ticker_add (GtkTicker *ticker,
--- a/pidgin/plugins/ticker/ticker.c Tue Oct 01 02:21:00 2019 -0400 +++ b/pidgin/plugins/ticker/ticker.c Tue Oct 01 07:19:14 2019 +0000 @@ -341,7 +341,7 @@ { void *blist_handle = purple_blist_get_handle(); - gtk_ticker_register_type(plugin); + gtk_ticker_register(plugin); purple_signal_connect(purple_connections_get_handle(), "signed-off", plugin, PURPLE_CALLBACK(signoff_cb), NULL);