pidgin/pidgin

Merged in default (pull request #578)

2019-10-01, Gary Kramlich
e94146df6f96
Merged in default (pull request #578)

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