Inline pidgin_prefs_dropdown_from_list_cb

Tue, 17 May 2022 01:58:51 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Tue, 17 May 2022 01:58:51 -0500
changeset 41380
e3934b4c2950
parent 41379
b271cf41c92d
child 41381
acedeb1e8804

Inline pidgin_prefs_dropdown_from_list_cb

It's only used in one place and necessitates extra roundabout variables and
such.

pidgin/prefs/pidginprefs.c file | annotate | diff | comparison | revisions
--- a/pidgin/prefs/pidginprefs.c	Tue May 17 01:53:55 2022 -0500
+++ b/pidgin/prefs/pidginprefs.c	Tue May 17 01:58:51 2022 -0500
@@ -213,48 +213,47 @@
 	} value;
 } PidginPrefValue;
 
-typedef void (*PidginPrefsDropdownCallback)(GtkComboBox *combo_box,
-	PidginPrefValue value);
-
 static void
-dropdown_set(GtkComboBox *combo_box, gpointer _cb)
+dropdown_set(GtkComboBox *combo_box, G_GNUC_UNUSED gpointer data)
 {
-	PidginPrefsDropdownCallback cb = _cb;
 	GtkTreeIter iter;
 	GtkTreeModel *tree_model;
-	PidginPrefValue active;
+	PurplePrefType type;
+	const char *key;
 
 	tree_model = gtk_combo_box_get_model(combo_box);
-	if (!gtk_combo_box_get_active_iter(combo_box, &iter))
+	if (!gtk_combo_box_get_active_iter(combo_box, &iter)) {
 		return;
-	active.type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(combo_box),
-		"type"));
+	}
 
 	g_object_set_data(G_OBJECT(combo_box), "previously_active",
 		g_object_get_data(G_OBJECT(combo_box), "current_active"));
 	g_object_set_data(G_OBJECT(combo_box), "current_active",
 		GINT_TO_POINTER(gtk_combo_box_get_active(combo_box)));
 
-	if (active.type == PURPLE_PREF_INT) {
-		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE,
-			&active.value.integer, -1);
+	type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(combo_box), "type"));
+	key = g_object_get_data(G_OBJECT(combo_box), "key");
+	if (type == PURPLE_PREF_INT) {
+		gint value;
+		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE, &value, -1);
+		purple_prefs_set_int(key, value);
+	} else if (type == PURPLE_PREF_STRING) {
+		const char *value;
+		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE, &value, -1);
+		purple_prefs_set_string(key, value);
+	} else if (type == PURPLE_PREF_BOOLEAN) {
+		gboolean value;
+		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE, &value, -1);
+		purple_prefs_set_bool(key, value);
+	} else {
+		g_return_if_reached();
 	}
-	else if (active.type == PURPLE_PREF_STRING) {
-		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE,
-			&active.value.string, -1);
-	}
-	else if (active.type == PURPLE_PREF_BOOLEAN) {
-		gtk_tree_model_get(tree_model, &iter, PREF_DROPDOWN_VALUE,
-			&active.value.boolean, -1);
-	}
-
-	cb(combo_box, active);
 }
 
 static GtkWidget *
 pidgin_prefs_dropdown_from_list_with_cb(GtkWidget *box, const gchar *title,
 	GtkComboBox **dropdown_out, GList *menuitems,
-	PidginPrefValue initial, PidginPrefsDropdownCallback cb)
+	PidginPrefValue initial)
 {
 	GtkWidget *dropdown;
 	GtkWidget *label = NULL;
@@ -339,33 +338,13 @@
 	g_object_set_data(G_OBJECT(dropdown), "current_active", current_active);
 	g_object_set_data(G_OBJECT(dropdown), "previously_active", current_active);
 
-	g_signal_connect(G_OBJECT(dropdown), "changed",
-		G_CALLBACK(dropdown_set), cb);
+	g_signal_connect(dropdown, "changed", G_CALLBACK(dropdown_set), NULL);
 
 	pidgin_add_widget_to_vbox(GTK_BOX(box), title, NULL, dropdown, FALSE, &label);
 
 	return label;
 }
 
-static void
-pidgin_prefs_dropdown_from_list_cb(GtkComboBox *combo_box,
-	PidginPrefValue value)
-{
-	const char *key;
-
-	key = g_object_get_data(G_OBJECT(combo_box), "key");
-
-	if (value.type == PURPLE_PREF_INT) {
-		purple_prefs_set_int(key, value.value.integer);
-	} else if (value.type == PURPLE_PREF_STRING) {
-		purple_prefs_set_string(key, value.value.string);
-	} else if (value.type == PURPLE_PREF_BOOLEAN) {
-		purple_prefs_set_bool(key, value.value.boolean);
-	} else {
-		g_return_if_reached();
-	}
-}
-
 GtkWidget *
 pidgin_prefs_dropdown_from_list(GtkWidget *box, const gchar *title,
 		PurplePrefType type, const char *key, GList *menuitems)
@@ -386,7 +365,7 @@
 	}
 
 	label = pidgin_prefs_dropdown_from_list_with_cb(box, title, &dropdown,
-		menuitems, initial, pidgin_prefs_dropdown_from_list_cb);
+	                                                menuitems, initial);
 
 	g_object_set_data(G_OBJECT(dropdown), "key", (gpointer)key);
 

mercurial