Mercurial > pidgin
comparison src/gtkplugin.c @ 11770:d353f31d17a9
[gaim-migrate @ 14061]
Only one prefs dialog per plugin
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sun, 23 Oct 2005 22:59:47 +0000 |
parents | 5d1dd575d0f4 |
children | 08b1dd8aa11c |
comparison
equal
deleted
inserted
replaced
11769:d56778d594d9 | 11770:d353f31d17a9 |
---|---|
216 g_free(pdesc); | 216 g_free(pdesc); |
217 g_free(pauth); | 217 g_free(pauth); |
218 g_free(pweb); | 218 g_free(pweb); |
219 } | 219 } |
220 | 220 |
221 static void pref_dialog_response_cb(GtkWidget *d, int response, void *null) | 221 static GSList *plugin_pref_dialogs = NULL; |
222 static void pref_dialog_response_cb(GtkWidget *d, int response, GaimPlugin *plug) | |
222 { | 223 { |
223 switch (response) { | 224 switch (response) { |
224 case GTK_RESPONSE_CLOSE: | 225 case GTK_RESPONSE_CLOSE: |
225 case GTK_RESPONSE_DELETE_EVENT: | 226 case GTK_RESPONSE_DELETE_EVENT: |
227 plugin_pref_dialogs = g_slist_remove(plugin_pref_dialogs, plug); | |
226 gtk_widget_destroy(d); | 228 gtk_widget_destroy(d); |
227 break; | 229 break; |
228 } | 230 } |
229 } | 231 } |
230 static void plugin_dialog_response_cb(GtkWidget *d, int response, GtkTreeSelection *sel) | 232 static void plugin_dialog_response_cb(GtkWidget *d, int response, GtkTreeSelection *sel) |
246 return; | 248 return; |
247 gtk_tree_model_get_value (model, &iter, 2, &val); | 249 gtk_tree_model_get_value (model, &iter, 2, &val); |
248 plug = g_value_get_pointer(&val); | 250 plug = g_value_get_pointer(&val); |
249 if (plug == NULL) | 251 if (plug == NULL) |
250 break; | 252 break; |
253 if (g_slist_find(plugin_pref_dialogs, plug)) | |
254 break; | |
255 plugin_pref_dialogs = g_slist_prepend(plugin_pref_dialogs, plug); | |
251 box = gaim_gtk_plugin_get_config_frame(plug); | 256 box = gaim_gtk_plugin_get_config_frame(plug); |
252 if (box == NULL) | 257 if (box == NULL) |
253 break; | 258 break; |
254 | 259 |
255 dialog = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, GTK_WINDOW(d), | 260 dialog = gtk_dialog_new_with_buttons(GAIM_ALERT_TITLE, GTK_WINDOW(d), |
256 GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, | 261 GTK_DIALOG_NO_SEPARATOR | GTK_DIALOG_DESTROY_WITH_PARENT, |
257 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, | 262 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, |
258 NULL); | 263 NULL); |
259 g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response_cb), NULL); | 264 g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(pref_dialog_response_cb), plug); |
260 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), box); | 265 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), box); |
261 gtk_window_set_role(GTK_WINDOW(dialog), "plugin_config"); | 266 gtk_window_set_role(GTK_WINDOW(dialog), "plugin_config"); |
262 gtk_widget_show_all(dialog); | 267 gtk_widget_show_all(dialog); |
268 g_value_unset(&val); | |
263 break; | 269 break; |
264 } | 270 } |
265 } | 271 } |
266 | 272 |
267 void gaim_gtk_plugin_dialog_show() | 273 void gaim_gtk_plugin_dialog_show() |