diff -r b271cf41c92d -r e3934b4c2950 pidgin/prefs/pidginprefs.c --- 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);