Replace Purple type macros by GObject macros.
These were necessary to support both static and dynamic plugins, but
we're just leaving the to GPlugin now.
--- a/ChangeLog.API Thu Sep 12 20:51:15 2019 -0400
+++ b/ChangeLog.API Sun Sep 15 17:11:46 2019 -0400
@@ -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_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
--- a/finch/plugins/grouping.c Thu Sep 12 20:51:15 2019 -0400
+++ b/finch/plugins/grouping.c Sun Sep 15 17:11:46 2019 -0400
@@ -43,18 +43,23 @@
-finch_grouping_node_init(FinchGroupingNode *node)
+finch_grouping_node_init(G_GNUC_UNUSED FinchGroupingNode *node) -finch_grouping_node_class_init(FinchGroupingNodeClass *klass)
+finch_grouping_node_class_init(G_GNUC_UNUSED FinchGroupingNodeClass *klass) +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); @@ -360,7 +365,7 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/plugins.c Sun Sep 15 17:11:46 2019 -0400
@@ -262,29 +262,6 @@
plugins_to_disable = g_list_prepend(plugins_to_disable, plugin);
-purple_plugin_register_type(PurplePlugin *plugin, GType parent,
- const gchar *name, const GTypeInfo *info,
- 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);
-purple_plugin_add_interface(PurplePlugin *plugin, GType instance_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,
purple_plugin_is_internal(PurplePlugin *plugin)
--- a/libpurple/plugins.h Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/plugins.h Sun Sep 15 17:11:46 2019 -0400
@@ -204,113 +204,6 @@
return pluginunload(PURPLE_PLUGIN(p), e); \
- * @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) { \
- const GTypeInfo type_info = { \
- sizeof (TypeName##Class), \
- (GBaseInitFunc) NULL, \
- (GBaseFinalizeFunc) NULL, \
- (GClassInitFunc) type_name##_class_init, \
- (GClassFinalizeFunc) NULL, \
- (GInstanceInitFunc) type_name##_init, \
- type_id = purple_plugin_register_type(plugin, TYPE_PARENT, #TypeName, \
- &type_info, (GTypeFlags) flags); \
- type_name##_type_id = type_id; \
- * 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); \
/**************************************************************************/
@@ -382,37 +275,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
- * @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,
- * 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,
- const GInterfaceInfo *interface_info);
* purple_plugin_is_internal:
--- a/libpurple/protocols/bonjour/bonjour.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/bonjour/bonjour.c Sun Sep 15 17:11:46 2019 -0400
@@ -630,8 +630,9 @@
-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 @@
-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; +bonjour_protocol_class_finalize(G_GNUC_UNUSED BonjourProtocolClass *klass) @@ -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 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/facebook/facebook.c Sun Sep 15 17:11:46 2019 -0400
@@ -1536,8 +1536,9 @@
-facebook_protocol_init(PurpleProtocol *protocol)
+facebook_protocol_init(FacebookProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *opt;
@@ -1573,12 +1574,19 @@
-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; +facebook_protocol_class_finalize(G_GNUC_UNUSED FacebookProtocolClass *klass) @@ -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)); @@ -1694,7 +1701,7 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/gg/gg.c Sun Sep 15 17:11:46 2019 -0400
@@ -1000,8 +1000,9 @@
-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 @@
-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; +ggp_protocol_class_finalize(G_GNUC_UNUSED GGPProtocolClass *klass) @@ -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)); plugin_extra(PurplePlugin *plugin)
@@ -1189,7 +1196,7 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/irc/irc.c Sun Sep 15 17:11:46 2019 -0400
@@ -956,8 +956,9 @@
-irc_protocol_init(PurpleProtocol *protocol)
+irc_protocol_init(IRCProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split;
PurpleAccountOption *option;
@@ -1004,12 +1005,19 @@
-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; +irc_protocol_class_finalize(G_GNUC_UNUSED IRCProtocolClass *klass) @@ -1064,27 +1072,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)
@@ -1107,7 +1114,7 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/jabber/gtalk.c Sun Sep 15 17:11:46 2019 -0400
@@ -34,8 +34,9 @@
-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 @@
-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; +gtalk_protocol_class_finalize(G_GNUC_UNUSED GTalkProtocolClass *klass) @@ -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 +gtalk_protocol_register(PurplePlugin *plugin) + gtalk_protocol_register_type(G_TYPE_MODULE(plugin)); --- a/libpurple/protocols/jabber/gtalk.h Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/jabber/gtalk.h Sun Sep 15 17:11:46 2019 -0400
@@ -44,7 +44,8 @@
* Registers the GTalkProtocol type in the type system.
-void gtalk_protocol_register_type(PurplePlugin *plugin);
+void gtalk_protocol_register(PurplePlugin *plugin); * Returns the GType for the GTalkProtocol object.
--- a/libpurple/protocols/jabber/jabber.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/jabber/jabber.c Sun Sep 15 17:11:46 2019 -0400
@@ -4091,8 +4091,10 @@
-jabber_protocol_init(PurpleProtocol *protocol)
+jabber_protocol_init(JabberProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); protocol->id = "prpl-jabber";
protocol->options = OPT_PROTO_CHAT_TOPIC | OPT_PROTO_UNIQUE_CHATNAME |
@@ -4109,12 +4111,19 @@
-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; +jabber_protocol_class_finalize(G_GNUC_UNUSED JabberProtocolClass *klass) @@ -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_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);
- 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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/jabber/xmpp.c Sun Sep 15 17:11:46 2019 -0400
@@ -28,8 +28,9 @@
-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 @@
-xmpp_protocol_class_init(PurpleProtocolClass *klass)
+xmpp_protocol_class_init(G_GNUC_UNUSED XMPPProtocolClass *klass) +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 +xmpp_protocol_register(PurplePlugin *plugin) + xmpp_protocol_register_type(G_TYPE_MODULE(plugin)); --- a/libpurple/protocols/jabber/xmpp.h Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/jabber/xmpp.h Sun Sep 15 17:11:46 2019 -0400
@@ -44,7 +44,8 @@
* Registers the XMPPProtocol type in the type system.
-void xmpp_protocol_register_type(PurplePlugin *plugin);
+void xmpp_protocol_register(PurplePlugin *plugin); * Returns the GType for the XMPPProtocol object.
--- a/libpurple/protocols/novell/novell.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/novell/novell.c Sun Sep 15 17:11:46 2019 -0400
@@ -3486,8 +3486,9 @@
-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 @@
-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; +novell_protocol_class_finalize(G_GNUC_UNUSED NovellProtocolClass *klass) @@ -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 @@
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);
--- a/libpurple/protocols/null/nullprpl.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/null/nullprpl.c Sun Sep 15 17:11:46 2019 -0400
@@ -986,36 +986,38 @@
* Initialize the protocol instance. see protocol.h for more information.
-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 */
- 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 */ + 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 + 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); @@ -1024,12 +1026,19 @@
-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; +null_protocol_class_finalize(G_GNUC_UNUSED NullProtocolClass *klass) @@ -1109,27 +1118,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)
@@ -1158,8 +1166,8 @@
/* 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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/oscar/aim.c Sun Sep 15 17:11:46 2019 -0400
@@ -29,8 +29,10 @@
-aim_protocol_init(PurpleProtocol *protocol)
+aim_protocol_init(AIMProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); protocol->id = "prpl-aim";
@@ -38,9 +40,16 @@
-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; +aim_protocol_class_finalize(G_GNUC_UNUSED AIMProtocolClass *klass) @@ -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 +aim_protocol_register(PurplePlugin *plugin) + aim_protocol_register_type(G_TYPE_MODULE(plugin)); --- a/libpurple/protocols/oscar/aim.h Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/oscar/aim.h Sun Sep 15 17:11:46 2019 -0400
@@ -44,7 +44,8 @@
* Registers the AIMProtocol type in the type system.
-void aim_protocol_register_type(PurplePlugin *plugin);
+void aim_protocol_register(PurplePlugin *plugin); * Returns the GType for the AIMProtocol object.
--- a/libpurple/protocols/oscar/icq.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/oscar/icq.c Sun Sep 15 17:11:46 2019 -0400
@@ -45,8 +45,10 @@
-icq_protocol_init(PurpleProtocol *protocol)
+icq_protocol_init(ICQProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); protocol->id = "prpl-icq";
@@ -54,9 +56,16 @@
-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; +icq_protocol_class_finalize(G_GNUC_UNUSED ICQProtocolClass *klass) @@ -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 +icq_protocol_register(PurplePlugin *plugin) + icq_protocol_register_type(G_TYPE_MODULE(plugin)); --- a/libpurple/protocols/oscar/icq.h Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/oscar/icq.h Sun Sep 15 17:11:46 2019 -0400
@@ -44,7 +44,8 @@
* Registers the ICQProtocol type in the type system.
-void icq_protocol_register_type(PurplePlugin *plugin);
+void icq_protocol_register(PurplePlugin *plugin); * Returns the GType for the ICQProtocol object.
--- a/libpurple/protocols/oscar/oscar.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/oscar/oscar.c Sun Sep 15 17:11:46 2019 -0400
@@ -5677,8 +5677,10 @@
-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 @@
-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; +oscar_protocol_class_finalize(G_GNUC_UNUSED OscarProtocolClass *klass) @@ -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_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 @@
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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/sametime/sametime.c Sun Sep 15 17:11:46 2019 -0400
@@ -5197,65 +5197,72 @@
+mw_protocol_init(mwProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); + PurpleAccountUserSplit *split; + PurpleAccountOption *opt; + 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, + /* 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. */ + 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; -mw_protocol_init(PurpleProtocol *protocol)
+mw_protocol_class_init(mwProtocolClass *klass) - PurpleAccountUserSplit *split;
- PurpleAccountOption *opt;
- 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. */
- 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;
+ 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; -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 Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/silc/silc.c Sun Sep 15 17:11:46 2019 -0400
@@ -2113,10 +2113,10 @@
-silcpurple_protocol_init(PurpleProtocol *protocol)
+silcpurple_protocol_init(SilcProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option;
PurpleAccountUserSplit *split;
@@ -2195,12 +2195,19 @@
-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; +silcpurple_protocol_class_finalize(G_GNUC_UNUSED SilcProtocolClass *klass) @@ -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 @@
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);
--- a/libpurple/protocols/simple/simple.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/simple/simple.c Sun Sep 15 17:11:46 2019 -0400
@@ -2146,8 +2146,9 @@
-simple_protocol_init(PurpleProtocol *protocol)
+simple_protocol_init(SIMPLEProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountUserSplit *split;
PurpleAccountOption *option;
@@ -2176,12 +2177,19 @@
-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; +simple_protocol_class_finalize(G_GNUC_UNUSED SIMPLEProtocolClass *klass) @@ -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 @@
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);
--- a/libpurple/protocols/zephyr/zephyr.c Thu Sep 12 20:51:15 2019 -0400
+++ b/libpurple/protocols/zephyr/zephyr.c Sun Sep 15 17:11:46 2019 -0400
@@ -2912,8 +2912,9 @@
-zephyr_protocol_init(PurpleProtocol *protocol)
+zephyr_protocol_init(ZephyrProtocol *self) + PurpleProtocol *protocol = PURPLE_PROTOCOL(self); PurpleAccountOption *option;
char *tmp = get_exposure_level();
@@ -2951,12 +2952,20 @@
-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; +zephyr_protocol_class_finalize(G_GNUC_UNUSED ZephyrProtocolClass *klass) @@ -3002,22 +3011,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)
@@ -3040,7 +3047,7 @@
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);
--- a/pidgin/plugins/ticker/gtkticker.c Thu Sep 12 20:51:15 2019 -0400
+++ b/pidgin/plugins/ticker/gtkticker.c Sun Sep 15 17:11:46 2019 -0400
@@ -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 +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;
+gtk_ticker_class_finalize(G_GNUC_UNUSED GtkTickerClass *klass) static GType gtk_ticker_child_type (GtkContainer *container)
--- a/pidgin/plugins/ticker/gtkticker.h Thu Sep 12 20:51:15 2019 -0400
+++ b/pidgin/plugins/ticker/gtkticker.h Sun Sep 15 17:11:46 2019 -0400
@@ -48,7 +48,8 @@
G_DECLARE_FINAL_TYPE(GtkTicker, gtk_ticker, GTK, TICKER, GtkContainer)
-void gtk_ticker_register_type (PurplePlugin *plugin);
+void gtk_ticker_register(PurplePlugin *plugin); GtkWidget* gtk_ticker_new (void);
void gtk_ticker_add (GtkTicker *ticker,
--- a/pidgin/plugins/ticker/ticker.c Thu Sep 12 20:51:15 2019 -0400
+++ b/pidgin/plugins/ticker/ticker.c Sun Sep 15 17:11:46 2019 -0400
@@ -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);