--- a/libpurple/purpleprotocolmanager.c Sat Feb 27 12:16:39 2021 -0600
+++ b/libpurple/purpleprotocolmanager.c Sat Feb 27 12:17:11 2021 -0600
@@ -206,6 +206,7 @@
g_return_val_if_fail(PURPLE_PROTOCOL_MANAGER(manager), NULL);
+ g_return_val_if_fail(id != NULL, NULL); priv = purple_protocol_manager_get_instance_private(manager);
--- a/pidgin/glade/pidgin3.xml.in Sat Feb 27 12:16:39 2021 -0600
+++ b/pidgin/glade/pidgin3.xml.in Sat Feb 27 12:17:11 2021 -0600
@@ -15,6 +15,8 @@
<glade-widget-class name="PidginMenuTray" generic-name="menu_tray" title="MenuTray"/>
<glade-widget-class name="PidginPluginsMenu" generic-name="plugins_menu" title="PluginsMenu"/>
<glade-widget-class name="PidginPresenceIcon" generic-name="presence_icon" title="PresenceIcon"/>
+ <glade-widget-class name="PidginProtocolChooser" generic-name="protocol_chooser" title="ProtocolChooser"/> + <glade-widget-class name="PidginProtocolStore" generic-name="protocol_store" title="ProtocolStore"/> <glade-widget-class name="PidginScrollBook" generic-name="scroll_book" title="ScrollBook"/>
<glade-widget-class name="PidginStatusBox" generic-name="status_box" title="StatusBox"/>
<glade-widget-class name="PidginWindow" generic-name="window" title="Window"/>
@@ -34,6 +36,8 @@
<glade-widget-class-ref name="PidginMenuTray"/>
<glade-widget-class-ref name="PidginPluginsMenu"/>
<glade-widget-class-ref name="PidginPresenceIcon"/>
+ <glade-widget-class-ref name="PidginProtocolChooser"/> + <glade-widget-class-ref name="PidginProtocolStore"/> <glade-widget-class-ref name="PidginScrollBook"/>
<glade-widget-class-ref name="PidginStatusBox"/>
<glade-widget-class-ref name="PidginWindow"/>
--- a/pidgin/gtkaccount.c Sat Feb 27 12:16:39 2021 -0600
+++ b/pidgin/gtkaccount.c Sat Feb 27 12:17:11 2021 -0600
@@ -1588,23 +1588,8 @@
dialog = g_new0(AccountPrefsDialog, 1);
- /* Select the first protocol in the list*/
- GList *protocol_list = purple_protocols_get_all();
- if (protocol_list != NULL) {
- dialog->protocol_id = g_strdup(purple_protocol_get_id(PURPLE_PROTOCOL(protocol_list->data)));
- g_list_free(protocol_list);
- g_strdup(purple_account_get_protocol_id(account));
- /* TODO if no protocols are loaded, this should inform the user that
- protocols need to be loaded instead of just doing nothing */
- if (!dialog->protocol_id) {
+ if(PURPLE_IS_ACCOUNT(account)) { + dialog->protocol_id = g_strdup(purple_account_get_protocol_id(account)); if (accounts_window != NULL && account != NULL)
@@ -1616,7 +1601,13 @@
dialog->password = g_strdup(password);
dialog->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
- dialog->protocol = purple_protocols_find(dialog->protocol_id);
+ if(dialog->protocol_id != NULL) { + PurpleProtocolManager *manager = purple_protocol_manager_get_default(); + dialog->protocol = purple_protocol_manager_find(manager, dialog->window = win = pidgin_dialog_new((type == PIDGIN_ADD_ACCOUNT_DIALOG) ? _("Add Account") : _("Modify Account"),
--- a/pidgin/pidginprotocolchooser.c Sat Feb 27 12:16:39 2021 -0600
+++ b/pidgin/pidginprotocolchooser.c Sat Feb 27 12:17:11 2021 -0600
@@ -32,10 +32,27 @@
struct _PidginProtocolChooser {
/******************************************************************************
+ *****************************************************************************/ +pidgin_protocol_chooser_model_changed_cb(GObject *obj, GParamSpec *pspec, + GtkComboBox *combo = GTK_COMBO_BOX(obj); + GtkTreeModel *model = gtk_combo_box_get_model(combo); + /* When the model for the combobox changes, select the first item. */ + if(gtk_tree_model_get_iter_first(model, &iter)) { + gtk_combo_box_set_active_iter(combo, &iter); +/****************************************************************************** *****************************************************************************/
G_DEFINE_TYPE(PidginProtocolChooser, pidgin_protocol_chooser,
@@ -55,7 +72,15 @@
pidgin_protocol_chooser_init(PidginProtocolChooser *chooser) {
+ g_signal_connect_object(G_OBJECT(chooser), "notify::model", + G_CALLBACK(pidgin_protocol_chooser_model_changed_cb), + chooser, G_CONNECT_AFTER); gtk_widget_init_template(GTK_WIDGET(chooser));
+ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(chooser->model), + PIDGIN_PROTOCOL_STORE_COLUMN_NAME, /******************************************************************************
--- a/pidgin/resources/Protocols/chooser.ui Sat Feb 27 12:16:39 2021 -0600
+++ b/pidgin/resources/Protocols/chooser.ui Sat Feb 27 12:17:11 2021 -0600
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.22.1
+<!-- Generated with glade 3.38.2 Pidgin - Internet Messenger
Copyright (C) Pidgin Developers <devel@pidgin.im>
@@ -21,13 +21,18 @@
<interface domain="pidgin">
<requires lib="gtk+" version="3.20"/>
+ <requires lib="pidgin" version="3.0"/> <!-- interface-license-type gplv2 -->
<!-- interface-name Pidgin -->
<!-- interface-description Internet Messenger -->
<!-- interface-copyright Pidgin Developers <devel@pidgin.im> -->
+ <object class="PidginProtocolStore" id="raw_model"/> + <object class="GtkTreeModelSort" id="model"> + <property name="model">raw_model</property> <template class="PidginProtocolChooser" parent="GtkComboBox">
<property name="visible">True</property>
- <property name="can_focus">False</property>
+ <property name="can-focus">False</property> <property name="model">model</property>
<object class="GtkCellRendererPixbuf" id="icon"/>
@@ -42,5 +47,4 @@
- <object class="PidginProtocolStore" id="model"/>