pidgin/prefs/pidgincredentialprefs.c

changeset 43049
a39744d00ece
parent 42592
6b65c0e4ba15
equal deleted inserted replaced
43048:45a4e977eff7 43049:a39744d00ece
38 ADW_TYPE_PREFERENCES_PAGE) 38 ADW_TYPE_PREFERENCES_PAGE)
39 39
40 /****************************************************************************** 40 /******************************************************************************
41 * Helpers 41 * Helpers
42 *****************************************************************************/ 42 *****************************************************************************/
43 static void 43 static GtkWidget *
44 pidgin_credential_prefs_create_row(PurpleCredentialProvider *provider, 44 pidgin_credential_prefs_create_row(GObject *item,
45 gpointer data) 45 G_GNUC_UNUSED gpointer data)
46 { 46 {
47 GtkListBox *box = GTK_LIST_BOX(data); 47 return pidgin_credential_provider_row_new(PURPLE_CREDENTIAL_PROVIDER(item));
48 GtkWidget *row = NULL;
49
50 row = pidgin_credential_provider_row_new(provider);
51 gtk_list_box_prepend(box, row);
52 } 48 }
53 49
54 static gint 50 static int
55 pidgin_credential_prefs_sort_rows(GtkListBoxRow *row1, GtkListBoxRow *row2, 51 pidgin_credential_prefs_sort_rows(gconstpointer a, gconstpointer b,
56 G_GNUC_UNUSED gpointer user_data) 52 G_GNUC_UNUSED gpointer user_data)
57 { 53 {
58 PidginCredentialProviderRow *pcprow = NULL; 54 PurpleCredentialProvider *provider_a = (gpointer)a;
59 PurpleCredentialProvider *provider = NULL; 55 PurpleCredentialProvider *provider_b = (gpointer)b;
60 const gchar *id1 = NULL; 56 const char *id1 = NULL;
61 gboolean is_noop1 = FALSE; 57 gboolean is_noop1 = FALSE;
62 const gchar *id2 = NULL; 58 const char *id2 = NULL;
63 gboolean is_noop2 = FALSE; 59 gboolean is_noop2 = FALSE;
64 60
65 pcprow = PIDGIN_CREDENTIAL_PROVIDER_ROW(row1); 61 id1 = purple_credential_provider_get_id(provider_a);
66 provider = pidgin_credential_provider_row_get_provider(pcprow);
67 id1 = purple_credential_provider_get_id(provider);
68 is_noop1 = purple_strequal(id1, "noop-provider"); 62 is_noop1 = purple_strequal(id1, "noop-provider");
69 63
70 pcprow = PIDGIN_CREDENTIAL_PROVIDER_ROW(row2); 64 id2 = purple_credential_provider_get_id(provider_b);
71 provider = pidgin_credential_provider_row_get_provider(pcprow);
72 id2 = purple_credential_provider_get_id(provider);
73 is_noop2 = purple_strequal(id2, "noop-provider"); 65 is_noop2 = purple_strequal(id2, "noop-provider");
74 66
75 /* Sort None provider after everything else. */ 67 /* Sort None provider after everything else. */
76 if (is_noop1 && is_noop2) { 68 if (is_noop1 && is_noop2) {
77 return 0; 69 return 0;
78 } else if (is_noop1 && !is_noop2) { 70 } else if (is_noop1 && !is_noop2) {
79 return 1; 71 return 1;
80 } else if (!is_noop1 && is_noop2) { 72 } else if (!is_noop1 && is_noop2) {
81 return -1; 73 return -1;
82 } 74 }
75
83 /* Sort normally by ID. */ 76 /* Sort normally by ID. */
84 return g_strcmp0(id1, id2); 77 return g_strcmp0(id1, id2);
85 } 78 }
86 79
87 static void 80 static void
89 GtkListBoxRow *row, 82 GtkListBoxRow *row,
90 G_GNUC_UNUSED gpointer data) 83 G_GNUC_UNUSED gpointer data)
91 { 84 {
92 PurpleCredentialManager *manager = NULL; 85 PurpleCredentialManager *manager = NULL;
93 PurpleCredentialProvider *provider = NULL; 86 PurpleCredentialProvider *provider = NULL;
94 const gchar *id = NULL; 87 const char *id = NULL;
95 GError *error = NULL; 88 GError *error = NULL;
96 89
97 provider = pidgin_credential_provider_row_get_provider( 90 provider = pidgin_credential_provider_row_get_provider(
98 PIDGIN_CREDENTIAL_PROVIDER_ROW(row)); 91 PIDGIN_CREDENTIAL_PROVIDER_ROW(row));
99 id = purple_credential_provider_get_id(provider); 92 id = purple_credential_provider_get_id(provider);
146 *****************************************************************************/ 139 *****************************************************************************/
147 static void 140 static void
148 pidgin_credential_prefs_init(PidginCredentialPrefs *prefs) { 141 pidgin_credential_prefs_init(PidginCredentialPrefs *prefs) {
149 PurpleCredentialManager *manager = NULL; 142 PurpleCredentialManager *manager = NULL;
150 PurpleCredentialProvider *active = NULL; 143 PurpleCredentialProvider *active = NULL;
144 GtkCustomSorter *sorter = NULL;
145 GtkSortListModel *sorted = NULL;
146 GListModel *model = NULL;
151 147
152 gtk_widget_init_template(GTK_WIDGET(prefs)); 148 gtk_widget_init_template(GTK_WIDGET(prefs));
153 149
150 sorter = gtk_custom_sorter_new(pidgin_credential_prefs_sort_rows, NULL,
151 NULL);
152
153 model = purple_credential_manager_get_default_as_model();
154 sorted = gtk_sort_list_model_new(model, GTK_SORTER(sorter));
155 gtk_list_box_bind_model(GTK_LIST_BOX(prefs->credential_list),
156 G_LIST_MODEL(sorted),
157 (GtkListBoxCreateWidgetFunc)pidgin_credential_prefs_create_row,
158 prefs->credential_list, NULL);
159
154 manager = purple_credential_manager_get_default(); 160 manager = purple_credential_manager_get_default();
155 purple_credential_manager_foreach(
156 manager,
157 pidgin_credential_prefs_create_row,
158 prefs->credential_list);
159 gtk_list_box_set_sort_func(GTK_LIST_BOX(prefs->credential_list),
160 pidgin_credential_prefs_sort_rows, NULL, NULL);
161
162 g_signal_connect_object(manager, "active-changed", 161 g_signal_connect_object(manager, "active-changed",
163 G_CALLBACK(pidgin_credential_prefs_active_provider_changed_cb), 162 G_CALLBACK(pidgin_credential_prefs_active_provider_changed_cb),
164 prefs, 0); 163 prefs, 0);
165 164
166 active = purple_credential_manager_get_active(manager); 165 active = purple_credential_manager_get_active(manager);

mercurial