Clean up set_account_protocol_cb and change some accessors for PidginProtocolChooser

Fri, 14 Feb 2020 17:23:08 -0600

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 14 Feb 2020 17:23:08 -0600
changeset 40299
e2f8638bac5a
parent 40298
78c0e1809b3b
child 40300
659bd23c9258

Clean up set_account_protocol_cb and change some accessors for PidginProtocolChooser

pidgin/gtkaccount.c file | annotate | diff | comparison | revisions
pidgin/pidginprotocolchooser.c file | annotate | diff | comparison | revisions
pidgin/pidginprotocolchooser.h file | annotate | diff | comparison | revisions
--- 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
 

mercurial