Fri, 14 Feb 2020 17:23:08 -0600
Clean up set_account_protocol_cb and change some accessors for PidginProtocolChooser
--- 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 @@ } static void -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; - gchar *id = NULL; - - id = pidgin_protocol_chooser_get_selected(chooser); - new_protocol = purple_protocols_find(id); - g_free(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); } else { 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)); } +PurpleProtocol * +pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser) { + GtkTreeIter iter; + 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, + -1); + } + + return protocol; +} + gchar * -pidgin_protocol_chooser_get_selected(PidginProtocolChooser *chooser) -{ +pidgin_protocol_chooser_get_selected_name(PidginProtocolChooser *chooser) { GtkTreeIter iter; gchar *name = NULL; @@ -84,8 +99,8 @@ } void -pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser, - const gchar *name) +pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser, + const gchar *name) { GtkTreeIter iter; gchar *iter_name = NULL;
--- 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 @@ #include <gtk/gtk.h> +#include <purple.h> + G_BEGIN_DECLS #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 - * protocol. + * Returns: (transfer full): The selected #PurpleProtocol or %NULL if nothing + * is selected * * Since: 3.0.0 */ -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 + * is selected + * + * Since: 3.0.0 + */ +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. * * Since: 3.0.0 */ -void pidgin_protocol_chooser_set_selected(PidginProtocolChooser *chooser, const gchar *protocol); +void pidgin_protocol_chooser_set_selected_name(PidginProtocolChooser *chooser, const gchar *name); G_END_DECLS