--- a/pidgin/gtkaccount.c Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/gtkaccount.c Fri Feb 14 17:23:08 2020 -0600
@@ -225,44 +225,34 @@
-set_account_protocol_cb(GtkWidget *widget, AccountPrefsDialog *dialog)
+set_account_protocol_cb(GtkWidget *widget, AccountPrefsDialog *dialog) { PidginProtocolChooser *chooser = PIDGIN_PROTOCOL_CHOOSER(widget);
- PurpleProtocol *new_protocol;
- id = pidgin_protocol_chooser_get_selected(chooser);
- new_protocol = purple_protocols_find(id);
- dialog->protocol = new_protocol;
- if (dialog->protocol != NULL)
- PurpleProtocol *old_protocol = NULL;
- if (dialog->protocol_id)
- old_protocol = purple_protocols_find(dialog->protocol_id);
- if (old_protocol != new_protocol) {
- g_free(dialog->protocol_id);
- dialog->protocol_id = g_strdup(purple_protocol_get_id(dialog->protocol));
+ PurpleProtocol *protocol = pidgin_protocol_chooser_get_selected(chooser); + if(g_set_object(&dialog->protocol, protocol)) { + g_clear_pointer(&dialog->protocol_id, g_free);
- if (dialog->account != NULL)
+ g_object_unref(G_OBJECT(protocol)); + 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_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_toggle_button_set_active(GTK_TOGGLE_BUTTON(
- dialog->register_button), FALSE);
+ if (!dialog->protocol || + !PURPLE_PROTOCOL_IMPLEMENTS(dialog->protocol, SERVER, register_user)) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->register_button), FALSE); gtk_widget_hide(dialog->register_button);
if (purple_protocol_get_options(dialog->protocol) &
--- a/pidgin/pidginprotocolchooser.c Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/pidginprotocolchooser.c Fri Feb 14 17:23:08 2020 -0600
@@ -66,9 +66,24 @@
return GTK_WIDGET(g_object_new(PIDGIN_TYPE_PROTOCOL_CHOOSER, NULL));
+pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser) { + PurpleProtocol *protocol = NULL; + g_return_val_if_fail(PIDGIN_IS_PROTOCOL_CHOOSER(chooser), NULL); + if(gtk_combo_box_get_active_iter(GTK_COMBO_BOX(chooser), &iter)) { + gtk_tree_model_get(GTK_TREE_MODEL(chooser->model), &iter, + PIDGIN_PROTOCOL_STORE_COLUMN_PROTOCOL, &protocol, -pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser)
+pidgin_protocol_chooser_get_selected_name(PidginProtocolChooser *chooser) { @@ -84,8 +99,8 @@
-pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser,
+pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser, --- a/pidgin/pidginprotocolchooser.h Fri Feb 14 05:02:13 2020 -0600
+++ b/pidgin/pidginprotocolchooser.h Fri Feb 14 17:23:08 2020 -0600
@@ -33,6 +33,8 @@
#define PIDGIN_TYPE_PROTOCOL_CHOOSER (pidgin_protocol_chooser_get_type())
@@ -55,25 +57,38 @@
* pidgin_protocol_chooser_get_selected:
* @chooser: The #PidginProtocolChooser instance.
- * Gets the name of the currently selected protocol from @chooser.
+ * Gets the currently selected protocol from @chooser. - * Returns: (transfer full): Returns the name of the currently selected
+ * Returns: (transfer full): The selected #PurpleProtocol or %NULL if nothing -gchar *pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser);
+PurpleProtocol *pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser); - * pidgin_protocol_chooser_set_selected:
+ * pidgin_protocol_chooser_get_selected_name: * @chooser: The #PidginProtocolChooser instance.
- * @protocol: The name of the protocol to select.
+ * Gets the name of the currently selected protocol from @chooser. + * Returns: (transfer full): The selected #PurpleProtocol or %NULL if nothing +gchar *pidgin_protocol_chooser_get_selected_name(PidginProtocolChooser *chooser); + * pidgin_protocol_chooser_set_selected_name: + * @chooser: The #PidginProtocolChooser instance. + * @name: The name of the protocol to select. * Sets the currently selected protocol of @chooser to @protocol.
-void pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser, const gchar *protocol);
+void pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser, const gchar *name);