# HG changeset patch
# Node ID 85f750fb6c5a
# Parent  31e8c7c92e2f
diff --git a/pidgin/meson.build b/pidgin/meson.build
--- a/pidgin/meson.build
+++ b/pidgin/meson.build
@@ -23,7 +23,6 @@
 	'pidginaccountrow.c',
 	'pidginaccountsdisabledmenu.c',
 	'pidginaccountsenabledmenu.c',
-	'pidginaddbuddydialog.c',
 	'pidginapplication.c',
 	'pidginautoadjustment.c',
 	'pidginavatar.c',
@@ -81,7 +80,6 @@
 	'pidginaccountrow.h',
 	'pidginaccountsdisabledmenu.h',
 	'pidginaccountsenabledmenu.h',
-	'pidginaddbuddydialog.h',
 	'pidginapplication.h',
 	'pidginautoadjustment.h',
 	'pidginavatar.h',
diff --git a/pidgin/pidginaddbuddydialog.h b/pidgin/pidginaddbuddydialog.h
deleted file mode 100644
--- a/pidgin/pidginaddbuddydialog.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Pidgin - Internet Messenger
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#if !defined(PIDGIN_GLOBAL_HEADER_INSIDE) && !defined(PIDGIN_COMPILATION)
-# error "only <pidgin.h> may be included directly"
-#endif
-
-#ifndef PIDGIN_ADD_BUDDY_DIALOG_H
-#define PIDGIN_ADD_BUDDY_DIALOG_H
-
-#include <gtk/gtk.h>
-
-#include <purple.h>
-
-#include "pidginversion.h"
-
-G_BEGIN_DECLS
-
-/**
- * PidginAddBuddyDialog:
- *
- * A dialog for adding buddies to your contact list.
- *
- * Since: 3.0.0
- */
-
-#define PIDGIN_TYPE_ADD_BUDDY_DIALOG (pidgin_add_buddy_dialog_get_type())
-
-PIDGIN_AVAILABLE_IN_3_0
-G_DECLARE_FINAL_TYPE(PidginAddBuddyDialog, pidgin_add_buddy_dialog, PIDGIN,
-                     ADD_BUDDY_DIALOG, GtkDialog)
-
-/**
- * pidgin_add_buddy_dialog_new:
- * @account: (nullable): The [class@Purple.Account] to pre-select.
- * @username: (nullable): The username to pre-fill.
- * @alias: (nullable): The alias to pre-fill.
- * @message: (nullable): The invite message to pre-fill.
- * @group: (nullable): The group anem to pre-fill.
- *
- * Creates a add buddy dialog with the pre-filled optional values.
- *
- * Returns: (transfer full): The widget.
- *
- * Since: 3.0.0
- */
-PIDGIN_AVAILABLE_IN_3_0
-GtkWidget *pidgin_add_buddy_dialog_new(PurpleAccount *account, const gchar *username, const gchar *alias, const gchar *message, const gchar *group);
-
-G_END_DECLS
-
-#endif /* PIDGIN_ADD_BUDDY_DIALOG_H */
diff --git a/pidgin/pidginaddbuddydialog.c b/pidgin/pidginaddbuddydialog.c
deleted file mode 100644
--- a/pidgin/pidginaddbuddydialog.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * Pidgin - Internet Messenger
- * Copyright (C) Pidgin Developers <devel@pidgin.im>
- *
- * Pidgin is the legal property of its developers, whose names are too numerous
- * to list here.  Please refer to the COPYRIGHT file distributed with this
- * source distribution.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <https://www.gnu.org/licenses/>.
- */
-
-#include <glib/gi18n.h>
-
-#include "pidginaddbuddydialog.h"
-
-#include "pidginaccountrow.h"
-#include "pidgincore.h"
-
-struct _PidginAddBuddyDialog {
-	GtkDialog parent;
-
-	GtkCustomFilter *filter;
-
-	GtkWidget *account;
-	GtkWidget *username;
-	GtkWidget *alias;
-	GtkWidget *message;
-	GtkWidget *group;
-};
-
-G_DEFINE_TYPE(PidginAddBuddyDialog, pidgin_add_buddy_dialog, GTK_TYPE_DIALOG)
-
-/******************************************************************************
- * Helpers
- *****************************************************************************/
-static gboolean
-pidgin_add_buddy_dialog_filter_accounts(gpointer item,
-                                        G_GNUC_UNUSED gpointer data)
-{
-	gboolean ret = FALSE;
-
-	if(PURPLE_IS_ACCOUNT(item)) {
-		PurpleAccount *account = PURPLE_ACCOUNT(item);
-		PurpleProtocol *protocol = purple_account_get_protocol(account);
-
-		if(PURPLE_IS_PROTOCOL(protocol)) {
-			ret = PURPLE_PROTOCOL_IMPLEMENTS(protocol, SERVER, add_buddy);
-		}
-	}
-
-	return ret;
-}
-
-static void
-pidgin_add_buddy_dialog_validate(PidginAddBuddyDialog *dialog) {
-	PurpleAccount *account = NULL;
-	gboolean valid = FALSE;
-
-	account = pidgin_account_row_get_account(PIDGIN_ACCOUNT_ROW(dialog->account));
-	if(PURPLE_IS_ACCOUNT(account)) {
-		PurpleProtocol *protocol = NULL;
-
-		protocol = purple_account_get_protocol(account);
-		if(PURPLE_IS_PROTOCOL(protocol)) {
-			const gchar *username = gtk_editable_get_text(GTK_EDITABLE(dialog->username));
-
-			valid = purple_validate(protocol, username);
-		}
-	}
-
-	gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
-	                                  valid);
-}
-
-/******************************************************************************
- * Callbacks
- *****************************************************************************/
-static void
-pidgin_add_buddy_dialog_response_cb(GtkDialog *dialog, gint response_id,
-                                    G_GNUC_UNUSED gpointer data)
-{
-	PidginAddBuddyDialog *abdialog = PIDGIN_ADD_BUDDY_DIALOG(dialog);
-
-	if(response_id == GTK_RESPONSE_OK) {
-		PurpleAccount *account = NULL;
-		PurpleBuddy *buddy = NULL;
-		PurpleGroup *group = NULL;
-		const gchar *username = NULL, *alias = NULL, *message = NULL;
-		gchar *groupname = NULL;
-
-		/* Grab all of the values that the user entered. */
-		account = pidgin_account_row_get_account(PIDGIN_ACCOUNT_ROW(abdialog->account));
-		username = gtk_editable_get_text(GTK_EDITABLE(abdialog->username));
-		alias = gtk_editable_get_text(GTK_EDITABLE(abdialog->alias));
-		message = gtk_editable_get_text(GTK_EDITABLE(abdialog->message));
-		groupname = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(abdialog->group));
-
-		/* Make anything that is an empty string NULL. */
-		if(alias != NULL && *alias == '\0') {
-			alias = NULL;
-		}
-
-		if(message != NULL && *message == '\0') {
-			message = NULL;
-		}
-
-		if(groupname != NULL && *groupname == '\0') {
-			g_clear_pointer(&groupname, g_free);
-		}
-
-		/* Find the PurpleGroup that the user requested. */
-		if(groupname != NULL) {
-			group = purple_blist_find_group(groupname);
-
-			if(group == NULL) {
-				/* Create the group if it's new. */
-				group = purple_group_new(groupname);
-				purple_blist_add_group(group, NULL);
-			} else {
-				/* Otherwise see if we already have a buddy in the existing
-				 * group.
-				 */
-				buddy = purple_blist_find_buddy_in_group(account, username,
-				                                         group);
-			}
-		} else {
-			/* If a group name was not provided, look if the buddy exists, and
-			 * use its group.
-			 */
-			buddy = purple_blist_find_buddy(account, username);
-			if(PURPLE_IS_BUDDY(buddy)) {
-				group = purple_buddy_get_group(buddy);
-			}
-		}
-
-		/* If we don't a buddy yet, create it now. */
-		if(!PURPLE_IS_BUDDY(buddy)) {
-			buddy = purple_buddy_new(account, username, alias);
-			purple_blist_add_buddy(buddy, NULL, group, NULL);
-		}
-
-		/* Add the buddy to the account. */
-		purple_account_add_buddy(account, buddy, message);
-
-#if 0
-		/* This is disabled for now because gtk_blist_auto_personize is static
-		 * and we're going to be changing the data structure of the contact list
-		 * in the near future, so this probably completely change.
-		 */
-
-		/* Offer to merge people with the same alias. */
-		if(alias != NULL && PURPLE_IS_GROUP(group)) {
-			gtk_blist_auto_personize(PURPLE_BLIST_NODE(group), alias);
-		}
-#endif
-
-		g_free(groupname);
-	}
-
-	gtk_window_destroy(GTK_WINDOW(abdialog));
-}
-
-static void
-pidgin_add_buddy_dialog_account_changed_cb(GObject *obj,
-                                           G_GNUC_UNUSED GParamSpec *pspec,
-                                           gpointer data)
-{
-	PidginAddBuddyDialog *dialog = data;
-	PurpleAccount *account = NULL;
-	gboolean message_sensitive = TRUE;
-
-	account = pidgin_account_row_get_account(PIDGIN_ACCOUNT_ROW(obj));
-
-	if(PURPLE_IS_ACCOUNT(account)) {
-		PurpleProtocol *protocol = purple_account_get_protocol(account);
-
-		if(PURPLE_IS_PROTOCOL(protocol)) {
-			PurpleProtocolOptions opts = purple_protocol_get_options(protocol);
-
-			message_sensitive = (opts & OPT_PROTO_INVITE_MESSAGE);
-		}
-	}
-
-	gtk_widget_set_sensitive(dialog->message, message_sensitive);
-
-	pidgin_add_buddy_dialog_validate(dialog);
-}
-
-static void
-pidgin_add_buddy_dialog_username_changed_cb(G_GNUC_UNUSED GtkEditable *editable,
-                                            gpointer data)
-{
-	pidgin_add_buddy_dialog_validate(data);
-}
-
-static void
-pidgin_add_buddy_dialog_group_cb(PurpleBlistNode *node, gpointer data) {
-	PidginAddBuddyDialog *dialog = data;
-	PurpleGroup *group = PURPLE_GROUP(node);
-
-	gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(dialog->group),
-	                               purple_group_get_name(group));
-}
-
-/******************************************************************************
- * GObject Implementation
- *****************************************************************************/
-static void
-pidgin_add_buddy_dialog_init(PidginAddBuddyDialog *dialog) {
-	gtk_widget_init_template(GTK_WIDGET(dialog));
-
-	gtk_dialog_set_default_response(GTK_DIALOG(dialog), GTK_RESPONSE_OK);
-
-	gtk_custom_filter_set_filter_func(dialog->filter,
-	                                  pidgin_add_buddy_dialog_filter_accounts,
-	                                  NULL, NULL);
-
-	purple_blist_walk(pidgin_add_buddy_dialog_group_cb, NULL, NULL, NULL,
-	                  dialog);
-}
-
-static void
-pidgin_add_buddy_dialog_class_init(PidginAddBuddyDialogClass *klass) {
-	GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
-
-	gtk_widget_class_set_template_from_resource(
-		widget_class,
-		"/im/pidgin/Pidgin3/Dialogs/addbuddy.ui"
-	);
-
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     filter);
-
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     account);
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     username);
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     alias);
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     message);
-	gtk_widget_class_bind_template_child(widget_class, PidginAddBuddyDialog,
-	                                     group);
-
-	gtk_widget_class_bind_template_callback(widget_class,
-	                                        pidgin_add_buddy_dialog_response_cb);
-	gtk_widget_class_bind_template_callback(widget_class,
-	                                        pidgin_add_buddy_dialog_account_changed_cb);
-	gtk_widget_class_bind_template_callback(widget_class,
-	                                        pidgin_add_buddy_dialog_username_changed_cb);
-}
-
-/******************************************************************************
- * Public API
- *****************************************************************************/
-GtkWidget *
-pidgin_add_buddy_dialog_new(PurpleAccount *account, const gchar *username,
-                            const gchar *alias, const gchar *message,
-                            const gchar *group)
-{
-	GtkWidget *dialog = g_object_new(PIDGIN_TYPE_ADD_BUDDY_DIALOG, NULL);
-	PidginAddBuddyDialog *abdialog = PIDGIN_ADD_BUDDY_DIALOG(dialog);
-
-	if(PURPLE_IS_ACCOUNT(account)) {
-		pidgin_account_row_set_account(PIDGIN_ACCOUNT_ROW(abdialog->account),
-		                               account);
-	}
-
-	if(username != NULL) {
-		gtk_editable_set_text(GTK_EDITABLE(abdialog->username), username);
-	}
-
-	if(alias != NULL) {
-		gtk_editable_set_text(GTK_EDITABLE(abdialog->alias), alias);
-	}
-
-	if(message != NULL) {
-		gtk_editable_set_text(GTK_EDITABLE(abdialog->message), message);
-	}
-
-	if(group != NULL) {
-		GtkWidget *entry = NULL;
-
-		entry = gtk_combo_box_get_child(GTK_COMBO_BOX(abdialog->group));
-		gtk_editable_set_text(GTK_EDITABLE(entry), group);
-	}
-
-	return dialog;
-}
diff --git a/pidgin/resources/Dialogs/addbuddy.ui b/pidgin/resources/Dialogs/addbuddy.ui
deleted file mode 100644
--- a/pidgin/resources/Dialogs/addbuddy.ui
+++ /dev/null
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 
-
-Pidgin - Internet Messenger
-Copyright (C) Pidgin Developers <devel@pidgin.im>
-
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, see <https://www.gnu.org/licenses/>.
-
--->
-<interface>
-  <requires lib="gtk" version="4.0"/>
-  <requires lib="pidgin" version="3.0"/>
-  <!-- interface-license-type gplv2 -->
-  <!-- interface-name Pidgin -->
-  <!-- interface-description Internet Messenger -->
-  <!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
-  <template class="PidginAddBuddyDialog" parent="GtkDialog">
-    <property name="title" translatable="1">Add Buddy</property>
-    <property name="resizable">0</property>
-    <signal name="response" handler="pidgin_add_buddy_dialog_response_cb" swapped="no"/>
-    <child internal-child="content_area">
-      <object class="GtkBox">
-        <property name="margin-bottom">24</property>
-        <property name="margin-end">24</property>
-        <property name="margin-start">24</property>
-        <property name="margin-top">24</property>
-        <property name="orientation">vertical</property>
-        <property name="spacing">24</property>
-        <child>
-          <object class="GtkLabel">
-            <property name="css-classes">title-1</property>
-            <property name="label" translatable="1">Add a buddy</property>
-          </object>
-        </child>
-        <child>
-          <object class="AdwPreferencesGroup">
-            <property name="title" translatable="1">Buddy information</property>
-            <child>
-              <object class="PidginAccountRow" id="account">
-                <property name="hexpand">1</property>
-                <property name="filter">
-                  <object class="GtkEveryFilter">
-                    <child>
-                      <object class="GtkCustomFilter" id="filter"/>
-                    </child>
-                    <child>
-                      <object class="PidginAccountFilterConnected"/>
-                    </child>
-                  </object>
-                </property>
-                <signal name="notify::account" handler="pidgin_add_buddy_dialog_account_changed_cb" swapped="no"/>
-              </object>
-            </child>
-            <child>
-              <object class="AdwEntryRow" id="username">
-                <property name="title" translatable="1">Buddy&apos;s _username</property>
-                <property name="use-underline">1</property>
-                <property name="activates-default">1</property>
-                <signal name="changed" handler="pidgin_add_buddy_dialog_username_changed_cb" object="PidginAddBuddyDialog" swapped="no"/>
-              </object>
-            </child>
-            <child>
-              <object class="AdwEntryRow" id="alias">
-                <property name="title" translatable="1">(Optional) A_lias</property>
-                <property name="use-underline">1</property>
-              </object>
-            </child>
-            <child>
-              <object class="AdwEntryRow" id="message">
-                <property name="title" translatable="1">(Optional) _Invite message</property>
-                <property name="use-underline">1</property>
-                <property name="sensitive">0</property>
-              </object>
-            </child>
-            <child>
-              <object class="AdwActionRow">
-                <property name="activatable-widget">group</property>
-                <property name="focusable">0</property>
-                <property name="title" translatable="1">Add buddy to _group</property>
-                <property name="use-underline">1</property>
-                <child>
-                  <object class="GtkComboBoxText" id="group">
-                    <property name="hexpand">1</property>
-                    <property name="has-entry">1</property>
-                    <property name="valign">center</property>
-                  </object>
-                </child>
-              </object>
-            </child>
-          </object>
-        </child>
-      </object>
-    </child>
-    <action-widgets>
-      <action-widget response="cancel">button1</action-widget>
-      <action-widget response="ok">button2</action-widget>
-    </action-widgets>
-    <child type="action">
-      <object class="GtkButton" id="button1">
-        <property name="label" translatable="1">_Cancel</property>
-        <property name="focusable">1</property>
-        <property name="receives-default">1</property>
-        <property name="use-underline">1</property>
-      </object>
-    </child>
-    <child type="action">
-      <object class="GtkButton" id="button2">
-        <property name="css-classes">suggested-action</property>
-        <property name="focusable">1</property>
-        <property name="label" translatable="1">_Add</property>
-        <property name="receives-default">1</property>
-        <property name="sensitive">0</property>
-        <property name="use-underline">1</property>
-      </object>
-    </child>
-  </template>
-</interface>
diff --git a/pidgin/resources/pidgin.gresource.xml b/pidgin/resources/pidgin.gresource.xml
--- a/pidgin/resources/pidgin.gresource.xml
+++ b/pidgin/resources/pidgin.gresource.xml
@@ -14,7 +14,6 @@
     <file compressed="true" preprocess="xml-stripblanks">Conversations/message.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">ContactList/widget.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">Debug/debug.ui</file>
-    <file compressed="true" preprocess="xml-stripblanks">Dialogs/addbuddy.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">Display/window.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">Keypad/keypad.ui</file>
     <file compressed="true" preprocess="xml-stripblanks">Media/window.ui</file>
diff --git a/po/POTFILES.in b/po/POTFILES.in
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -251,7 +251,6 @@
 pidgin/pidginaccountrow.c
 pidgin/pidginaccountsdisabledmenu.c
 pidgin/pidginaccountsenabledmenu.c
-pidgin/pidginaddbuddydialog.c
 pidgin/pidginapplication.c
 pidgin/pidginavatar.c
 pidgin/pidgin.c
@@ -294,7 +293,6 @@
 pidgin/resources/avatar.ui
 pidgin/resources/Conversations/invite_dialog.ui
 pidgin/resources/Debug/debug.ui
-pidgin/resources/Dialogs/addbuddy.ui
 pidgin/resources/Display/window.ui
 pidgin/resources/Keypad/keypad.ui
 pidgin/resources/Media/window.ui
