pidgin/pidgin

Replace Purple type macros by GObject macros.

2019-09-15, Elliott Sales de Andrade
7eab91ea30a1
Parents e264fc382216
Children 9021ee76539a
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
- * 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 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 @@
* 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
@@ -360,7 +365,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 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);
}
-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)
{
--- 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); \
}
-/**
- * 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
/**************************************************************************/
@@ -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
- * 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.
*
--- 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 @@
}
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 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 @@
}
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 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 @@
}
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 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 @@
}
static void
-irc_protocol_init(PurpleProtocol *protocol)
+irc_protocol_init(IRCProtocol *self)
{
+ PurpleProtocol *protocol = PURPLE_PROTOCOL(self);
PurpleAccountUserSplit *split;
PurpleAccountOption *option;
@@ -1004,12 +1005,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
@@ -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 @@
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 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 @@
}
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 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);
+G_GNUC_INTERNAL
+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 @@
}
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 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 @@
#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 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);
+G_GNUC_INTERNAL
+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 @@
}
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 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.
*/
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);
}
/*
@@ -1024,12 +1026,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
@@ -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 @@
PurpleCmdId id;
/* 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 @@
#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 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);
+G_GNUC_INTERNAL
+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 @@
}
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 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);
+G_GNUC_INTERNAL
+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 @@
}
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 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 @@
}
}
+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 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 @@
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 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 @@
}
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 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 @@
static void
-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 @@
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)
+{
}
@@ -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 @@
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 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
+ * 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 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_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 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);