Remove all the code from the old account editor

Thu, 15 Sep 2022 23:33:56 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Thu, 15 Sep 2022 23:33:56 -0500
changeset 41690
fc7915f49b1c
parent 41689
e1d3677c844b
child 41691
83849603277b

Remove all the code from the old account editor

Testing Done:
Opened the account editor, verified everything looked right.

Reviewed at https://reviews.imfreedom.org/r/1772/

ChangeLog.API file | annotate | diff | comparison | revisions
doc/reference/pidgin/meson.build file | annotate | diff | comparison | revisions
doc/reference/pidgin/pidgin.toml.in file | annotate | diff | comparison | revisions
doc/reference/pidgin/signals_gtkaccount.md file | annotate | diff | comparison | revisions
pidgin/gtkaccount.c file | annotate | diff | comparison | revisions
pidgin/gtkaccount.h file | annotate | diff | comparison | revisions
pidgin/pidginaccountmanager.c file | annotate | diff | comparison | revisions
--- a/ChangeLog.API	Thu Sep 15 23:04:59 2022 -0500
+++ b/ChangeLog.API	Thu Sep 15 23:33:56 2022 -0500
@@ -807,6 +807,7 @@
 		* PidginWindow renamed to PidginConvWindow
 
 		Removed:
+		* account-modified (gtkaccount signal)
 		* conversation-dragging (gtkconv signal)
 		* conversation-timestamp (gtkconv signal)
 		* conversation-hiding (gtkconv signal)
@@ -822,6 +823,8 @@
 		* gtk_imhtml_image_free
 		* gtk_imhtml_image_new
 		* gtk_imhtml_image_scale
+		* pidgin_account_dialog_show
+		* pidgin_accounts_get_handle
 		* pidgin_accounts_window_hide
 		* pidgin_accounts_window_show, use pidgin_account_manager_new instead.
 		* pidgin_append_blist_node_extended_menu
--- a/doc/reference/pidgin/meson.build	Thu Sep 15 23:04:59 2022 -0500
+++ b/doc/reference/pidgin/meson.build	Thu Sep 15 23:33:56 2022 -0500
@@ -1,5 +1,4 @@
 pidgin_doc_content_files = [
-	'signals_gtkaccount.md',
 	'signals_gtkblist.md',
 	'signals_gtkconv.md',
 ]
--- a/doc/reference/pidgin/pidgin.toml.in	Thu Sep 15 23:04:59 2022 -0500
+++ b/doc/reference/pidgin/pidgin.toml.in	Thu Sep 15 23:33:56 2022 -0500
@@ -57,7 +57,6 @@
 [extra]
 # The same order will be used when generating the index
 content_files = [
-	"signals_gtkaccount.md",
 	"signals_gtkblist.md",
 	"signals_gtkconv.md",
 ]
--- a/doc/reference/pidgin/signals_gtkaccount.md	Thu Sep 15 23:04:59 2022 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-Title: Account Signals
-Slug: account-signals
-
-## Account Signals
-
-### account-modified
-
-```c
-void user_function(PurpleAccount *account, gpointer user_data);
-```
-
-Emitted when the settings for an account have been changed and saved.
-
-**Parameters:**
-
-**account**
-: The account that has been modified.
-
-**user_data**
-: User data set when the signal handler was connected.
-
--- a/pidgin/gtkaccount.c	Thu Sep 15 23:04:59 2022 -0500
+++ b/pidgin/gtkaccount.c	Thu Sep 15 23:33:56 2022 -0500
@@ -19,1260 +19,11 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111-1301  USA
  */
 
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <glib/gi18n-lib.h>
-
 #include <purple.h>
-#include "libpurple/glibcompat.h"
 
 #include "gtkaccount.h"
-#include "gtkblist.h"
-#include "gtkdialogs.h"
-#include "gtkutils.h"
 #include "pidgincore.h"
