| 110 g_clear_error(&error); |
110 g_clear_error(&error); |
| 111 } |
111 } |
| 112 |
112 |
| 113 static void |
113 static void |
| 114 pidgin_credential_prefs_set_active_provider(PidginCredentialPrefs *prefs, |
114 pidgin_credential_prefs_set_active_provider(PidginCredentialPrefs *prefs, |
| 115 const gchar *new_id) |
115 PurpleCredentialProvider *active) |
| 116 { |
116 { |
| 117 GtkWidget *child = NULL; |
117 GtkWidget *child = NULL; |
| 118 |
118 |
| 119 for (child = gtk_widget_get_first_child(prefs->credential_list); |
119 for (child = gtk_widget_get_first_child(prefs->credential_list); |
| 120 child; |
120 child; |
| 121 child = gtk_widget_get_next_sibling(child)) |
121 child = gtk_widget_get_next_sibling(child)) |
| 122 { |
122 { |
| 123 PidginCredentialProviderRow *row = NULL; |
123 PidginCredentialProviderRow *row = NULL; |
| 124 PurpleCredentialProvider *provider = NULL; |
124 PurpleCredentialProvider *provider = NULL; |
| 125 const gchar *id = NULL; |
|
| 126 |
125 |
| 127 row = PIDGIN_CREDENTIAL_PROVIDER_ROW(child); |
126 row = PIDGIN_CREDENTIAL_PROVIDER_ROW(child); |
| 128 provider = pidgin_credential_provider_row_get_provider(row); |
127 provider = pidgin_credential_provider_row_get_provider(row); |
| 129 id = purple_credential_provider_get_id(provider); |
|
| 130 |
128 |
| 131 pidgin_credential_provider_row_set_active(row, |
129 pidgin_credential_provider_row_set_active(row, provider == active); |
| 132 purple_strequal(new_id, id)); |
|
| 133 } |
130 } |
| 134 } |
131 } |
| 135 |
132 |
| 136 static void |
133 static void |
| 137 pidgin_credential_prefs_active_provider_changed_cb(const gchar *name, |
134 pidgin_credential_prefs_active_provider_changed_cb(PurpleCredentialManager *manager, |
| 138 PurplePrefType type, |
135 PurpleCredentialProvider *previous, |
| 139 gconstpointer value, |
136 PurpleCredentialProvider *current, |
| 140 gpointer data) |
137 gpointer data) |
| 141 { |
138 { |
| 142 PidginCredentialPrefs *prefs = PIDGIN_CREDENTIAL_PREFS(data); |
139 PidginCredentialPrefs *prefs = PIDGIN_CREDENTIAL_PREFS(data); |
| 143 |
140 |
| 144 pidgin_credential_prefs_set_active_provider(prefs, (const gchar *)value); |
141 pidgin_credential_prefs_set_active_provider(prefs, current); |
| 145 } |
142 } |
| 146 |
143 |
| 147 /****************************************************************************** |
144 /****************************************************************************** |
| 148 * GObject Implementation |
145 * GObject Implementation |
| 149 *****************************************************************************/ |
146 *****************************************************************************/ |
| 150 static void |
147 static void |
| 151 pidgin_credential_prefs_finalize(GObject *obj) { |
|
| 152 purple_prefs_disconnect_by_handle(obj); |
|
| 153 |
|
| 154 G_OBJECT_CLASS(pidgin_credential_prefs_parent_class)->finalize(obj); |
|
| 155 } |
|
| 156 |
|
| 157 static void |
|
| 158 pidgin_credential_prefs_init(PidginCredentialPrefs *prefs) { |
148 pidgin_credential_prefs_init(PidginCredentialPrefs *prefs) { |
| 159 PurpleCredentialManager *manager = NULL; |
149 PurpleCredentialManager *manager = NULL; |
| 160 const gchar *active = NULL; |
150 PurpleCredentialProvider *active = NULL; |
| 161 |
151 |
| 162 gtk_widget_init_template(GTK_WIDGET(prefs)); |
152 gtk_widget_init_template(GTK_WIDGET(prefs)); |
| 163 |
153 |
| 164 manager = purple_credential_manager_get_default(); |
154 manager = purple_credential_manager_get_default(); |
| 165 purple_credential_manager_foreach( |
155 purple_credential_manager_foreach( |
| 167 pidgin_credential_prefs_create_row, |
157 pidgin_credential_prefs_create_row, |
| 168 prefs->credential_list); |
158 prefs->credential_list); |
| 169 gtk_list_box_set_sort_func(GTK_LIST_BOX(prefs->credential_list), |
159 gtk_list_box_set_sort_func(GTK_LIST_BOX(prefs->credential_list), |
| 170 pidgin_credential_prefs_sort_rows, NULL, NULL); |
160 pidgin_credential_prefs_sort_rows, NULL, NULL); |
| 171 |
161 |
| 172 purple_prefs_connect_callback(prefs, "/purple/credentials/active-provider", |
162 g_signal_connect_object(manager, "active-changed", |
| 173 pidgin_credential_prefs_active_provider_changed_cb, |
163 G_CALLBACK(pidgin_credential_prefs_active_provider_changed_cb), |
| 174 prefs); |
164 prefs, 0); |
| 175 |
165 |
| 176 active = purple_prefs_get_string("/purple/credentials/active-provider"); |
166 active = purple_credential_manager_get_active(manager); |
| 177 if(active != NULL) { |
167 if(active != NULL) { |
| 178 pidgin_credential_prefs_set_active_provider(prefs, active); |
168 pidgin_credential_prefs_set_active_provider(prefs, active); |
| 179 } |
169 } |
| 180 } |
170 } |
| 181 |
171 |
| 182 static void |
172 static void |
| 183 pidgin_credential_prefs_class_init(PidginCredentialPrefsClass *klass) { |
173 pidgin_credential_prefs_class_init(PidginCredentialPrefsClass *klass) { |
| 184 GObjectClass *obj_class = G_OBJECT_CLASS(klass); |
|
| 185 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); |
174 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass); |
| 186 |
|
| 187 obj_class->finalize = pidgin_credential_prefs_finalize; |
|
| 188 |
175 |
| 189 gtk_widget_class_set_template_from_resource( |
176 gtk_widget_class_set_template_from_resource( |
| 190 widget_class, |
177 widget_class, |
| 191 "/im/pidgin/Pidgin3/Prefs/credentials.ui" |
178 "/im/pidgin/Pidgin3/Prefs/credentials.ui" |
| 192 ); |
179 ); |