--- a/pidgin/gtkplugin.c Mon Nov 11 22:20:27 2019 -0600
+++ b/pidgin/gtkplugin.c Tue Nov 12 01:34:57 2019 -0600
@@ -34,18 +34,6 @@
- PidginPluginConfigFrameCb config_frame_cb;
-} PidginPluginInfoPrivate;
- PROP_GTK_CONFIG_FRAME_CB,
PIDGIN_PLUGIN_UI_DATA_TYPE_FRAME,
@@ -64,9 +52,6 @@
-G_DEFINE_TYPE_WITH_PRIVATE(PidginPluginInfo, pidgin_plugin_info,
- PURPLE_TYPE_PLUGIN_INFO);
static void plugin_toggled_stage_two(PurplePlugin *plug, GtkTreeModel *model,
GtkTreeIter *iter, GError *error, gboolean unload);
@@ -83,91 +68,11 @@
static GtkWidget *pref_button = NULL;
-/* Set method for GObject properties */
-pidgin_plugin_info_set_property(GObject *obj, guint param_id, const GValue *value,
- PidginPluginInfoPrivate *priv =
- pidgin_plugin_info_get_instance_private(
- PIDGIN_PLUGIN_INFO(obj));
- case PROP_GTK_CONFIG_FRAME_CB:
- priv->config_frame_cb = g_value_get_pointer(value);
- G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-/* Get method for GObject properties */
-pidgin_plugin_info_get_property(GObject *obj, guint param_id, GValue *value,
- PidginPluginInfoPrivate *priv =
- pidgin_plugin_info_get_instance_private(
- PIDGIN_PLUGIN_INFO(obj));
- case PROP_GTK_CONFIG_FRAME_CB:
- g_value_set_pointer(value, priv->config_frame_cb);
- G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, param_id, pspec);
-/* Class initializer function */
-static void pidgin_plugin_info_class_init(PidginPluginInfoClass *klass)
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
- obj_class->get_property = pidgin_plugin_info_get_property;
- obj_class->set_property = pidgin_plugin_info_set_property;
- g_object_class_install_property(obj_class, PROP_GTK_CONFIG_FRAME_CB,
- g_param_spec_pointer("gtk-config-frame-cb",
- "GTK configuration frame callback",
- "Callback that returns a GTK configuration frame",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
-pidgin_plugin_info_init(PidginPluginInfo *info)
-pidgin_plugin_info_new(const char *first_property, ...)
- /* at least ID is required */
- va_start(var_args, first_property);
- info = g_object_new_valist(PIDGIN_TYPE_PLUGIN_INFO, first_property,
- g_object_set(info, "ui-requirement", PIDGIN_UI, NULL);
- return PIDGIN_PLUGIN_INFO(info);
pidgin_plugin_has_prefs(PurplePlugin *plugin)
PurplePluginInfo *info = purple_plugin_get_info(plugin);
- PidginPluginInfoPrivate *priv = NULL;
+ PurplePluginPrefFrameCb config_frame_cb = NULL; g_return_val_if_fail(plugin != NULL, FALSE);
@@ -175,45 +80,13 @@
if (!purple_plugin_is_loaded(plugin))
- if (PIDGIN_IS_PLUGIN_INFO(info))
- priv = pidgin_plugin_info_get_instance_private(
- PIDGIN_PLUGIN_INFO(info));
- ret = ((priv && priv->config_frame_cb) ||
+ ret = (config_frame_cb || purple_plugin_info_get_pref_frame_cb(info) ||
purple_plugin_info_get_pref_request_cb(info));
-pidgin_plugin_get_config_frame(PurplePlugin *plugin,
- PurplePluginPrefFrame **purple_pref_frame)
- GtkWidget *config = NULL;
- PurplePluginInfo *info;
- PurplePluginPrefFrameCb pref_frame_cb = NULL;
- g_return_val_if_fail(PURPLE_IS_PLUGIN(plugin), NULL);
- info = purple_plugin_get_info(plugin);
- if(!PURPLE_IS_PLUGIN_INFO(info))
- pref_frame_cb = purple_plugin_info_get_pref_frame_cb(info);
- PurplePluginPrefFrame *frame = pref_frame_cb(plugin);
- config = pidgin_plugin_pref_create_frame(frame);
- *purple_pref_frame = frame;
pref_dialog_close(PurplePlugin *plugin)
@@ -260,11 +133,9 @@
pidgin_plugin_open_config(PurplePlugin *plugin, GtkWindow *parent)
- PidginPluginInfoPrivate *priv = NULL;
PidginPluginUiData *ui_data;
PurplePluginPrefFrameCb pref_frame_cb;
PurplePluginPrefRequestCb pref_request_cb;
- PidginPluginConfigFrameCb get_pidgin_frame = NULL;
g_return_if_fail(plugin != NULL);
@@ -279,23 +150,21 @@
if (purple_plugin_info_get_ui_data(info))
- if (PIDGIN_IS_PLUGIN_INFO(info))
- priv = pidgin_plugin_info_get_instance_private(
- PIDGIN_PLUGIN_INFO(info));
pref_frame_cb = purple_plugin_info_get_pref_frame_cb(info);
pref_request_cb = purple_plugin_info_get_pref_request_cb(info);
- get_pidgin_frame = priv->config_frame_cb;
+ ui_data = g_new0(PidginPluginUiData, 1); + purple_plugin_info_set_ui_data(info, ui_data);
+ ui_data->u.frame.pref_frame = pref_frame_cb(plugin);
purple_debug_warning("gtkplugin",
@@ -306,13 +175,11 @@
g_return_if_fail(prefs_count > 0);
- ui_data = g_new0(PidginPluginUiData, 1);
- purple_plugin_info_set_ui_data(info, ui_data);
/* Priority: pidgin frame > purple request > purple frame
* Purple frame could be replaced with purple request some day.
- if (pref_request_cb && !get_pidgin_frame) {
ui_data->type = PIDGIN_PLUGIN_UI_DATA_TYPE_REQUEST;
ui_data->u.request_handle = pref_request_cb(plugin);
purple_request_add_close_notify(ui_data->u.request_handle,
@@ -324,8 +191,7 @@
ui_data->type = PIDGIN_PLUGIN_UI_DATA_TYPE_FRAME;
- box = pidgin_plugin_get_config_frame(plugin,
- &ui_data->u.frame.pref_frame);
+ box = pidgin_plugin_pref_create_frame(ui_data->u.frame.pref_frame); purple_debug_error("gtkplugin",
"Failed to display prefs frame");
--- a/pidgin/gtkplugin.h Mon Nov 11 22:20:27 2019 -0600
+++ b/pidgin/gtkplugin.h Tue Nov 12 01:34:57 2019 -0600
@@ -31,75 +31,11 @@
-#define PIDGIN_TYPE_PLUGIN_INFO (pidgin_plugin_info_get_type())
-#define PIDGIN_PLUGIN_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), PIDGIN_TYPE_PLUGIN_INFO, PidginPluginInfo))
-#define PIDGIN_PLUGIN_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), PIDGIN_TYPE_PLUGIN_INFO, PidginPluginInfoClass))
-#define PIDGIN_IS_PLUGIN_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), PIDGIN_TYPE_PLUGIN_INFO))
-#define PIDGIN_IS_PLUGIN_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), PIDGIN_TYPE_PLUGIN_INFO))
-#define PIDGIN_PLUGIN_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), PIDGIN_TYPE_PLUGIN_INFO, PidginPluginInfoClass))
-typedef struct _PidginPluginInfo PidginPluginInfo;
-typedef struct _PidginPluginInfoClass PidginPluginInfoClass;
-typedef GtkWidget *(*PidginPluginConfigFrameCb)(PurplePlugin *plugin);
- * Extends #PurplePluginInfo to hold UI information for pidgin.
-struct _PidginPluginInfo {
- PurplePluginInfo parent;
- * PidginPluginInfoClass:
- * The base class for all #PidginPluginInfo's.
-struct _PidginPluginInfoClass {
- PurplePluginInfoClass parent_class;
- void (*_pidgin_reserved1)(void);
- void (*_pidgin_reserved2)(void);
- void (*_pidgin_reserved3)(void);
- void (*_pidgin_reserved4)(void);
+#include "pidginplugininfo.h" - * pidgin_plugin_info_get_type:
- * Returns: The #GType for the #PidginPluginInfo object.
-GType pidgin_plugin_info_get_type(void);
- * pidgin_plugin_info_new:
- * @first_property: The first property name
- * @...: The value of the first property, followed optionally by more
- * name/value pairs, followed by %NULL
- * Creates a new #PidginPluginInfo instance to be returned from
- * #plugin_query of a pidgin plugin, using the provided name/value
- * See purple_plugin_info_new() for a list of available property names.
- * Additionally, you can provide the property
- * <literal>"gtk-config-frame-cb"</literal>, which should be a callback that
- * returns a #GtkWidget for the plugin's configuration
- * (see #PidginPluginConfigFrameCb).
- * See purple_plugin_info_new().
- * Returns: A new #PidginPluginInfo instance.
-PidginPluginInfo *pidgin_plugin_info_new(const char *first_property, ...)
- G_GNUC_NULL_TERMINATED;
* Saves all loaded plugins.