-#include "pidgindialog.h"
-#include "pidginprotocolchooser.h"
-#include "pidginproxyoptions.h"
-
-enum {
-	RESPONSE_ADD = 0,
-	RESPONSE_CLOSE,
-};
-
-typedef struct
-{
-	PurpleAccount *account;
-	char *username;
-	char *alias;
-
-} PidginAccountAddUserData;
-
-typedef struct
-{
-	GtkWidget *widget;
-	gchar *setting;
-	PurplePrefType type;
-} ProtocolOptEntry;
-
-typedef struct
-{
-	PidginAccountDialogType type;
-
-	PurpleAccount *account;
-	char *protocol_id;
-	PurpleProtocol *protocol;
-
-	GList *user_split_entries;
-	GList *protocol_opt_entries;
-
-	GtkSizeGroup *sg;
-	GtkWidget *window;
-
-	GtkWidget *notebook;
-	GtkWidget *top_vbox;
-	GtkWidget *ok_button;
-	GtkWidget *register_button;
-
-	/* Login Options */
-	GtkWidget *login_frame;
-	GtkWidget *protocol_menu;
-	GtkWidget *username_entry;
-	GdkRGBA username_entry_hint_color;
-	GtkWidget *alias_entry;
-
-	/* User Options */
-	GtkWidget *user_frame;
-	GtkWidget *icon_hbox;
-	GtkWidget *icon_check;
-	GtkWidget *icon_entry;
-	GtkFileChooserNative *icon_filesel;
-	GtkWidget *icon_preview;
-	GtkWidget *icon_text;
-	PurpleImage *icon_img;
-
-	/* Protocol Options */
-	GtkWidget *protocol_frame;
-
-	GtkWidget *proxy_options;
-
-	/* Voice & Video Options*/
-	GtkWidget *voice_frame;
-	GtkWidget *suppression_check;
-
-} AccountPrefsDialog;
-
-typedef struct {
-	PurpleAccount *account;
-	PidginAccountDialogType type;
-} PidginAccountDialogShowData;
-
-/**************************************************************************
- * Add/Modify Account dialog
- **************************************************************************/
-static void add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent);
-static void add_user_options(AccountPrefsDialog *dialog, GtkWidget *parent);
-static void add_account_options(AccountPrefsDialog *dialog);
-static void add_voice_options(AccountPrefsDialog *dialog);
-
-static GtkWidget *
-add_pref_box(AccountPrefsDialog *dialog, GtkWidget *parent,
-			 const char *text, GtkWidget *widget)
-{
-	return pidgin_add_widget_to_vbox(GTK_BOX(parent), text, dialog->sg, widget, TRUE, NULL);
-}
-
-static void
-set_dialog_icon(AccountPrefsDialog *dialog, gpointer data, size_t len, gchar *new_icon_path)
-{
-	GdkPixbuf *pixbuf = NULL;
-	PurpleBuddyIconSpec *icon_spec = NULL;
-
-	if (dialog->icon_img) {
-		g_object_unref(dialog->icon_img);
-		dialog->icon_img = NULL;
-	}
-
-	if (new_icon_path != NULL) {
-		dialog->icon_img = purple_image_new_from_file(new_icon_path, NULL);
-		purple_debug_warning("gtkaccount", "data was not necessary");
-		g_free(data);
-	} else if (data != NULL) {
-		if (len > 0)
-			dialog->icon_img = purple_image_new_take_data(data, len);
-		else
-			g_free(data);
-	}
-
-	if (dialog->icon_img != NULL) {
-		pixbuf = purple_gdk_pixbuf_from_image(dialog->icon_img);
-	}
-
-	if (dialog->protocol)
-		icon_spec = purple_protocol_get_icon_spec(dialog->protocol);
-
-	if (pixbuf && icon_spec && (icon_spec->scale_rules & PURPLE_ICON_SCALE_DISPLAY))
-	{
-		/* Scale the icon to something reasonable */
-		int width, height;
-		GdkPixbuf *scale;
-
-		pidgin_buddy_icon_get_scale_size(pixbuf, icon_spec,
-				PURPLE_ICON_SCALE_DISPLAY, &width, &height);
-		scale = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR);
-
-		g_object_unref(G_OBJECT(pixbuf));
-		pixbuf = scale;
-	}
-
-	purple_buddy_icon_spec_free(icon_spec);
-
-	if (pixbuf == NULL)
-	{
-		/* Show a placeholder icon */
-		gtk_image_set_from_icon_name(GTK_IMAGE(dialog->icon_entry),
-		                             "select-avatar");
-		gtk_image_set_icon_size(GTK_IMAGE(dialog->icon_entry),
-		                        GTK_ICON_SIZE_LARGE);
-	} else {
-		gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_entry), pixbuf);
-		g_object_unref(G_OBJECT(pixbuf));
-	}
-}
-
-static void
-set_account_protocol_cb(GObject *obj, G_GNUC_UNUSED GParamSpec *pspec,
-                        gpointer data)
-{
-	AccountPrefsDialog *dialog = data;
-	PidginProtocolChooser *chooser = PIDGIN_PROTOCOL_CHOOSER(obj);
-	PurpleProtocol *protocol = pidgin_protocol_chooser_get_protocol(chooser);
-
-	if(g_set_object(&dialog->protocol, protocol)) {
-		g_clear_pointer(&dialog->protocol_id, g_free);
-	}
-
-	if(PURPLE_IS_PROTOCOL(dialog->protocol)) {
-		dialog->protocol_id = g_strdup(purple_protocol_get_id(dialog->protocol));
-	}
-
-	if (dialog->account != NULL) {
-		purple_account_clear_settings(dialog->account);
-	}
-
-	add_login_options(dialog, dialog->top_vbox);
-	add_user_options(dialog, dialog->top_vbox);
-	add_account_options(dialog);
-	add_voice_options(dialog);
-
-	gtk_widget_grab_focus(dialog->protocol_menu);
-
-	if (!dialog->protocol ||
-	    !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, SERVER, register_user))
-	{
-		gtk_check_button_set_active(GTK_CHECK_BUTTON(dialog->register_button), FALSE);
-		gtk_widget_hide(dialog->register_button);
-	} else {
-		if (purple_protocol_get_options(dialog->protocol) &
-		    OPT_PROTO_REGISTER_NOSCREENNAME) {
-			gtk_widget_set_sensitive(dialog->register_button, TRUE);
-		} else {
-			gtk_check_button_set_active(GTK_CHECK_BUTTON(
-				dialog->register_button), FALSE);
-			gtk_widget_set_sensitive(dialog->register_button, FALSE);
-		}
-		gtk_widget_show(dialog->register_button);
-	}
-}
-
-static void
-username_changed_cb(GtkEntry *entry, AccountPrefsDialog *dialog)
-{
-	gboolean opt_noscreenname = (dialog->protocol != NULL &&
-		(purple_protocol_get_options(dialog->protocol) & OPT_PROTO_REGISTER_NOSCREENNAME));
-	gboolean username_valid = purple_validate(dialog->protocol,
-		gtk_editable_get_text(GTK_EDITABLE(entry)));
-
-	if (dialog->ok_button) {
-		if (opt_noscreenname && dialog->register_button &&
-			gtk_check_button_get_active(
-				GTK_CHECK_BUTTON(dialog->register_button)))
-			gtk_widget_set_sensitive(dialog->ok_button, TRUE);
-		else
-			gtk_widget_set_sensitive(dialog->ok_button,
-				username_valid);
-	}
-
-	if (dialog->register_button) {
-		if (opt_noscreenname)
-			gtk_widget_set_sensitive(dialog->register_button, TRUE);
-		else
-			gtk_widget_set_sensitive(dialog->register_button,
-				username_valid);
-	}
-}
-
-static void
-register_button_cb(GtkWidget *checkbox, AccountPrefsDialog *dialog)
-{
-	int register_checked = gtk_check_button_get_active(
-		GTK_CHECK_BUTTON(dialog->register_button));
-	int opt_noscreenname = (dialog->protocol != NULL &&
-		(purple_protocol_get_options(dialog->protocol) & OPT_PROTO_REGISTER_NOSCREENNAME));
-	int register_noscreenname = (opt_noscreenname && register_checked);
-
-	if (register_noscreenname) {
-		gtk_editable_set_text(GTK_EDITABLE(dialog->username_entry), "");
-	}
-	gtk_widget_set_sensitive(dialog->username_entry, !register_noscreenname);
-
-	if (dialog->ok_button) {
-		gtk_widget_set_sensitive(dialog->ok_button,
-			(opt_noscreenname && register_checked) ||
-			*gtk_editable_get_text(GTK_EDITABLE(dialog->username_entry))
-				!= '\0');
-	}
-}
-
-static void
-icon_filesel_choose_cb(GtkWidget *widget, gint response, gpointer data)
-{
-	AccountPrefsDialog *dialog = data;
-
-	if (response == GTK_RESPONSE_ACCEPT) {
-		GFile *file = NULL;
-		gchar *filename = NULL;
-		gpointer data = NULL;
-		size_t len = 0;
-
-		file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(widget));
-		filename = g_file_get_path(file);
-
-		data = pidgin_convert_buddy_icon(dialog->protocol, filename, &len);
-		set_dialog_icon(dialog, data, len, filename);
-
-		g_free(filename);
-		g_object_unref(file);
-	}
-
-	g_clear_object(&dialog->icon_filesel);
-}
-
-static void
-icon_select_cb(GtkWidget *button, AccountPrefsDialog *dialog)
-{
-	dialog->icon_filesel = gtk_file_chooser_native_new(_("Buddy Icon"),
-	                                                   GTK_WINDOW(dialog->window),
-	                                                   GTK_FILE_CHOOSER_ACTION_OPEN,
-	                                                   _("_Open"),
-	                                                   _("_Cancel"));
-
-	g_signal_connect(G_OBJECT(dialog->icon_filesel), "response",
-					 G_CALLBACK(icon_filesel_choose_cb), dialog);
-
-	gtk_native_dialog_show(GTK_NATIVE_DIALOG(dialog->icon_filesel));
-}
-
-static void
-icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog)
-{
-	set_dialog_icon(dialog, NULL, 0, NULL);
-}
-
-static void
-update_editable(PurpleConnection *gc, AccountPrefsDialog *dialog)
-{
-	GtkStyleContext *style;
-	gboolean set;
-	GList *l;
-
-	if (dialog->account == NULL)
-		return;
-
-	if (gc != NULL && dialog->account != purple_connection_get_account(gc))
-		return;
-
-	set = !(purple_account_is_connected(dialog->account) || purple_account_is_connecting(dialog->account));
-	gtk_widget_set_sensitive(dialog->protocol_menu, set);
-	gtk_editable_set_editable(GTK_EDITABLE(dialog->username_entry), set);
-	style = gtk_widget_get_style_context(dialog->username_entry);
-
-	if (set) {
-		gtk_style_context_remove_class(style, "copyable-insensitive");
-	} else {
-		gtk_style_context_add_class(style, "copyable-insensitive");
-	}
-
-	for (l = dialog->user_split_entries ; l != NULL ; l = l->next) {
-		if (l->data == NULL)
-			continue;
-		if (GTK_IS_EDITABLE(l->data)) {
-			gtk_editable_set_editable(GTK_EDITABLE(l->data), set);
-			style = gtk_widget_get_style_context(GTK_WIDGET(l->data));
-			if (set) {
-				gtk_style_context_remove_class(style,
-						"copyable-insensitive");
-			} else {
-				gtk_style_context_add_class(style,
-						"copyable-insensitive");
-			}
-		} else {
-			gtk_widget_set_sensitive(GTK_WIDGET(l->data), set);
-		}
-	}
-}
-
-static void
-add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent)
-{
-	GtkWidget *frame;
-	GtkWidget *hbox;
-	GtkWidget *vbox;
-	GtkWidget *entry;
-	GList *user_splits;
-	GList *l, *l2;
-	char *username = NULL;
-	GtkCssProvider *entry_css;
-	const gchar *res = "/im/pidgin/Pidgin3/Accounts/entry.css";
-
-	entry_css = gtk_css_provider_new();
-	gtk_css_provider_load_from_resource(entry_css, res);
-
-	if (dialog->protocol_menu != NULL)
-	{
-		g_object_ref(G_OBJECT(dialog->protocol_menu));
-		hbox = g_object_get_data(G_OBJECT(dialog->protocol_menu), "container");
-		gtk_box_remove(GTK_BOX(hbox), dialog->protocol_menu);
-	}
-
-	if (dialog->login_frame != NULL) {
-		gtk_widget_unparent(dialog->login_frame);
-	}
-
-	/* Build the login options frame. */
-	frame = pidgin_make_frame(parent, _("Login Options"));
-
-	/* cringe */
-	dialog->login_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
-
-	gtk_box_reorder_child_after(GTK_BOX(parent), dialog->login_frame, NULL);
-
-	/* Main vbox */
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_box_append(GTK_BOX(frame), vbox);
-
-	/* Protocol */
-	if(dialog->protocol_menu == NULL) {
-		dialog->protocol_menu = pidgin_protocol_chooser_new();
-		pidgin_protocol_chooser_set_protocol(PIDGIN_PROTOCOL_CHOOSER(dialog->protocol_menu),
-		                                     dialog->protocol);
-		g_signal_connect(G_OBJECT(dialog->protocol_menu), "notify::protocol",
-		                 G_CALLBACK(set_account_protocol_cb), dialog);
-		g_object_ref(G_OBJECT(dialog->protocol_menu));
-	}
-
-	hbox = add_pref_box(dialog, vbox, _("Pro_tocol:"), dialog->protocol_menu);
-	g_object_set_data(G_OBJECT(dialog->protocol_menu), "container", hbox);
-
-	g_object_unref(G_OBJECT(dialog->protocol_menu));
-
-	/* Username */
-	dialog->username_entry = gtk_entry_new();
-	gtk_style_context_add_provider(
-			gtk_widget_get_style_context(dialog->username_entry),
-			GTK_STYLE_PROVIDER(entry_css),
-			GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-	g_object_set(G_OBJECT(dialog->username_entry), "truncate-multiline", TRUE, NULL);
-
-	add_pref_box(dialog, vbox, _("_Username:"), dialog->username_entry);
-
-	if (dialog->account != NULL)
-		username = g_strdup(purple_account_get_username(dialog->account));
-
-	if (!username && dialog->protocol
-			&& PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, CLIENT, get_account_text_table)) {
-		GHashTable *table;
-		const char *label;
-		table = purple_protocol_client_get_account_text_table(PURPLE_PROTOCOL_CLIENT(dialog->protocol), NULL);
-		label = g_hash_table_lookup(table, "login_label");
-
-		gtk_entry_set_placeholder_text(GTK_ENTRY(dialog->username_entry), label);
-
-		g_hash_table_destroy(table);
-	}
-
-	g_signal_connect(G_OBJECT(dialog->username_entry), "changed",
-					 G_CALLBACK(username_changed_cb), dialog);
-
-	/* Do the user split thang */
-	if (dialog->protocol == NULL)
-		user_splits = NULL;
-	else
-		user_splits = purple_protocol_get_user_splits(dialog->protocol);
-
-	if (dialog->user_split_entries != NULL) {
-		g_list_free(dialog->user_split_entries);
-		dialog->user_split_entries = NULL;
-	}
-
-	for (l = user_splits; l != NULL; l = l->next) {
-		PurpleAccountUserSplit *split = l->data;
-		char *buf;
-
-		if (purple_account_user_split_is_constant(split))
-			entry = NULL;
-		else {
-			buf = g_strdup_printf("_%s:", purple_account_user_split_get_text(split));
-			entry = gtk_entry_new();
-			gtk_style_context_add_provider(
-					gtk_widget_get_style_context(entry),
-					GTK_STYLE_PROVIDER(entry_css),
-					GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
-			add_pref_box(dialog, vbox, buf, entry);
-			g_free(buf);
-		}
-
-		dialog->user_split_entries =
-			g_list_append(dialog->user_split_entries, entry);
-	}
-
-	for (l = g_list_last(dialog->user_split_entries),
-		 l2 = g_list_last(user_splits);
-		 l != NULL && l2 != NULL;
-		 l = l->prev, l2 = l2->prev) {
-
-		GtkWidget *entry = l->data;
-		PurpleAccountUserSplit *split = l2->data;
-		const char *value = NULL;
-		char *c;
-
-		if (dialog->account != NULL && username != NULL) {
-			if(purple_account_user_split_get_reverse(split))
-				c = strrchr(username,
-						purple_account_user_split_get_separator(split));
-			else
-				c = strchr(username,
-						purple_account_user_split_get_separator(split));
-
-			if (c != NULL) {
-				*c = '\0';
-				c++;
-
-				value = c;
-			}
-		}
-		if (value == NULL)
-			value = purple_account_user_split_get_default_value(split);
-
-		if (value != NULL && entry != NULL) {
-			gtk_editable_set_text(GTK_EDITABLE(entry), value);
-		}
-	}
-
-	g_list_free_full(user_splits,
-	                 (GDestroyNotify)purple_account_user_split_destroy);
-
-	if (username != NULL) {
-		gtk_editable_set_text(GTK_EDITABLE(dialog->username_entry), username);
-	}
-
-	g_free(username);
-
-	/* Do not let the user change the protocol/username while connected. */
-	update_editable(NULL, dialog);
-	purple_signal_connect(purple_connections_get_handle(), "signing-on", dialog,
-					G_CALLBACK(update_editable), dialog);
-	purple_signal_connect(purple_connections_get_handle(), "signed-off", dialog,
-					G_CALLBACK(update_editable), dialog);
-
-	g_object_unref(entry_css);
-}
-
-static void
-icon_check_cb(GtkWidget *checkbox, AccountPrefsDialog *dialog)
-{
-	gtk_widget_set_sensitive(dialog->icon_hbox, gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->icon_check)));
-}
-
-static void
-add_user_options(AccountPrefsDialog *dialog, GtkWidget *parent)
-{
-	GtkWidget *frame;
-	GtkWidget *vbox;
-	GtkWidget *vbox2;
-	GtkWidget *hbox;
-	GtkWidget *hbox2;
-	GtkWidget *button;
-	GtkWidget *label;
-
-	if (dialog->user_frame != NULL) {
-		gtk_widget_unparent(dialog->user_frame);
-	}
-
-	/* Build the user options frame. */
-	frame = pidgin_make_frame(parent, _("User Options"));
-	dialog->user_frame = gtk_widget_get_parent(gtk_widget_get_parent(frame));
-
-	gtk_box_reorder_child_after(GTK_BOX(parent), dialog->user_frame,
-	                            gtk_widget_get_first_child(parent));
-
-	/* Main vbox */
-	vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_box_append(GTK_BOX(frame), vbox);
-
-	/* Alias */
-	dialog->alias_entry = gtk_entry_new();
-	add_pref_box(dialog, vbox, _("_Local alias:"), dialog->alias_entry);
-
-	/* Buddy icon */
-	dialog->icon_check = gtk_check_button_new_with_mnemonic(_("Use this buddy _icon for this account:"));
-	g_signal_connect(G_OBJECT(dialog->icon_check), "toggled", G_CALLBACK(icon_check_cb), dialog);
-	gtk_box_append(GTK_BOX(vbox), dialog->icon_check);
-
-	dialog->icon_hbox = hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-	gtk_widget_set_sensitive(hbox, gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->icon_check)));
-	gtk_box_append(GTK_BOX(vbox), hbox);
-
-	label = gtk_label_new("    ");
-	gtk_box_append(GTK_BOX(hbox), label);
-
-	button = gtk_button_new();
-	gtk_box_append(GTK_BOX(hbox), button);
-	g_signal_connect(G_OBJECT(button), "clicked",
-	                 G_CALLBACK(icon_select_cb), dialog);
-
-	dialog->icon_entry = gtk_image_new();
-	gtk_button_set_child(GTK_BUTTON(button), dialog->icon_entry);
-	/* TODO: Uh, isn't this next line pretty useless? */
-	pidgin_set_accessible_label(dialog->icon_entry, GTK_LABEL(label));
-	if (dialog->icon_img) {
-		g_object_unref(dialog->icon_img);
-		dialog->icon_img = NULL;
-	}
-
-	vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
-	gtk_widget_set_hexpand(vbox2, TRUE);
-	gtk_box_append(GTK_BOX(hbox), vbox2);
-
-	hbox2 = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
-	gtk_widget_set_margin_top(hbox2, 12);
-	gtk_widget_set_margin_bottom(hbox2, 12);
-	gtk_box_append(GTK_BOX(vbox2), hbox2);
-
-	button = gtk_button_new_with_mnemonic(_("_Remove"));
-	g_signal_connect(G_OBJECT(button), "clicked",
-			 G_CALLBACK(icon_reset_cb), dialog);
-	gtk_box_append(GTK_BOX(hbox2), button);
-
-	if (dialog->protocol != NULL) {
-		PurpleBuddyIconSpec *icon_spec = purple_protocol_get_icon_spec(dialog->protocol);
-
-		if (!icon_spec || icon_spec->format == NULL) {
-			gtk_widget_hide(dialog->icon_check);
-			gtk_widget_hide(dialog->icon_hbox);
-		}
-
-		purple_buddy_icon_spec_free(icon_spec);
-	}
-
-	if (dialog->account != NULL) {
-		PurpleImage *img;
-		gpointer data = NULL;
-		size_t len = 0;
-
-		if (purple_account_get_private_alias(dialog->account)) {
-			gtk_editable_set_text(GTK_EDITABLE(dialog->alias_entry),
-			                      purple_account_get_private_alias(dialog->account));
-		}
-
-		gtk_check_button_set_active(GTK_CHECK_BUTTON(dialog->icon_check),
-					     !purple_account_get_bool(dialog->account, "use-global-buddyicon",
-								       TRUE));
-
-		img = purple_buddy_icons_find_account_icon(dialog->account);
-		if (img)
-		{
-			len = purple_image_get_data_size(img);
-			data = g_memdup2(purple_image_get_data(img), len);
-		}
-		set_dialog_icon(dialog, data, len,
-		                g_strdup(purple_account_get_buddy_icon_path(dialog->account)));
-	} else {
-		set_dialog_icon(dialog, NULL, 0, NULL);
-	}
-
-#if 0
-	if (!dialog->protocol ||
-			(!(purple_protocol_get_options(dialog->protocol) & OPT_PROTO_MAIL_CHECK) &&
-			 (purple_protocol_get_icon_spec(dialog->protocol).format ==  NULL))) {
 
-		/* Nothing to see :( aww. */
-		gtk_widget_hide(dialog->user_frame);
-	}
-#endif
-}
-
-static void
-protocol_opt_entry_free(ProtocolOptEntry *opt_entry)
-{
-	g_return_if_fail(opt_entry != NULL);
-
-	g_free(opt_entry->setting);
-	g_free(opt_entry);
-}
-
-static void
-add_account_options(AccountPrefsDialog *dialog)
-{
-	PurpleAccountOption *option;
-	PurpleAccount *account;
-	GtkWidget *vbox, *check, *entry, *combo;
-	GList *list, *node, *opts;
-	gint i, idx, int_value;
-	GtkListStore *model;
-	GtkTreeIter iter;
-	GtkCellRenderer *renderer;
-	PurpleKeyValuePair *kvp;
-	GList *l;
-	char buf[1024];
-	char *title, *tmp;
-	const char *str_value;
-	gboolean bool_value;
-	ProtocolOptEntry *opt_entry;
-	const GSList *str_hints;
-
-	if (dialog->protocol_frame != NULL) {
-		gtk_notebook_remove_page (GTK_NOTEBOOK(dialog->notebook), 1);
-		dialog->protocol_frame = NULL;
-	}
-
-	g_list_free_full(dialog->protocol_opt_entries, (GDestroyNotify)protocol_opt_entry_free);
-	dialog->protocol_opt_entries = NULL;
-
-	if (dialog->protocol == NULL) {
-		return;
-	}
-
-	opts = purple_protocol_get_account_options(dialog->protocol);
-	if(opts == NULL) {
-		return;
-	}
-
-	account = dialog->account;
-
-	/* Main vbox */
-	dialog->protocol_frame = vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 6);
-	gtk_notebook_insert_page(GTK_NOTEBOOK(dialog->notebook), vbox,
-			gtk_label_new_with_mnemonic(_("Ad_vanced")), 1);
-
-	for (l = opts; l != NULL; l = l->next)
-	{
-		option = (PurpleAccountOption *)l->data;
-
-		opt_entry = g_new0(ProtocolOptEntry, 1);
-		opt_entry->type = purple_account_option_get_pref_type(option);
-		opt_entry->setting = g_strdup(purple_account_option_get_setting(option));
-
-		switch (opt_entry->type)
-		{
-			case PURPLE_PREF_BOOLEAN:
-				if (account == NULL ||
-					!purple_strequal(purple_account_get_protocol_id(account),
-						   dialog->protocol_id))
-				{
-					bool_value = purple_account_option_get_default_bool(option);
-				}
-				else
-				{
-					bool_value = purple_account_get_bool(account,
-						purple_account_option_get_setting(option),
-						purple_account_option_get_default_bool(option));
-				}
-
-				tmp = g_strconcat("_", purple_account_option_get_text(option), NULL);
-				opt_entry->widget = check = gtk_check_button_new_with_mnemonic(tmp);
-				g_free(tmp);
-
-				gtk_check_button_set_active(GTK_CHECK_BUTTON(check),
-				                            bool_value);
-
-				gtk_box_append(GTK_BOX(vbox), check);
-				break;
-
-			case PURPLE_PREF_INT:
-				if (account == NULL ||
-					!purple_strequal(purple_account_get_protocol_id(account),
-						   dialog->protocol_id))
-				{
-					int_value = purple_account_option_get_default_int(option);
-				}
-				else
-				{
-					int_value = purple_account_get_int(account,
-						purple_account_option_get_setting(option),
-						purple_account_option_get_default_int(option));
-				}
-
-				g_snprintf(buf, sizeof(buf), "%d", int_value);
-
-				opt_entry->widget = entry = gtk_entry_new();
-				gtk_editable_set_text(GTK_EDITABLE(entry), buf);
-
-				title = g_strdup_printf("_%s:",
-						purple_account_option_get_text(option));
-				add_pref_box(dialog, vbox, title, entry);
-				g_free(title);
-				break;
-
-			case PURPLE_PREF_STRING:
-				if (account == NULL ||
-					!purple_strequal(purple_account_get_protocol_id(account),
-						   dialog->protocol_id))
-				{
-					str_value = purple_account_option_get_default_string(option);
-				}
-				else
-				{
-					str_value = purple_account_get_string(account,
-						purple_account_option_get_setting(option),
-						purple_account_option_get_default_string(option));
-				}
-
-				str_hints = purple_account_option_string_get_hints(option);
-				if (str_hints)
-				{
-					const GSList *hint_it = str_hints;
-					entry = gtk_combo_box_text_new_with_entry();
-					while (hint_it)
-					{
-						const gchar *hint = hint_it->data;
-						hint_it = g_slist_next(hint_it);
-						gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(entry),
-						                               hint);
-					}
-					if (str_value != NULL) {
-						GtkWidget *real_entry = NULL;
-						real_entry = gtk_combo_box_get_child(GTK_COMBO_BOX(entry));
-						gtk_editable_set_text(GTK_EDITABLE(real_entry),
-						                      str_value);
-					}
-				} else {
-					entry = gtk_entry_new();
-					gtk_editable_set_text(GTK_EDITABLE(entry),
-					                      str_value ? str_value : "");
-				}
-
-				opt_entry->widget = entry;
-				if (purple_account_option_string_get_masked(option) && str_hints)
-					g_warn_if_reached();
-				else if (purple_account_option_string_get_masked(option))
-				{
-					gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
-				}
-
-				title = g_strdup_printf("_%s:",
-						purple_account_option_get_text(option));
-				add_pref_box(dialog, vbox, title, entry);
-				g_free(title);
-				break;
-
-			case PURPLE_PREF_STRING_LIST:
-				i = 0;
-				idx = 0;
-
-				if (account == NULL ||
-					!purple_strequal(purple_account_get_protocol_id(account),
-						   dialog->protocol_id))
-				{
-					str_value = purple_account_option_get_default_list_value(option);
-				}
-				else
-				{
-					str_value = purple_account_get_string(account,
-						purple_account_option_get_setting(option),
-						purple_account_option_get_default_list_value(option));
-				}
-
-				list = purple_account_option_get_list(option);
-				model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
-				opt_entry->widget = combo = gtk_combo_box_new_with_model(GTK_TREE_MODEL(model));
-
-				/* Loop through list of PurpleKeyValuePair items */
-				for (node = list; node != NULL; node = node->next) {
-					if (node->data != NULL) {
-						kvp = (PurpleKeyValuePair *) node->data;
-						if ((kvp->value != NULL) && (str_value != NULL) &&
-						    !g_utf8_collate(kvp->value, str_value))
-							idx = i;
-
-						gtk_list_store_append(model, &iter);
-						gtk_list_store_set(model, &iter,
-								0, kvp->key,
-								1, kvp->value,
-								-1);
-					}
-
-					i++;
-				}
-
-				/* Set default */
-				gtk_combo_box_set_active(GTK_COMBO_BOX(combo), idx);
-
-				/* Define renderer */
-				renderer = gtk_cell_renderer_text_new();
-				gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer,
-						TRUE);
-				gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo),
-						renderer, "text", 0, NULL);
-
-				title = g_strdup_printf("_%s:",
-						purple_account_option_get_text(option));
-				add_pref_box(dialog, vbox, title, combo);
-				g_free(title);
-				break;
-
-			default:
-				purple_debug_error("gtkaccount", "Invalid Account Option pref type (%d)\n",
-						   opt_entry->type);
-				g_free(opt_entry->setting);
-				g_free(opt_entry);
-				continue;
-		}
-
-		dialog->protocol_opt_entries =
-			g_list_append(dialog->protocol_opt_entries, opt_entry);
-
-	}
-	g_list_free_full(opts, (GDestroyNotify)purple_account_option_destroy);
-}
-
-static void
-add_voice_options(AccountPrefsDialog *dialog)
-{
-	if (!dialog->protocol || !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, MEDIA, initiate_session)) {
-		if (dialog->voice_frame) {
-			gtk_widget_unparent(dialog->voice_frame);
-			dialog->voice_frame = NULL;
-			dialog->suppression_check = NULL;
-		}
-		return;
-	}
-
-	if (!dialog->voice_frame) {
-		dialog->voice_frame = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-
-		dialog->suppression_check =
-				gtk_check_button_new_with_mnemonic(_("Use _silence suppression"));
-		gtk_box_append(GTK_BOX(dialog->voice_frame), dialog->suppression_check);
-
-		gtk_notebook_append_page(GTK_NOTEBOOK(dialog->notebook),
-				dialog->voice_frame, gtk_label_new_with_mnemonic(_("_Voice and Video")));
-	}
-
-	if (dialog->account) {
-		gtk_check_button_set_active(GTK_CHECK_BUTTON(dialog->suppression_check),
-		                            purple_account_get_silence_suppression(dialog->account));
-	} else {
-		gtk_check_button_set_active(GTK_CHECK_BUTTON(dialog->suppression_check), FALSE);
-	}
-}
-
-static void
-account_win_destroy_cb(AccountPrefsDialog *dialog)
-{
-	gtk_window_destroy(GTK_WINDOW(dialog->window));
-
-	g_list_free(dialog->user_split_entries);
-	g_list_free_full(dialog->protocol_opt_entries, (GDestroyNotify)protocol_opt_entry_free);
-	g_free(dialog->protocol_id);
-	g_object_unref(dialog->sg);
-
-	if (dialog->icon_img)
-		g_object_unref(dialog->icon_img);
-
-	g_clear_object(&dialog->icon_filesel);
-
-	purple_signals_disconnect_by_handle(dialog);
-
-	g_free(dialog);
-}
-
-static void
-account_register_cb(PurpleAccount *account, gboolean succeeded, void *user_data)
-{
-	if (succeeded)
-	{
-		const PurpleSavedStatus *saved_status = purple_savedstatus_get_current();
-		purple_signal_emit(pidgin_accounts_get_handle(), "account-modified", account);
-
-		if (saved_status != NULL && purple_account_get_remember_password(account)) {
-			purple_savedstatus_activate_for_account(saved_status, account);
-			purple_account_set_enabled(account, TRUE);
-		}
-	}
-	else
-		purple_accounts_delete(account);
-}
-
-static void
-account_prefs_save(AccountPrefsDialog *dialog) {
-	PurpleAccountManager *manager = NULL;
-	PurpleProxyInfo *proxy_info = NULL;
-	GList *l, *l2;
-	const char *value;
-	char *username;
-	char *tmp;
-	gboolean new_acct = FALSE, icon_change = FALSE;
-	PurpleAccount *account;
-	PurpleBuddyIconSpec *icon_spec = NULL;
-
-	manager = purple_account_manager_get_default();
-
-	/* Build the username string. */
-	username = g_strdup(gtk_editable_get_text(GTK_EDITABLE(dialog->username_entry)));
-
-	if (dialog->protocol != NULL)
-	{
-		for (l = purple_protocol_get_user_splits(dialog->protocol),
-			 l2 = dialog->user_split_entries;
-			 l != NULL && l2 != NULL;
-			 l = l->next, l2 = l2->next)
-		{
-			PurpleAccountUserSplit *split = l->data;
-			GtkEntry *entry = l2->data;
-			char sep[2] = " ";
-
-			value = entry ? gtk_editable_get_text(GTK_EDITABLE(entry)) : "";
-			if (!value)
-				value = "";
-
-			*sep = purple_account_user_split_get_separator(split);
-
-			tmp = g_strconcat(username, sep,
-					(*value ? value :
-					 purple_account_user_split_get_default_value(split)),
-					NULL);
-
-			g_free(username);
-			username = tmp;
-		}
-	}
-
-	if (dialog->account == NULL)
-	{
-		account = purple_account_manager_find(manager, username,
-		                                      dialog->protocol_id);
-		if(PURPLE_IS_ACCOUNT(account)) {
-			purple_debug_warning("gtkaccount",
-			                     "Trying to add a duplicate %s account (%s).\n",
-			                     dialog->protocol_id, username);
-
-			purple_notify_error(NULL, NULL, _("Unable to save new account"),
-			                    _("An account already exists with the "
-			                      "specified criteria."),
-			                    NULL);
-
-			g_free(username);
-
-			return;
-		}
-
-		account = purple_account_new(username, dialog->protocol_id);
-		new_acct = TRUE;
-	}
-	else
-	{
-		account = dialog->account;
-
-		/* Protocol */
-		purple_account_set_protocol_id(account, dialog->protocol_id);
-	}
-
-	/* Alias */
-	value = gtk_editable_get_text(GTK_EDITABLE(dialog->alias_entry));
-
-	if (*value != '\0')
-		purple_account_set_private_alias(account, value);
-	else
-		purple_account_set_private_alias(account, NULL);
-
-	/* Buddy Icon */
-	if (dialog->protocol != NULL)
-		icon_spec = purple_protocol_get_icon_spec(dialog->protocol);
-
-	if (icon_spec && icon_spec->format != NULL)
-	{
-		const char *filename;
-
-		if (new_acct || purple_account_get_bool(account, "use-global-buddyicon", TRUE) ==
-			gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->icon_check)))
-		{
-			icon_change = TRUE;
-		}
-		purple_account_set_bool(account, "use-global-buddyicon", !gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->icon_check)));
-
-		if (gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->icon_check)))
-		{
-			if (dialog->icon_img)
-			{
-				size_t len = purple_image_get_data_size(dialog->icon_img);
-				purple_buddy_icons_set_account_icon(account,
-					g_memdup2(purple_image_get_data(dialog->icon_img), len), len);
-				purple_account_set_buddy_icon_path(account,
-					purple_image_get_path(dialog->icon_img));
-			}
-			else
-			{
-				purple_buddy_icons_set_account_icon(account, NULL, 0);
-				purple_account_set_buddy_icon_path(account, NULL);
-			}
-		}
-		else if ((filename = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon")) && icon_change)
-		{
-			size_t len = 0;
-			gpointer data = pidgin_convert_buddy_icon(dialog->protocol, filename, &len);
-			purple_account_set_buddy_icon_path(account, filename);
-			purple_buddy_icons_set_account_icon(account, data, len);
-		}
-	}
-
-	purple_buddy_icon_spec_free(icon_spec);
-
-	purple_account_set_username(account, username);
-	g_free(username);
-
-	/* Add the protocol settings */
-	if (dialog->protocol) {
-		ProtocolOptEntry *opt_entry;
-		GtkTreeIter iter;
-		char *value2;
-		int int_value;
-		gboolean bool_value;
-
-		for (l2 = dialog->protocol_opt_entries; l2; l2 = l2->next) {
-
-			opt_entry = l2->data;
-
-			switch (opt_entry->type) {
-				case PURPLE_PREF_STRING:
-					if (GTK_IS_COMBO_BOX(opt_entry->widget))
-						value = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(opt_entry->widget));
-					else
-						value = gtk_editable_get_text(GTK_EDITABLE(opt_entry->widget));
-					purple_account_set_string(account, opt_entry->setting, value);
-					break;
-
-				case PURPLE_PREF_INT:
-					int_value = atoi(gtk_editable_get_text(GTK_EDITABLE(opt_entry->widget)));
-					purple_account_set_int(account, opt_entry->setting, int_value);
-					break;
-
-				case PURPLE_PREF_BOOLEAN:
-					bool_value =
-						gtk_check_button_get_active(GTK_CHECK_BUTTON(opt_entry->widget));
-					purple_account_set_bool(account, opt_entry->setting, bool_value);
-					break;
-
-				case PURPLE_PREF_STRING_LIST:
-					value2 = NULL;
-					if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(opt_entry->widget), &iter))
-						gtk_tree_model_get(gtk_combo_box_get_model(GTK_COMBO_BOX(opt_entry->widget)), &iter, 1, &value2, -1);
-					purple_account_set_string(account, opt_entry->setting, value2);
-					break;
-
-				default:
-					break;
-			}
-		}
-	}
-
-	proxy_info = pidgin_proxy_options_get_info(PIDGIN_PROXY_OPTIONS(dialog->proxy_options));
-	purple_account_set_proxy_info(account, proxy_info);
-
-	/* Voice and Video settings */
-	if (dialog->voice_frame) {
-		purple_account_set_silence_suppression(account,
-				gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->suppression_check)));
-	}
-
-	/* If this is a new account, add it to our list */
-	if(new_acct) {
-		purple_account_manager_add(manager, account);
-	} else {
-		purple_signal_emit(pidgin_accounts_get_handle(), "account-modified", account);
-	}
-
-	/* If this is a new account, then sign on! */
-	if (gtk_check_button_get_active(GTK_CHECK_BUTTON(dialog->register_button))) {
-		purple_account_set_register_callback(account, account_register_cb, NULL);
-		purple_account_register(account);
-	} else if (new_acct) {
-		const PurpleSavedStatus *saved_status;
-
-		saved_status = purple_savedstatus_get_current();
-		if (saved_status != NULL) {
-			purple_savedstatus_activate_for_account(saved_status, account);
-			purple_account_set_enabled(account, TRUE);
-		}
-	}
-
-	/* We no longer need the data from the dialog window */
-	account_win_destroy_cb(dialog);
-}
-
-static void
-account_prefs_response_cb(GtkDialog *dialog, gint response_id, gpointer data) {
-	AccountPrefsDialog *window = (AccountPrefsDialog *)data;
-
-	switch(response_id) {
-		case RESPONSE_ADD:
-			account_prefs_save(window);
-			break;
-		case RESPONSE_CLOSE:
-		case GTK_RESPONSE_DELETE_EVENT:
-			account_win_destroy_cb(window);
-			break;
-		default:
-			break;
-	}
-}
-
-void
-pidgin_account_dialog_show(PidginAccountDialogType type,
-                           PurpleAccount *account)
-{
-	AccountPrefsDialog *dialog;
-	GtkWidget *win;
-	GtkWidget *main_vbox;
-	GtkWidget *vbox;
-	GtkWidget *notebook;
-	GtkWidget *button;
-
-	dialog = g_new0(AccountPrefsDialog, 1);
-
-	if(PURPLE_IS_ACCOUNT(account)) {
-		dialog->protocol_id = g_strdup(purple_account_get_protocol_id(account));
-	}
-
-	dialog->account = account;
-	dialog->type = type;
-	dialog->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
-
-	if(dialog->protocol_id != NULL) {
-		PurpleProtocolManager *manager = purple_protocol_manager_get_default();
-
-		dialog->protocol = purple_protocol_manager_find(manager,
-		                                                dialog->protocol_id);
-	}
-
-	dialog->window = win = pidgin_dialog_new((type == PIDGIN_ADD_ACCOUNT_DIALOG) ? _("Add Account") : _("Modify Account"),
-		6, "account", FALSE);
-
-	g_signal_connect(win, "response", G_CALLBACK(account_prefs_response_cb),
-	                 dialog);
-
-	/* Setup the vbox */
-	main_vbox = gtk_dialog_get_content_area(GTK_DIALOG(win));
-	gtk_box_set_spacing(GTK_BOX(main_vbox), 6);
-
-	dialog->notebook = notebook = gtk_notebook_new();
-	gtk_box_append(GTK_BOX(main_vbox), notebook);
-
-	/* Setup the inner vbox */
-	dialog->top_vbox = vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 12);
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), vbox,
-			gtk_label_new_with_mnemonic(_("_Basic")));
-
-	/* Setup the top frames. */
-	add_login_options(dialog, vbox);
-	add_user_options(dialog, vbox);
-
-	button = gtk_check_button_new_with_mnemonic(
-		_("Create _this new account on the server"));
-	gtk_box_append(GTK_BOX(main_vbox), button);
-	dialog->register_button = button;
-	g_signal_connect(G_OBJECT(dialog->register_button), "toggled", G_CALLBACK(register_button_cb), dialog);
-	if (dialog->account == NULL)
-		gtk_widget_set_sensitive(button, FALSE);
-
-	if (!dialog->protocol || !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, SERVER, register_user))
-		gtk_widget_hide(button);
-
-	/* Setup the page with 'Advanced' (protocol options). */
-	add_account_options(dialog);
-
-	/* Setup the proxy options page. */
-	dialog->proxy_options = pidgin_proxy_options_new();
-	if(PURPLE_IS_ACCOUNT(dialog->account)) {
-		pidgin_proxy_options_set_info(PIDGIN_PROXY_OPTIONS(dialog->proxy_options),
-		                              purple_account_get_proxy_info(dialog->account));
-	}
-	gtk_notebook_append_page(GTK_NOTEBOOK(notebook), dialog->proxy_options,
-	                         gtk_label_new_with_mnemonic(_("Proxy")));
-
-	add_voice_options(dialog);
-
-	/* Buttons */
-	gtk_dialog_add_button(GTK_DIALOG(win), _("_Cancel"), RESPONSE_CLOSE);
-	dialog->ok_button = gtk_dialog_add_button(GTK_DIALOG(win),
-	                                          (type == PIDGIN_ADD_ACCOUNT_DIALOG) ? _("_Add") : _("_Save"),
-	                                          RESPONSE_ADD);
-
-	if (dialog->account == NULL) {
-		gtk_widget_set_sensitive(dialog->ok_button, FALSE);
-	}
-
-	/* Show the window. */
-	gtk_widget_show(win);
-	if (!account)
-		gtk_widget_grab_focus(dialog->protocol_menu);
-}
-
-/**************************************************************************
- * Accounts Dialog
- **************************************************************************/
 /* This still exists because gtkprivacy calls it to add the privacy ui ops */
 static PurpleAccountUiOps ui_ops = {};
 
