Update Pidgin for the Purple.CredentialManager deprecations

Sun, 03 Nov 2024 00:14:14 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Sun, 03 Nov 2024 00:14:14 -0500
changeset 43049
a39744d00ece
parent 43048
45a4e977eff7
child 43050
04e9feb2d806

Update Pidgin for the Purple.CredentialManager deprecations

Testing Done:
Opened the credential preferences and verified there were no warnings and that the providers were sorted properly.

Reviewed at https://reviews.imfreedom.org/r/3641/

pidgin/prefs/pidgincredentialprefs.c file | annotate | diff | comparison | revisions
--- a/pidgin/prefs/pidgincredentialprefs.c	Sun Nov 03 00:12:56 2024 -0500
+++ b/pidgin/prefs/pidgincredentialprefs.c	Sun Nov 03 00:14:14 2024 -0500
@@ -40,36 +40,28 @@
 /******************************************************************************
  * Helpers
  *****************************************************************************/
-static void
-pidgin_credential_prefs_create_row(PurpleCredentialProvider *provider,
-                                   gpointer data)
+static GtkWidget *
+pidgin_credential_prefs_create_row(GObject *item,
+                                   G_GNUC_UNUSED gpointer data)
 {
-	GtkListBox *box = GTK_LIST_BOX(data);
-	GtkWidget *row = NULL;
-
-	row = pidgin_credential_provider_row_new(provider);
-	gtk_list_box_prepend(box, row);
+	return pidgin_credential_provider_row_new(PURPLE_CREDENTIAL_PROVIDER(item));
 }
 
-static gint
-pidgin_credential_prefs_sort_rows(GtkListBoxRow *row1, GtkListBoxRow *row2,
+static int
+pidgin_credential_prefs_sort_rows(gconstpointer a, gconstpointer b,
                                   G_GNUC_UNUSED gpointer user_data)
 {
-	PidginCredentialProviderRow *pcprow = NULL;
-	PurpleCredentialProvider *provider = NULL;
-	const gchar *id1 = NULL;
+	PurpleCredentialProvider *provider_a = (gpointer)a;
+	PurpleCredentialProvider *provider_b = (gpointer)b;
+	const char *id1 = NULL;
 	gboolean is_noop1 = FALSE;
-	const gchar *id2 = NULL;
+	const char *id2 = NULL;
 	gboolean is_noop2 = FALSE;
 
-	pcprow = PIDGIN_CREDENTIAL_PROVIDER_ROW(row1);
-	provider = pidgin_credential_provider_row_get_provider(pcprow);
-	id1 = purple_credential_provider_get_id(provider);
+	id1 = purple_credential_provider_get_id(provider_a);
 	is_noop1 = purple_strequal(id1, "noop-provider");
 
-	pcprow = PIDGIN_CREDENTIAL_PROVIDER_ROW(row2);
-	provider = pidgin_credential_provider_row_get_provider(pcprow);
-	id2 = purple_credential_provider_get_id(provider);
+	id2 = purple_credential_provider_get_id(provider_b);
 	is_noop2 = purple_strequal(id2, "noop-provider");
 
 	/* Sort None provider after everything else. */
@@ -80,6 +72,7 @@
 	} else if (!is_noop1 && is_noop2) {
 		return -1;
 	}
+
 	/* Sort normally by ID. */
 	return g_strcmp0(id1, id2);
 }
@@ -91,7 +84,7 @@
 {
 	PurpleCredentialManager *manager = NULL;
 	PurpleCredentialProvider *provider = NULL;
-	const gchar *id = NULL;
+	const char *id = NULL;
 	GError *error = NULL;
 
 	provider = pidgin_credential_provider_row_get_provider(
@@ -148,17 +141,23 @@
 pidgin_credential_prefs_init(PidginCredentialPrefs *prefs) {
 	PurpleCredentialManager *manager = NULL;
 	PurpleCredentialProvider *active = NULL;
+	GtkCustomSorter *sorter = NULL;
+	GtkSortListModel *sorted = NULL;
+	GListModel *model = NULL;
 
 	gtk_widget_init_template(GTK_WIDGET(prefs));
 
+	sorter = gtk_custom_sorter_new(pidgin_credential_prefs_sort_rows, NULL,
+	                               NULL);
+
+	model = purple_credential_manager_get_default_as_model();
+	sorted = gtk_sort_list_model_new(model, GTK_SORTER(sorter));
+	gtk_list_box_bind_model(GTK_LIST_BOX(prefs->credential_list),
+	                        G_LIST_MODEL(sorted),
+	                        (GtkListBoxCreateWidgetFunc)pidgin_credential_prefs_create_row,
+	                        prefs->credential_list, NULL);
+
 	manager = purple_credential_manager_get_default();
-	purple_credential_manager_foreach(
-	    manager,
-	    pidgin_credential_prefs_create_row,
-	    prefs->credential_list);
-	gtk_list_box_set_sort_func(GTK_LIST_BOX(prefs->credential_list),
-	                           pidgin_credential_prefs_sort_rows, NULL, NULL);
-
 	g_signal_connect_object(manager, "active-changed",
 	                        G_CALLBACK(pidgin_credential_prefs_active_provider_changed_cb),
 	                        prefs, 0);

mercurial