Mercurial > pidgin
comparison src/plugins.c @ 110:f7c6366ca703
[gaim-migrate @ 120]
Okay, this is cool. Plugins are now configurable. They can each do whatever
whenever someone clicks a little "Configure Plugin" button. This is optional;
plugins don't have to be configurable, and if they're not, the button isn't
clickable.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 12 Apr 2000 22:18:15 +0000 |
| parents | 247f540ea6e1 |
| children | 4290a5a20d3c |
comparison
equal
deleted
inserted
replaced
| 109:45bcfa3b584c | 110:f7c6366ca703 |
|---|---|
| 54 static GList *plugins = NULL; | 54 static GList *plugins = NULL; |
| 55 | 55 |
| 56 static GtkWidget *pluglist; | 56 static GtkWidget *pluglist; |
| 57 static GtkWidget *plugtext; | 57 static GtkWidget *plugtext; |
| 58 static GtkWidget *plugwindow; | 58 static GtkWidget *plugwindow; |
| 59 | |
| 60 static GtkWidget *config; | |
| 59 | 61 |
| 60 /* --------------- Function Declarations --------------------- */ | 62 /* --------------- Function Declarations --------------------- */ |
| 61 | 63 |
| 62 void load_plugin (GtkWidget *, gpointer); | 64 void load_plugin (GtkWidget *, gpointer); |
| 63 void unload_plugin(GtkWidget *, gpointer); | 65 void unload_plugin(GtkWidget *, gpointer); |
| 222 add = gtk_button_new_with_label("Load Plugin"); | 224 add = gtk_button_new_with_label("Load Plugin"); |
| 223 gtk_signal_connect(GTK_OBJECT(add), "clicked", | 225 gtk_signal_connect(GTK_OBJECT(add), "clicked", |
| 224 GTK_SIGNAL_FUNC(load_plugin), NULL); | 226 GTK_SIGNAL_FUNC(load_plugin), NULL); |
| 225 gtk_box_pack_start(GTK_BOX(botbox), add, TRUE, FALSE, 5); | 227 gtk_box_pack_start(GTK_BOX(botbox), add, TRUE, FALSE, 5); |
| 226 | 228 |
| 229 config = gtk_button_new_with_label("Configure Plugin"); | |
| 230 gtk_widget_set_sensitive(config, 0); | |
| 231 gtk_box_pack_start(GTK_BOX(botbox), config, TRUE, FALSE, 5); | |
| 232 | |
| 227 remove = gtk_button_new_with_label("Unload Plugin"); | 233 remove = gtk_button_new_with_label("Unload Plugin"); |
| 228 gtk_signal_connect(GTK_OBJECT(remove), "clicked", | 234 gtk_signal_connect(GTK_OBJECT(remove), "clicked", |
| 229 GTK_SIGNAL_FUNC(unload), pluglist); | 235 GTK_SIGNAL_FUNC(unload), pluglist); |
| 230 gtk_box_pack_start(GTK_BOX(botbox), remove, TRUE, FALSE, 5); | 236 gtk_box_pack_start(GTK_BOX(botbox), remove, TRUE, FALSE, 5); |
| 231 | 237 |
| 267 gtk_widget_show(sw); | 273 gtk_widget_show(sw); |
| 268 gtk_widget_show(sw2); | 274 gtk_widget_show(sw2); |
| 269 gtk_widget_show(pluglist); | 275 gtk_widget_show(pluglist); |
| 270 gtk_widget_show(plugtext); | 276 gtk_widget_show(plugtext); |
| 271 gtk_widget_show(add); | 277 gtk_widget_show(add); |
| 278 gtk_widget_show(config); | |
| 272 gtk_widget_show(remove); | 279 gtk_widget_show(remove); |
| 273 gtk_widget_show(close); | 280 gtk_widget_show(close); |
| 274 | 281 |
| 275 gtk_container_add(GTK_CONTAINER(plugwindow), page); | 282 gtk_container_add(GTK_CONTAINER(plugwindow), page); |
| 276 gtk_widget_show(plugwindow); | 283 gtk_widget_show(plugwindow); |
| 341 } | 348 } |
| 342 | 349 |
| 343 void list_clicked(GtkWidget *w, struct gaim_plugin *p) { | 350 void list_clicked(GtkWidget *w, struct gaim_plugin *p) { |
| 344 gchar buffer[2048]; | 351 gchar buffer[2048]; |
| 345 guint text_len; | 352 guint text_len; |
| 353 void (*gaim_plugin_config)(); | |
| 354 char *error; | |
| 346 | 355 |
| 347 text_len = gtk_text_get_length(GTK_TEXT(plugtext)); | 356 text_len = gtk_text_get_length(GTK_TEXT(plugtext)); |
| 348 gtk_text_set_point(GTK_TEXT(plugtext), 0); | 357 gtk_text_set_point(GTK_TEXT(plugtext), 0); |
| 349 gtk_text_forward_delete(GTK_TEXT(plugtext), text_len); | 358 gtk_text_forward_delete(GTK_TEXT(plugtext), text_len); |
| 350 | 359 |
| 351 g_snprintf(buffer, sizeof buffer, "%s\n%s", p->name, p->description); | 360 g_snprintf(buffer, sizeof buffer, "%s\n%s", p->name, p->description); |
| 352 gtk_text_insert(GTK_TEXT(plugtext), NULL, NULL, NULL, buffer, -1); | 361 gtk_text_insert(GTK_TEXT(plugtext), NULL, NULL, NULL, buffer, -1); |
| 362 | |
| 363 gaim_plugin_config = dlsym(p->handle, "gaim_plugin_config"); | |
| 364 if ((error = dlerror()) == NULL) { | |
| 365 gtk_signal_connect(GTK_OBJECT(config), "clicked", | |
| 366 GTK_SIGNAL_FUNC(gaim_plugin_config), NULL); | |
| 367 gtk_widget_set_sensitive(config, 1); | |
| 368 } else { | |
| 369 gtk_widget_set_sensitive(config, 0); | |
| 370 } | |
| 353 } | 371 } |
| 354 | 372 |
| 355 void hide_plugins(GtkWidget *w, gpointer data) { | 373 void hide_plugins(GtkWidget *w, gpointer data) { |
| 356 if (plugwindow) | 374 if (plugwindow) |
| 357 gtk_widget_destroy(plugwindow); | 375 gtk_widget_destroy(plugwindow); |
