Sun, 12 Jan 2014 19:28:35 +0530
Added the "extra-cb" property for plugins.
Plugins can use this callback to return a string with extra information about itself.
| ChangeLog.API | file | annotate | diff | comparison | revisions | |
| libpurple/plugins.c | file | annotate | diff | comparison | revisions | |
| libpurple/plugins.h | file | annotate | diff | comparison | revisions | |
| pidgin/gtkdialogs.c | file | annotate | diff | comparison | revisions |
--- a/ChangeLog.API Sun Jan 12 16:18:04 2014 +0530 +++ b/ChangeLog.API Sun Jan 12 19:28:35 2014 +0530 @@ -90,6 +90,7 @@ * purple_plugin_info_get_category * purple_plugin_info_get_dependencies * purple_plugin_info_get_error + * purple_plugin_info_get_extra_cb * purple_plugin_info_get_flags * purple_plugin_info_get_icon * purple_plugin_info_get_license_id
--- a/libpurple/plugins.c Sun Jan 12 16:18:04 2014 +0530 +++ b/libpurple/plugins.c Sun Jan 12 19:28:35 2014 +0530 @@ -45,6 +45,9 @@ /** Callback that returns a list of actions the plugin can perform */ PurplePluginActionsCb actions_cb; + /** Callback that returns extra information about a plugin */ + PurplePluginExtraCb extra_cb; + /** Callback that returns a preferences frame for a plugin */ PurplePluginPrefFrameCb pref_frame_cb; @@ -61,6 +64,7 @@ PROP_0, PROP_UI_REQUIREMENT, PROP_ACTIONS_CB, + PROP_EXTRA_CB, PROP_PREF_FRAME_CB, PROP_PREF_REQUEST_CB, PROP_FLAGS, @@ -378,6 +382,9 @@ case PROP_ACTIONS_CB: priv->actions_cb = g_value_get_pointer(value); break; + case PROP_EXTRA_CB: + priv->extra_cb = g_value_get_pointer(value); + break; case PROP_PREF_FRAME_CB: priv->pref_frame_cb = g_value_get_pointer(value); break; @@ -405,6 +412,10 @@ g_value_set_pointer(value, purple_plugin_info_get_actions_cb(info)); break; + case PROP_EXTRA_CB: + g_value_set_pointer(value, + purple_plugin_info_get_extra_cb(info)); + break; case PROP_PREF_FRAME_CB: g_value_set_pointer(value, purple_plugin_info_get_pref_frame_cb(info)); @@ -502,6 +513,13 @@ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(obj_class, PROP_EXTRA_CB, + g_param_spec_pointer("extra-cb", + "Extra info callback", + "Callback that returns extra info about the plugin", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); + g_object_class_install_property(obj_class, PROP_PREF_FRAME_CB, g_param_spec_pointer("pref-frame-cb", "Preferences frame callback", @@ -763,6 +781,16 @@ return priv->actions_cb; } +PurplePluginExtraCb +purple_plugin_info_get_extra_cb(const PurplePluginInfo *info) +{ + PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info); + + g_return_val_if_fail(priv != NULL, NULL); + + return priv->extra_cb; +} + PurplePluginPrefFrameCb purple_plugin_info_get_pref_frame_cb(const PurplePluginInfo *info) {
--- a/libpurple/plugins.h Sun Jan 12 16:18:04 2014 +0530 +++ b/libpurple/plugins.h Sun Jan 12 19:28:35 2014 +0530 @@ -97,6 +97,7 @@ typedef void (*PurplePluginActionCb)(PurplePluginAction *); typedef GList *(*PurplePluginActionsCb)(PurplePlugin *); +typedef gchar *(*PurplePluginExtraCb)(PurplePlugin *); typedef PurplePluginPrefFrame *(*PurplePluginPrefFrameCb)(PurplePlugin *); typedef gpointer (*PurplePluginPrefRequestCb)(PurplePlugin *); @@ -524,10 +525,13 @@ * "abi-version" (guint32) The ABI version required by the plugin. \n * "actions-cb" (PurplePluginActionsCb) Callback that returns a list of * actions the plugin can perform. \n + * "extra-cb" (PurplePluginExtraCb) Callback that returns a newly + * allocated string denoting extra information + * about a plugin. \n * "pref-frame-cb" (PurplePluginPrefFrameCb) Callback that returns a - * preferences frame for the plugin. + * preferences frame for the plugin. \n * "pref-request-cb" (PurplePluginPrefRequestCb) Callback that returns a - * preferences request handle for the plugin. + * preferences request handle for the plugin. \n * "flags" (PurplePluginInfoFlags) The flags for a plugin. \n * * @param first_property The first property name @@ -676,13 +680,24 @@ * * @param info The plugin info to get the callback from. * - * @constreturn The callback that returns a list of #PurplePluginAction - * instances corresponding to the actions a plugin can perform. + * @return The callback that returns a list of #PurplePluginAction + * instances corresponding to the actions a plugin can perform. */ PurplePluginActionsCb purple_plugin_info_get_actions_cb(const PurplePluginInfo *info); /** + * Returns a callback that gives extra information about a plugin. You must + * free the string returned by this callback. + * + * @param info The plugin info to get extra information from. + * + * @return The callback that returns extra information about a plugin. + */ +PurplePluginExtraCb +purple_plugin_info_get_extra_cb(const PurplePluginInfo *info); + +/** * Returns the callback that retrieves the preferences frame for a plugin, set * via the "pref-frame-cb" property of the plugin info. *
--- a/pidgin/gtkdialogs.c Sun Jan 12 16:18:04 2014 +0530 +++ b/pidgin/gtkdialogs.c Sun Jan 12 19:28:35 2014 +0530 @@ -835,8 +835,9 @@ GList *plugins, *l = NULL; PurplePlugin *plugin = NULL; PurplePluginInfo *info; + PurplePluginExtraCb extra_cb; char *title = g_strdup_printf(_("%s Plugin Information"), PIDGIN_NAME); - char *pname = NULL, *authors, *pauthors; + char *pname = NULL, *authors, *pauthors, *pextra; const char *pver, *plicense, *pwebsite, *pid; gboolean ploaded, ploadable; const char * const *authorlist; @@ -851,6 +852,7 @@ for(l = plugins; l; l = l->next) { plugin = PURPLE_PLUGIN(l->data); info = purple_plugin_get_info(plugin); + extra_cb = purple_plugin_info_get_extra_cb(info); pname = g_markup_escape_text(purple_plugin_info_get_name(info), -1); authorlist = purple_plugin_info_get_authors(info); @@ -872,6 +874,11 @@ ploadable = !purple_plugin_info_get_error(info); ploaded = purple_plugin_is_loaded(plugin); + if (ploaded && extra_cb) + pextra = extra_cb(plugin); + else + pextra = NULL; + g_string_append_printf(str, "<dt>%s</dt><dd>" "<b>%s:</b> %s<br/>" @@ -879,6 +886,7 @@ "<b>License:</b> %s<br/>" "<b>Website:</b> %s<br/>" "<b>ID String:</b> %s<br/>" + "<b>Extra:</b> %s<br/>" "<b>Loadable:</b> %s<br/>" "<b>Loaded:</b> %s" "</dd><br/>", @@ -889,10 +897,12 @@ plicense ? plicense : "", pwebsite ? pwebsite : "", pid, + pextra ? pextra : "", ploadable ? "Yes" : "<span style=\"color: #FF0000;\"><b>No</b></span>", ploaded ? "Yes" : "No"); g_free(pname); + g_free(pextra); g_free(pauthors); g_free(authors); }