Mercurial > pidgin.yaz
comparison src/plugins.c @ 138:e8ea1e2fdf0c
[gaim-migrate @ 148]
Bugfixes and memleaks mostly.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 19 Apr 2000 12:36:18 +0000 |
| parents | 00c1ee609648 |
| children | c009c4f4ad02 |
comparison
equal
deleted
inserted
replaced
| 137:fe81c8b4951d | 138:e8ea1e2fdf0c |
|---|---|
| 85 | 85 |
| 86 void load_plugin(GtkWidget *w, gpointer data) | 86 void load_plugin(GtkWidget *w, gpointer data) |
| 87 { | 87 { |
| 88 char *buf = g_malloc(BUF_LEN); | 88 char *buf = g_malloc(BUF_LEN); |
| 89 | 89 |
| 90 if (!plugin_dialog) { | 90 if (plugin_dialog) { |
| 91 plugin_dialog = gtk_file_selection_new("Gaim - Plugin List"); | 91 g_free(buf); |
| 92 | 92 gtk_widget_show(plugin_dialog); |
| 93 gtk_file_selection_hide_fileop_buttons( | 93 gdk_window_raise(plugin_dialog->window); |
| 94 return; | |
| 95 } | |
| 96 | |
| 97 plugin_dialog = gtk_file_selection_new("Gaim - Plugin List"); | |
| 98 | |
| 99 gtk_file_selection_hide_fileop_buttons( | |
| 94 GTK_FILE_SELECTION(plugin_dialog)); | 100 GTK_FILE_SELECTION(plugin_dialog)); |
| 95 | 101 |
| 96 if(getenv("PLUGIN_DIR") == NULL) { | 102 if(getenv("PLUGIN_DIR") == NULL) { |
| 97 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), PLUGIN_DIR); | 103 g_snprintf(buf, BUF_LEN - 1, "%s/%s", getenv("HOME"), PLUGIN_DIR); |
| 98 } else { | 104 } else { |
| 106 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->ok_button), | 112 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->ok_button), |
| 107 "clicked", GTK_SIGNAL_FUNC(load_which_plugin), NULL); | 113 "clicked", GTK_SIGNAL_FUNC(load_which_plugin), NULL); |
| 108 | 114 |
| 109 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->cancel_button), | 115 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->cancel_button), |
| 110 "clicked", GTK_SIGNAL_FUNC(destroy_plugins), NULL); | 116 "clicked", GTK_SIGNAL_FUNC(destroy_plugins), NULL); |
| 111 | |
| 112 } | |
| 113 | 117 |
| 114 g_free(buf); | 118 g_free(buf); |
| 115 gtk_widget_show(plugin_dialog); | 119 gtk_widget_show(plugin_dialog); |
| 116 gdk_window_raise(plugin_dialog->window); | 120 gdk_window_raise(plugin_dialog->window); |
| 117 } | 121 } |
| 333 if ((error = (char *)dlerror()) == NULL) | 337 if ((error = (char *)dlerror()) == NULL) |
| 334 (*gaim_plugin_remove)(); | 338 (*gaim_plugin_remove)(); |
| 335 while (c) { | 339 while (c) { |
| 336 g = (struct gaim_callback *)c->data; | 340 g = (struct gaim_callback *)c->data; |
| 337 if (g->handle == p->handle) { | 341 if (g->handle == p->handle) { |
| 338 callbacks = g_list_remove(callbacks, c); | 342 callbacks = g_list_remove(callbacks, c->data); |
| 339 g_free(g); | 343 g_free(g); |
| 344 c = callbacks; | |
| 345 if (c == NULL) break; | |
| 340 } | 346 } |
| 341 c = c->next; | 347 c = c->next; |
| 342 } | 348 } |
| 343 dlclose(p->handle); | 349 /* don't ask me why this works */ |
| 350 if (callbacks != NULL) dlclose(p->handle); | |
| 344 | 351 |
| 345 plugins = g_list_remove(plugins, p); | 352 plugins = g_list_remove(plugins, p); |
| 353 g_free(p->filename); | |
| 346 g_free(p); | 354 g_free(p); |
| 347 gtk_widget_set_sensitive(config, 0); | 355 gtk_widget_set_sensitive(config, 0); |
| 348 update_show_plugins(); | 356 update_show_plugins(); |
| 349 } | 357 } |
| 350 | 358 |
| 392 GList *c = callbacks; | 400 GList *c = callbacks; |
| 393 struct gaim_callback *g = NULL; | 401 struct gaim_callback *g = NULL; |
| 394 while (c) { | 402 while (c) { |
| 395 g = (struct gaim_callback *)c->data; | 403 g = (struct gaim_callback *)c->data; |
| 396 if (handle == g->handle && func == g->function) { | 404 if (handle == g->handle && func == g->function) { |
| 397 callbacks = g_list_remove(callbacks, g); | 405 callbacks = g_list_remove(callbacks, c->data); |
| 398 g_free(g); | 406 g_free(g); |
| 407 c = callbacks; | |
| 408 if (c == NULL) break; | |
| 399 } | 409 } |
| 400 c = c->next; | 410 c = c->next; |
| 401 } | 411 } |
| 402 } | 412 } |
| 403 | 413 |
