Sun, 03 Nov 2024 00:14:14 -0500
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);