@@ -1282,13 +33,6 @@
 	return &ui_ops;
 }
 
-void *
-pidgin_accounts_get_handle(void) {
-	static int handle;
-
-	return &handle;
-}
-
 void
 pidgin_accounts_init(void)
 {
@@ -1298,16 +42,10 @@
 	purple_prefs_add_int(PIDGIN_PREFS_ROOT "/accounts/dialog/height", 321);
 
 	purple_prefs_add_path(PIDGIN_PREFS_ROOT "/accounts/buddyicon", NULL);
-
-	purple_signal_register(pidgin_accounts_get_handle(), "account-modified",
-						 purple_marshal_VOID__POINTER, G_TYPE_NONE, 1,
-						 PURPLE_TYPE_ACCOUNT);
 }
 
 void
 pidgin_accounts_uninit(void)
 {
-	purple_signals_disconnect_by_handle(pidgin_accounts_get_handle());
-	purple_signals_unregister_by_instance(pidgin_accounts_get_handle());
 }
 
--- a/pidgin/gtkaccount.h	Thu Sep 15 23:04:59 2022 -0500
+++ b/pidgin/gtkaccount.h	Thu Sep 15 23:33:56 2022 -0500
@@ -28,27 +28,9 @@
 
 #include <purple.h>
 
-typedef enum
-{
-	PIDGIN_ADD_ACCOUNT_DIALOG,
-	PIDGIN_MODIFY_ACCOUNT_DIALOG
-
-} PidginAccountDialogType;
-
-
 G_BEGIN_DECLS
 
 /**
- * pidgin_account_dialog_show:
- * @type:    The type of dialog.
- * @account: The associated account, or %NULL for an Add dialog.
- *
- * Shows an add/modify account dialog.
- */
-void pidgin_account_dialog_show(PidginAccountDialogType type,
-								  PurpleAccount *account);
-
-/**
  * pidgin_accounts_get_ui_ops:
  *
  * Returns the GTK account UI ops
@@ -58,15 +40,6 @@
 PurpleAccountUiOps *pidgin_accounts_get_ui_ops(void);
 
 /**
- * pidgin_accounts_get_handle:
- *
- * Returns the gtkaccounts handle
- *
- * Returns: The handle to the GTK account system
- */
-void *pidgin_accounts_get_handle(void);
-
-/**
  * pidgin_accounts_init:
  *
  * Initializes the GTK account system
--- a/pidgin/pidginaccountmanager.c	Thu Sep 15 23:04:59 2022 -0500
+++ b/pidgin/pidginaccountmanager.c	Thu Sep 15 23:33:56 2022 -0500
@@ -44,8 +44,6 @@
 	RESPONSE_ADD,
 	RESPONSE_MODIFY,
 	RESPONSE_REMOVE,
-	RESPONSE_ADD_OLD,
-	RESPONSE_MODIFY_OLD
 };
 
 enum {
@@ -219,9 +217,6 @@
 			editor = pidgin_account_editor_new(NULL);
 			gtk_widget_show(editor);
 			break;
-		case RESPONSE_ADD_OLD:
-			pidgin_account_dialog_show(PIDGIN_ADD_ACCOUNT_DIALOG, NULL);
-			break;
 		case RESPONSE_MODIFY:
 			account = pidgin_account_manager_get_selected_account(manager);
 
@@ -230,14 +225,6 @@
 
 			g_clear_object(&account);
 			break;
-		case RESPONSE_MODIFY_OLD:
-			account = pidgin_account_manager_get_selected_account(manager);
-
-			pidgin_account_dialog_show(PIDGIN_MODIFY_ACCOUNT_DIALOG, account);
-
-			g_clear_object(&account);
-
-			break;
 		case RESPONSE_REMOVE:
 			account = pidgin_account_manager_get_selected_account(manager);
 
@@ -280,13 +267,15 @@
 	GtkTreeIter iter;
 
 	if(gtk_tree_model_get_iter(GTK_TREE_MODEL(manager->model), &iter, path)) {
+		GtkWidget *editor = NULL;
 		PurpleAccount *account = NULL;
 
 		gtk_tree_model_get(GTK_TREE_MODEL(manager->model), &iter,
 		                   COLUMN_ACCOUNT, &account,
 		                   -1);
 
-		pidgin_account_dialog_show(PIDGIN_MODIFY_ACCOUNT_DIALOG, account);
+		editor = pidgin_account_editor_new(account);
+		gtk_widget_show(editor);
 
 		g_clear_object(&account);
 	}

mercurial