Sun, 11 Aug 2013 22:48:40 +0530
Refactored pidgin according to the changes
| pidgin/gtkdialogs.c | file | annotate | diff | comparison | revisions | |
| pidgin/gtkplugin.c | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkdialogs.c Sun Aug 11 22:48:19 2013 +0530 +++ b/pidgin/gtkdialogs.c Sun Aug 11 22:48:40 2013 +0530 @@ -834,7 +834,7 @@ char *title = g_strdup_printf(_("%s Plugin Information"), PIDGIN_NAME); char *pname = NULL, *pauthor = NULL; const char *pver, *plicense, *pwebsite, *pid; - gboolean ploaded; + gboolean ploaded, ploadable; static GtkWidget *plugins_info = NULL; str = g_string_sized_new(4096); @@ -854,6 +854,7 @@ plicense = purple_plugin_info_get_license(info); pwebsite = purple_plugin_info_get_website(info); pid = purple_plugin_info_get_id(info); + ploadable = !purple_plugin_info_get_error(info); ploaded = purple_plugin_is_loaded(plugin); g_string_append_printf(str, @@ -863,15 +864,17 @@ "<b>License:</b> %s<br/>" "<b>Website:</b> %s<br/>" "<b>ID String:</b> %s<br/>" + "<b>Loadable:</b> %s<br/>" "<b>Loaded:</b> %s" "</dd><br/>", - pname, - pauthor ? pauthor : "(null)", - pver ? pver : "(null)", - plicense ? plicense : "(null)", - pwebsite ? pwebsite : "(null)", + pname ? pname : "", + pauthor ? pauthor : "", + pver ? pver : "", + plicense ? plicense : "", + pwebsite ? pwebsite : "", pid, - ploaded ? "Yes" : "No"); + ploadable ? "Yes" : "<span style=\"color: #FF0000;\"><b>No</b></span>", + ploaded ? "Yes" : "No"); g_free(pname); g_free(pauthor);
--- a/pidgin/gtkplugin.c Sun Aug 11 22:48:19 2013 +0530 +++ b/pidgin/gtkplugin.c Sun Aug 11 22:48:40 2013 +0530 @@ -55,7 +55,7 @@ }; static void plugin_toggled_stage_two(PurplePlugin *plug, GtkTreeModel *model, - GtkTreeIter *iter, gboolean unload); + GtkTreeIter *iter, GError *error, gboolean unload); static GtkWidget *expander = NULL; static GtkWidget *plugin_dialog = NULL; @@ -275,7 +275,6 @@ 0, purple_plugin_is_loaded(plug), 1, desc, 2, plug, - 3, !purple_plugin_is_loadable(plug), -1); g_free(desc); } @@ -352,7 +351,7 @@ GtkTreeModel *model = (GtkTreeModel *)data[1]; GtkTreeIter *iter = (GtkTreeIter *)data[2]; - plugin_toggled_stage_two(plugin, model, iter, TRUE); + plugin_toggled_stage_two(plugin, model, iter, NULL, TRUE); g_free(data); } @@ -363,25 +362,19 @@ GtkTreeIter *iter = g_new(GtkTreeIter, 1); GtkTreePath *path = gtk_tree_path_new_from_string(pth); PurplePlugin *plug; + GError *error = NULL; GtkWidget *dialog = NULL; gtk_tree_model_get_iter(model, iter, path); gtk_tree_path_free(path); gtk_tree_model_get(model, iter, 2, &plug, -1); - /* Apparently, GTK+ won't honor the sensitive flag on cell renderers for booleans. */ - if (!purple_plugin_is_loadable(plug)) - { - g_free(iter); - return; - } - if (!purple_plugin_is_loaded(plug)) { pidgin_set_cursor(plugin_dialog, GDK_WATCH); - purple_plugin_load(plug); - plugin_toggled_stage_two(plug, model, iter, FALSE); + purple_plugin_load(plug, &error); + plugin_toggled_stage_two(plug, model, iter, error, FALSE); pidgin_clear_cursor(plugin_dialog); } @@ -424,11 +417,11 @@ g_string_free(tmp, TRUE); } else - plugin_toggled_stage_two(plug, model, iter, TRUE); + plugin_toggled_stage_two(plug, model, iter, NULL, TRUE); } } -static void plugin_toggled_stage_two(PurplePlugin *plug, GtkTreeModel *model, GtkTreeIter *iter, gboolean unload) +static void plugin_toggled_stage_two(PurplePlugin *plug, GtkTreeModel *model, GtkTreeIter *iter, GError *error, gboolean unload) { PurplePluginInfo *info = purple_plugin_get_info(plug); @@ -436,12 +429,15 @@ { pidgin_set_cursor(plugin_dialog, GDK_WATCH); - if (!purple_plugin_unload(plug)) + if (!purple_plugin_unload(plug, &error)) { const char *primary = _("Could not unload plugin"); const char *reload = _("The plugin could not be unloaded now, but will be disabled at the next startup."); - purple_notify_warning(NULL, NULL, primary, reload); + char *tmp = g_strdup_printf("%s\n\n%s", reload, error->message); + purple_notify_warning(NULL, NULL, primary, tmp); + g_free(tmp); + purple_plugin_disable(plug); } @@ -451,17 +447,17 @@ gtk_widget_set_sensitive(pref_button, purple_plugin_is_loaded(plug) && pidgin_plugin_has_config_frame(plug)); - if (purple_plugin_get_error(plug) != NULL) + if (error != NULL) { gchar *name = g_markup_escape_text(purple_plugin_info_get_name(info), -1); - gchar *error = g_markup_escape_text(purple_plugin_get_error(plug), -1); + gchar *disp_error = g_markup_escape_text(error->message, -1); gchar *text; text = g_strdup_printf( "<b>%s</b> %s\n<span weight=\"bold\" color=\"red\"%s</span>", purple_plugin_info_get_name(info), - purple_plugin_info_get_version(info), error); + purple_plugin_info_get_version(info), disp_error); gtk_list_store_set(GTK_LIST_STORE (model), iter, 1, text, -1); @@ -469,12 +465,14 @@ text = g_strdup_printf( "<span weight=\"bold\" color=\"red\">%s</span>", - error); + disp_error); gtk_label_set_markup(plugin_error, text); g_free(text); - g_free(error); + g_free(disp_error); g_free(name); + + g_error_free(error); } gtk_list_store_set(GTK_LIST_STORE (model), iter, @@ -558,13 +556,13 @@ gtk_label_set_text(plugin_website, NULL); } - if (purple_plugin_get_error(plug) == NULL) + if (purple_plugin_info_get_error(info) == NULL) { gtk_label_set_text(plugin_error, NULL); } else { - tmp = g_markup_escape_text(purple_plugin_get_error(plug), -1); + tmp = g_markup_escape_text(purple_plugin_info_get_error(info), -1); buf = g_strdup_printf( _("<span foreground=\"red\" weight=\"bold\">" "Error: %s\n" @@ -839,7 +837,7 @@ gtk_widget_set_sensitive(pref_button, FALSE); gtk_window_set_role(GTK_WINDOW(plugin_dialog), "plugins"); - ls = gtk_list_store_new(4, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN); + ls = gtk_list_store_new(3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_POINTER); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), 1, GTK_SORT_ASCENDING);