Mercurial > pidgin
comparison src/plugins.c @ 1252:46c09828e929
[gaim-migrate @ 1262]
still need to do buddy.c, conversation.c, dialogs.c, prefs.c.
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Wed, 13 Dec 2000 22:12:02 +0000 |
| parents | b5783215b245 |
| children | 96e93119268d |
comparison
equal
deleted
inserted
replaced
| 1251:2d12541cedb1 | 1252:46c09828e929 |
|---|---|
| 48 | 48 |
| 49 #include <dlfcn.h> | 49 #include <dlfcn.h> |
| 50 | 50 |
| 51 /* ------------------ Global Variables ----------------------- */ | 51 /* ------------------ Global Variables ----------------------- */ |
| 52 | 52 |
| 53 GList *plugins = NULL; | 53 GList *plugins = NULL; |
| 54 GList *callbacks = NULL; | 54 GList *callbacks = NULL; |
| 55 | 55 |
| 56 /* ------------------ Local Variables ------------------------ */ | 56 /* ------------------ Local Variables ------------------------ */ |
| 57 | 57 |
| 58 static GtkWidget *plugin_dialog = NULL; | 58 static GtkWidget *plugin_dialog = NULL; |
| 65 static guint confighandle = 0; | 65 static guint confighandle = 0; |
| 66 static char *last_dir = NULL; | 66 static char *last_dir = NULL; |
| 67 | 67 |
| 68 /* --------------- Function Declarations --------------------- */ | 68 /* --------------- Function Declarations --------------------- */ |
| 69 | 69 |
| 70 void show_plugins (GtkWidget *, gpointer); | 70 void show_plugins(GtkWidget *, gpointer); |
| 71 void load_plugin (char *); | 71 void load_plugin(char *); |
| 72 | 72 |
| 73 void gaim_signal_connect (GModule *, enum gaim_event, void *, void *); | 73 void gaim_signal_connect(GModule *, enum gaim_event, void *, void *); |
| 74 void gaim_signal_disconnect(GModule *, enum gaim_event, void *); | 74 void gaim_signal_disconnect(GModule *, enum gaim_event, void *); |
| 75 void gaim_plugin_unload (GModule *); | 75 void gaim_plugin_unload(GModule *); |
| 76 | 76 |
| 77 static void destroy_plugins (GtkWidget *, gpointer); | 77 static void destroy_plugins(GtkWidget *, gpointer); |
| 78 static void load_file (GtkWidget *, gpointer); | 78 static void load_file(GtkWidget *, gpointer); |
| 79 static void load_which_plugin(GtkWidget *, gpointer); | 79 static void load_which_plugin(GtkWidget *, gpointer); |
| 80 static void unload (GtkWidget *, gpointer); | 80 static void unload(GtkWidget *, gpointer); |
| 81 static void unload_immediate (GModule *); | 81 static void unload_immediate(GModule *); |
| 82 static void list_clicked (GtkWidget *, struct gaim_plugin *); | 82 static void list_clicked(GtkWidget *, struct gaim_plugin *); |
| 83 static void update_show_plugins(); | 83 static void update_show_plugins(); |
| 84 static void hide_plugins (GtkWidget *, gpointer); | 84 static void hide_plugins(GtkWidget *, gpointer); |
| 85 | 85 |
| 86 /* ------------------ Code Below ---------------------------- */ | 86 /* ------------------ Code Below ---------------------------- */ |
| 87 | 87 |
| 88 static void destroy_plugins(GtkWidget *w, gpointer data) { | 88 static void destroy_plugins(GtkWidget *w, gpointer data) |
| 89 { | |
| 89 if (plugin_dialog) | 90 if (plugin_dialog) |
| 90 gtk_widget_destroy(plugin_dialog); | 91 gtk_widget_destroy(plugin_dialog); |
| 91 plugin_dialog = NULL; | 92 plugin_dialog = NULL; |
| 92 } | 93 } |
| 93 | 94 |
| 94 static void load_file(GtkWidget *w, gpointer data) | 95 static void load_file(GtkWidget *w, gpointer data) |
| 95 { | 96 { |
| 96 gchar *buf; | 97 gchar *buf; |
| 97 | 98 |
| 98 if (plugin_dialog) { | 99 if (plugin_dialog) { |
| 99 gtk_widget_show(plugin_dialog); | 100 gtk_widget_show(plugin_dialog); |
| 100 gdk_window_raise(plugin_dialog->window); | 101 gdk_window_raise(plugin_dialog->window); |
| 101 return; | 102 return; |
| 102 } | 103 } |
| 103 | 104 |
| 104 plugin_dialog = gtk_file_selection_new(_("Gaim - Plugin List")); | 105 plugin_dialog = gtk_file_selection_new(_("Gaim - Plugin List")); |
| 105 | 106 |
| 106 gtk_file_selection_hide_fileop_buttons( | 107 gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(plugin_dialog)); |
| 107 GTK_FILE_SELECTION(plugin_dialog)); | |
| 108 | 108 |
| 109 if (!last_dir) | 109 if (!last_dir) |
| 110 buf = g_strdup(LIBDIR); | 110 buf = g_strdup(LIBDIR); |
| 111 else | 111 else |
| 112 buf = g_strconcat(last_dir, G_DIR_SEPARATOR_S, NULL); | 112 buf = g_strconcat(last_dir, G_DIR_SEPARATOR_S, NULL); |
| 113 | 113 |
| 114 gtk_file_selection_set_filename(GTK_FILE_SELECTION(plugin_dialog), buf); | 114 gtk_file_selection_set_filename(GTK_FILE_SELECTION(plugin_dialog), buf); |
| 115 gtk_file_selection_complete(GTK_FILE_SELECTION(plugin_dialog), "*.so"); | 115 gtk_file_selection_complete(GTK_FILE_SELECTION(plugin_dialog), "*.so"); |
| 116 gtk_signal_connect(GTK_OBJECT(plugin_dialog), "destroy", | 116 gtk_signal_connect(GTK_OBJECT(plugin_dialog), "destroy", |
| 117 GTK_SIGNAL_FUNC(destroy_plugins), plugin_dialog); | 117 GTK_SIGNAL_FUNC(destroy_plugins), plugin_dialog); |
| 118 | 118 |
| 119 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->ok_button), | 119 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->ok_button), |
| 120 "clicked", GTK_SIGNAL_FUNC(load_which_plugin), NULL); | 120 "clicked", GTK_SIGNAL_FUNC(load_which_plugin), NULL); |
| 121 | 121 |
| 122 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->cancel_button), | 122 gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(plugin_dialog)->cancel_button), |
| 123 "clicked", GTK_SIGNAL_FUNC(destroy_plugins), NULL); | 123 "clicked", GTK_SIGNAL_FUNC(destroy_plugins), NULL); |
| 124 | 124 |
| 125 g_free(buf); | 125 g_free(buf); |
| 126 gtk_widget_show(plugin_dialog); | 126 gtk_widget_show(plugin_dialog); |
| 127 gdk_window_raise(plugin_dialog->window); | 127 gdk_window_raise(plugin_dialog->window); |
| 128 } | 128 } |
| 129 | 129 |
| 130 static void load_which_plugin(GtkWidget *w, gpointer data) { | 130 static void load_which_plugin(GtkWidget *w, gpointer data) |
| 131 { | |
| 131 char *file; | 132 char *file; |
| 132 | 133 |
| 133 file = gtk_file_selection_get_filename( | 134 file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(plugin_dialog)); |
| 134 GTK_FILE_SELECTION(plugin_dialog)); | |
| 135 if (file_is_dir(file, plugin_dialog)) { | 135 if (file_is_dir(file, plugin_dialog)) { |
| 136 return; | 136 return; |
| 137 } | 137 } |
| 138 | 138 |
| 139 load_plugin(file); | 139 load_plugin(file); |
| 141 if (plugin_dialog) | 141 if (plugin_dialog) |
| 142 gtk_widget_destroy(plugin_dialog); | 142 gtk_widget_destroy(plugin_dialog); |
| 143 plugin_dialog = NULL; | 143 plugin_dialog = NULL; |
| 144 } | 144 } |
| 145 | 145 |
| 146 void load_plugin(char *filename) { | 146 void load_plugin(char *filename) |
| 147 { | |
| 147 struct gaim_plugin *plug; | 148 struct gaim_plugin *plug; |
| 148 GList *c = plugins; | 149 GList *c = plugins; |
| 149 char *(*gaim_plugin_init)(GModule *); | 150 char *(*gaim_plugin_init)(GModule *); |
| 150 char *(*cfunc)(); | 151 char *(*cfunc)(); |
| 151 char *error; | 152 char *error; |
| 152 char *retval; | 153 char *retval; |
| 153 | 154 |
| 154 if (!g_module_supported()) return; | 155 if (!g_module_supported()) |
| 155 if (filename == NULL) return; | 156 return; |
| 156 if (strlen(filename) == 0) return; | 157 if (filename == NULL) |
| 158 return; | |
| 159 if (strlen(filename) == 0) | |
| 160 return; | |
| 157 | 161 |
| 158 while (c) { | 162 while (c) { |
| 159 plug = (struct gaim_plugin *)c->data; | 163 plug = (struct gaim_plugin *)c->data; |
| 160 if (!strcmp(filename, g_module_name(plug->handle))) { | 164 if (!strcmp(filename, g_module_name(plug->handle))) { |
| 161 void (*gaim_plugin_remove)(); | 165 void (*gaim_plugin_remove)(); |
| 162 if (g_module_symbol(plug->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | 166 if (g_module_symbol(plug->handle, "gaim_plugin_remove", |
| 167 (gpointer *)&gaim_plugin_remove)) | |
| 163 (*gaim_plugin_remove)(); | 168 (*gaim_plugin_remove)(); |
| 164 | 169 |
| 165 unload_immediate(plug->handle); | 170 unload_immediate(plug->handle); |
| 166 c = plugins; | 171 c = plugins; |
| 167 } else | 172 } else |
| 227 | 232 |
| 228 update_show_plugins(); | 233 update_show_plugins(); |
| 229 save_prefs(); | 234 save_prefs(); |
| 230 } | 235 } |
| 231 | 236 |
| 232 void show_plugins(GtkWidget *w, gpointer data) { | 237 void show_plugins(GtkWidget *w, gpointer data) |
| 238 { | |
| 233 /* most of this code was shamelessly stolen from prefs.c */ | 239 /* most of this code was shamelessly stolen from prefs.c */ |
| 234 GtkWidget *page; | 240 GtkWidget *page; |
| 235 GtkWidget *topbox; | 241 GtkWidget *topbox; |
| 236 GtkWidget *botbox; | 242 GtkWidget *botbox; |
| 237 GtkWidget *sw; | 243 GtkWidget *sw; |
| 239 GtkWidget *list_item; | 245 GtkWidget *list_item; |
| 240 GtkWidget *sw2; | 246 GtkWidget *sw2; |
| 241 GtkWidget *add; | 247 GtkWidget *add; |
| 242 GtkWidget *remove; | 248 GtkWidget *remove; |
| 243 GtkWidget *close; | 249 GtkWidget *close; |
| 244 GList *plugs = plugins; | 250 GList *plugs = plugins; |
| 245 struct gaim_plugin *p; | 251 struct gaim_plugin *p; |
| 246 | 252 |
| 247 if (plugwindow) return; | 253 if (plugwindow) |
| 254 return; | |
| 248 | 255 |
| 249 plugwindow = gtk_window_new(GTK_WINDOW_DIALOG); | 256 plugwindow = gtk_window_new(GTK_WINDOW_DIALOG); |
| 250 gtk_window_set_wmclass(GTK_WINDOW(plugwindow), "plugins", "Gaim"); | 257 gtk_window_set_wmclass(GTK_WINDOW(plugwindow), "plugins", "Gaim"); |
| 251 gtk_widget_realize(plugwindow); | 258 gtk_widget_realize(plugwindow); |
| 252 aol_icon(plugwindow->window); | 259 aol_icon(plugwindow->window); |
| 253 gtk_container_border_width(GTK_CONTAINER(plugwindow), 5); | 260 gtk_container_border_width(GTK_CONTAINER(plugwindow), 5); |
| 254 gtk_window_set_title(GTK_WINDOW(plugwindow), _("Gaim - Plugins")); | 261 gtk_window_set_title(GTK_WINDOW(plugwindow), _("Gaim - Plugins")); |
| 255 gtk_widget_set_usize(plugwindow, 400, 250); | 262 gtk_widget_set_usize(plugwindow, 400, 250); |
| 256 gtk_signal_connect(GTK_OBJECT(plugwindow), "destroy", | 263 gtk_signal_connect(GTK_OBJECT(plugwindow), "destroy", GTK_SIGNAL_FUNC(hide_plugins), NULL); |
| 257 GTK_SIGNAL_FUNC(hide_plugins), NULL); | |
| 258 | 264 |
| 259 page = gtk_vbox_new(FALSE, 5); | 265 page = gtk_vbox_new(FALSE, 5); |
| 260 topbox = gtk_hbox_new(FALSE, 5); | 266 topbox = gtk_hbox_new(FALSE, 5); |
| 261 botbox = gtk_hbox_new(FALSE, 5); | 267 botbox = gtk_hbox_new(FALSE, 5); |
| 262 | 268 |
| 263 /* Left side: list of plugin file names */ | 269 /* Left side: list of plugin file names */ |
| 264 sw2 = gtk_scrolled_window_new(NULL, NULL); | 270 sw2 = gtk_scrolled_window_new(NULL, NULL); |
| 265 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2), | 271 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw2), |
| 266 GTK_POLICY_AUTOMATIC, | 272 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
| 267 GTK_POLICY_AUTOMATIC); | |
| 268 | 273 |
| 269 pluglist = gtk_list_new(); | 274 pluglist = gtk_list_new(); |
| 270 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), pluglist); | 275 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw2), pluglist); |
| 271 gtk_box_pack_start(GTK_BOX(topbox), sw2, TRUE, TRUE, 0); | 276 gtk_box_pack_start(GTK_BOX(topbox), sw2, TRUE, TRUE, 0); |
| 272 | 277 |
| 273 /* Right side: the text description of the plugin */ | 278 /* Right side: the text description of the plugin */ |
| 274 sw = gtk_scrolled_window_new(NULL, NULL); | 279 sw = gtk_scrolled_window_new(NULL, NULL); |
| 275 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | 280 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), |
| 276 GTK_POLICY_AUTOMATIC, | 281 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
| 277 GTK_POLICY_AUTOMATIC); | |
| 278 | 282 |
| 279 plugtext = gtk_text_new(NULL, NULL); | 283 plugtext = gtk_text_new(NULL, NULL); |
| 280 gtk_container_add(GTK_CONTAINER(sw), plugtext); | 284 gtk_container_add(GTK_CONTAINER(sw), plugtext); |
| 281 gtk_box_pack_start(GTK_BOX(topbox), sw, TRUE, TRUE, 0); | 285 gtk_box_pack_start(GTK_BOX(topbox), sw, TRUE, TRUE, 0); |
| 282 gtk_text_set_word_wrap(GTK_TEXT(plugtext), TRUE); | 286 gtk_text_set_word_wrap(GTK_TEXT(plugtext), TRUE); |
| 283 gtk_text_set_editable(GTK_TEXT(plugtext), FALSE); | 287 gtk_text_set_editable(GTK_TEXT(plugtext), FALSE); |
| 284 | 288 |
| 285 /* Build the bottom button bar */ | 289 /* Build the bottom button bar */ |
| 286 add = gtk_button_new_with_label(_("Load Plugin")); | 290 add = gtk_button_new_with_label(_("Load Plugin")); |
| 287 gtk_signal_connect(GTK_OBJECT(add), "clicked", | 291 gtk_signal_connect(GTK_OBJECT(add), "clicked", GTK_SIGNAL_FUNC(load_file), NULL); |
| 288 GTK_SIGNAL_FUNC(load_file), NULL); | |
| 289 gtk_box_pack_start(GTK_BOX(botbox), add, TRUE, TRUE, 0); | 292 gtk_box_pack_start(GTK_BOX(botbox), add, TRUE, TRUE, 0); |
| 290 if (display_options & OPT_DISP_COOL_LOOK) | 293 if (display_options & OPT_DISP_COOL_LOOK) |
| 291 gtk_button_set_relief(GTK_BUTTON(add), GTK_RELIEF_NONE); | 294 gtk_button_set_relief(GTK_BUTTON(add), GTK_RELIEF_NONE); |
| 292 | 295 |
| 293 config = gtk_button_new_with_label(_("Configure Plugin")); | 296 config = gtk_button_new_with_label(_("Configure Plugin")); |
| 295 gtk_box_pack_start(GTK_BOX(botbox), config, TRUE, TRUE, 0); | 298 gtk_box_pack_start(GTK_BOX(botbox), config, TRUE, TRUE, 0); |
| 296 if (display_options & OPT_DISP_COOL_LOOK) | 299 if (display_options & OPT_DISP_COOL_LOOK) |
| 297 gtk_button_set_relief(GTK_BUTTON(config), GTK_RELIEF_NONE); | 300 gtk_button_set_relief(GTK_BUTTON(config), GTK_RELIEF_NONE); |
| 298 | 301 |
| 299 remove = gtk_button_new_with_label(_("Unload Plugin")); | 302 remove = gtk_button_new_with_label(_("Unload Plugin")); |
| 300 gtk_signal_connect(GTK_OBJECT(remove), "clicked", | 303 gtk_signal_connect(GTK_OBJECT(remove), "clicked", GTK_SIGNAL_FUNC(unload), pluglist); |
| 301 GTK_SIGNAL_FUNC(unload), pluglist); | |
| 302 gtk_box_pack_start(GTK_BOX(botbox), remove, TRUE, TRUE, 0); | 304 gtk_box_pack_start(GTK_BOX(botbox), remove, TRUE, TRUE, 0); |
| 303 if (display_options & OPT_DISP_COOL_LOOK) | 305 if (display_options & OPT_DISP_COOL_LOOK) |
| 304 gtk_button_set_relief(GTK_BUTTON(remove), GTK_RELIEF_NONE); | 306 gtk_button_set_relief(GTK_BUTTON(remove), GTK_RELIEF_NONE); |
| 305 | 307 |
| 306 close = gtk_button_new_with_label(_("Close")); | 308 close = gtk_button_new_with_label(_("Close")); |
| 307 gtk_signal_connect(GTK_OBJECT(close), "clicked", | 309 gtk_signal_connect(GTK_OBJECT(close), "clicked", GTK_SIGNAL_FUNC(hide_plugins), NULL); |
| 308 GTK_SIGNAL_FUNC(hide_plugins), NULL); | |
| 309 gtk_box_pack_start(GTK_BOX(botbox), close, TRUE, TRUE, 0); | 310 gtk_box_pack_start(GTK_BOX(botbox), close, TRUE, TRUE, 0); |
| 310 if (display_options & OPT_DISP_COOL_LOOK) | 311 if (display_options & OPT_DISP_COOL_LOOK) |
| 311 gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE); | 312 gtk_button_set_relief(GTK_BUTTON(close), GTK_RELIEF_NONE); |
| 312 | 313 |
| 313 gtk_box_pack_start(GTK_BOX(page), topbox, TRUE, TRUE, 0); | 314 gtk_box_pack_start(GTK_BOX(page), topbox, TRUE, TRUE, 0); |
| 316 while (plugs) { | 317 while (plugs) { |
| 317 p = (struct gaim_plugin *)plugs->data; | 318 p = (struct gaim_plugin *)plugs->data; |
| 318 label = gtk_label_new(g_module_name(p->handle)); | 319 label = gtk_label_new(g_module_name(p->handle)); |
| 319 list_item = gtk_list_item_new(); | 320 list_item = gtk_list_item_new(); |
| 320 gtk_container_add(GTK_CONTAINER(list_item), label); | 321 gtk_container_add(GTK_CONTAINER(list_item), label); |
| 321 gtk_signal_connect(GTK_OBJECT(list_item), "select", | 322 gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(list_clicked), p); |
| 322 GTK_SIGNAL_FUNC(list_clicked), p); | |
| 323 gtk_object_set_user_data(GTK_OBJECT(list_item), p); | 323 gtk_object_set_user_data(GTK_OBJECT(list_item), p); |
| 324 | 324 |
| 325 gtk_widget_show(label); | 325 gtk_widget_show(label); |
| 326 gtk_container_add(GTK_CONTAINER(pluglist), list_item); | 326 gtk_container_add(GTK_CONTAINER(pluglist), list_item); |
| 327 gtk_widget_show(list_item); | 327 gtk_widget_show(list_item); |
| 328 | 328 |
| 329 plugs = g_list_next(plugs); | 329 plugs = g_list_next(plugs); |
| 330 } | 330 } |
| 331 | 331 |
| 332 /* Make the first item selected */ | 332 /* Make the first item selected */ |
| 333 if (plugins != NULL) | 333 if (plugins != NULL) |
| 334 gtk_list_select_item(GTK_LIST(pluglist), 0); | 334 gtk_list_select_item(GTK_LIST(pluglist), 0); |
| 335 | 335 |
| 336 gtk_widget_show(page); | 336 gtk_widget_show(page); |
| 347 | 347 |
| 348 gtk_container_add(GTK_CONTAINER(plugwindow), page); | 348 gtk_container_add(GTK_CONTAINER(plugwindow), page); |
| 349 gtk_widget_show(plugwindow); | 349 gtk_widget_show(plugwindow); |
| 350 } | 350 } |
| 351 | 351 |
| 352 void update_show_plugins() { | 352 void update_show_plugins() |
| 353 { | |
| 353 GList *plugs = plugins; | 354 GList *plugs = plugins; |
| 354 struct gaim_plugin *p; | 355 struct gaim_plugin *p; |
| 355 GtkWidget *label; | 356 GtkWidget *label; |
| 356 GtkWidget *list_item; | 357 GtkWidget *list_item; |
| 357 | 358 |
| 358 if (plugwindow == NULL) return; | 359 if (plugwindow == NULL) |
| 360 return; | |
| 359 | 361 |
| 360 gtk_list_clear_items(GTK_LIST(pluglist), 0, -1); | 362 gtk_list_clear_items(GTK_LIST(pluglist), 0, -1); |
| 361 while (plugs) { | 363 while (plugs) { |
| 362 p = (struct gaim_plugin *)plugs->data; | 364 p = (struct gaim_plugin *)plugs->data; |
| 363 label = gtk_label_new(g_module_name(p->handle)); | 365 label = gtk_label_new(g_module_name(p->handle)); |
| 364 list_item = gtk_list_item_new(); | 366 list_item = gtk_list_item_new(); |
| 365 gtk_container_add(GTK_CONTAINER(list_item), label); | 367 gtk_container_add(GTK_CONTAINER(list_item), label); |
| 366 gtk_signal_connect(GTK_OBJECT(list_item), "select", | 368 gtk_signal_connect(GTK_OBJECT(list_item), "select", GTK_SIGNAL_FUNC(list_clicked), p); |
| 367 GTK_SIGNAL_FUNC(list_clicked), p); | |
| 368 gtk_object_set_user_data(GTK_OBJECT(list_item), p); | 369 gtk_object_set_user_data(GTK_OBJECT(list_item), p); |
| 369 | 370 |
| 370 gtk_widget_show(label); | 371 gtk_widget_show(label); |
| 371 gtk_container_add(GTK_CONTAINER(pluglist), list_item); | 372 gtk_container_add(GTK_CONTAINER(pluglist), list_item); |
| 372 gtk_widget_show(list_item); | 373 gtk_widget_show(list_item); |
| 374 } | 375 } |
| 375 if (plugins != NULL) | 376 if (plugins != NULL) |
| 376 gtk_list_select_item(GTK_LIST(pluglist), 0); | 377 gtk_list_select_item(GTK_LIST(pluglist), 0); |
| 377 else { | 378 else { |
| 378 gtk_text_set_point(GTK_TEXT(plugtext), 0); | 379 gtk_text_set_point(GTK_TEXT(plugtext), 0); |
| 379 gtk_text_forward_delete(GTK_TEXT(plugtext), | 380 gtk_text_forward_delete(GTK_TEXT(plugtext), gtk_text_get_length(GTK_TEXT(plugtext))); |
| 380 gtk_text_get_length(GTK_TEXT(plugtext))); | 381 } |
| 381 } | 382 } |
| 382 } | 383 |
| 383 | 384 void unload(GtkWidget *w, gpointer data) |
| 384 void unload(GtkWidget *w, gpointer data) { | 385 { |
| 385 GList *i; | 386 GList *i; |
| 386 struct gaim_plugin *p; | 387 struct gaim_plugin *p; |
| 387 void (*gaim_plugin_remove)(); | 388 void (*gaim_plugin_remove)(); |
| 388 | 389 |
| 389 i = GTK_LIST(pluglist)->selection; | 390 i = GTK_LIST(pluglist)->selection; |
| 390 | 391 |
| 391 if (i == NULL) return; | 392 if (i == NULL) |
| 393 return; | |
| 392 | 394 |
| 393 p = gtk_object_get_user_data(GTK_OBJECT(i->data)); | 395 p = gtk_object_get_user_data(GTK_OBJECT(i->data)); |
| 394 | 396 |
| 395 /* Attempt to call the plugin's remove function (if there) */ | 397 /* Attempt to call the plugin's remove function (if there) */ |
| 396 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) | 398 if (g_module_symbol(p->handle, "gaim_plugin_remove", (gpointer *)&gaim_plugin_remove)) |
| 397 (*gaim_plugin_remove)(); | 399 (*gaim_plugin_remove)(); |
| 398 | 400 |
| 399 unload_immediate(p->handle); | 401 unload_immediate(p->handle); |
| 400 } | 402 } |
| 401 | 403 |
| 402 static void unload_for_real(void *handle) { | 404 static void unload_for_real(void *handle) |
| 405 { | |
| 403 GList *i; | 406 GList *i; |
| 404 struct gaim_plugin *p = NULL; | 407 struct gaim_plugin *p = NULL; |
| 405 GList *c = callbacks; | 408 GList *c = callbacks; |
| 406 struct gaim_callback *g; | 409 struct gaim_callback *g; |
| 407 | 410 |
| 436 } | 439 } |
| 437 } | 440 } |
| 438 | 441 |
| 439 plugins = g_list_remove(plugins, p); | 442 plugins = g_list_remove(plugins, p); |
| 440 g_free(p); | 443 g_free(p); |
| 441 if (config) gtk_widget_set_sensitive(config, 0); | 444 if (config) |
| 445 gtk_widget_set_sensitive(config, 0); | |
| 442 update_show_plugins(); | 446 update_show_plugins(); |
| 443 save_prefs(); | 447 save_prefs(); |
| 444 } | 448 } |
| 445 | 449 |
| 446 void unload_immediate(GModule *handle) { | 450 void unload_immediate(GModule *handle) |
| 451 { | |
| 447 unload_for_real(handle); | 452 unload_for_real(handle); |
| 448 g_module_close(handle); | 453 g_module_close(handle); |
| 449 } | 454 } |
| 450 | 455 |
| 451 static gint unload_timeout(GModule *handle) { | 456 static gint unload_timeout(GModule *handle) |
| 457 { | |
| 452 g_module_close(handle); | 458 g_module_close(handle); |
| 453 return FALSE; | 459 return FALSE; |
| 454 } | 460 } |
| 455 | 461 |
| 456 void gaim_plugin_unload(GModule *handle) { | 462 void gaim_plugin_unload(GModule *handle) |
| 463 { | |
| 457 unload_for_real(handle); | 464 unload_for_real(handle); |
| 458 gtk_timeout_add(5000, (GtkFunction)unload_timeout, handle); | 465 gtk_timeout_add(5000, (GtkFunction)unload_timeout, handle); |
| 459 } | 466 } |
| 460 | 467 |
| 461 void list_clicked(GtkWidget *w, struct gaim_plugin *p) { | 468 void list_clicked(GtkWidget *w, struct gaim_plugin *p) |
| 469 { | |
| 462 gchar *temp; | 470 gchar *temp; |
| 463 guint text_len; | 471 guint text_len; |
| 464 void (*gaim_plugin_config)(); | 472 void (*gaim_plugin_config)(); |
| 465 | 473 |
| 466 if (confighandle != 0) | 474 if (confighandle != 0) |
| 474 g_free(temp); | 482 g_free(temp); |
| 475 | 483 |
| 476 /* Find out if this plug-in has a configuration function */ | 484 /* Find out if this plug-in has a configuration function */ |
| 477 if (g_module_symbol(p->handle, "gaim_plugin_config", (gpointer *)&gaim_plugin_config)) { | 485 if (g_module_symbol(p->handle, "gaim_plugin_config", (gpointer *)&gaim_plugin_config)) { |
| 478 confighandle = gtk_signal_connect(GTK_OBJECT(config), "clicked", | 486 confighandle = gtk_signal_connect(GTK_OBJECT(config), "clicked", |
| 479 GTK_SIGNAL_FUNC(gaim_plugin_config), NULL); | 487 GTK_SIGNAL_FUNC(gaim_plugin_config), NULL); |
| 480 gtk_widget_set_sensitive(config, 1); | 488 gtk_widget_set_sensitive(config, 1); |
| 481 } else { | 489 } else { |
| 482 confighandle = 0; | 490 confighandle = 0; |
| 483 gtk_widget_set_sensitive(config, 0); | 491 gtk_widget_set_sensitive(config, 0); |
| 484 } | 492 } |
| 485 } | 493 } |
| 486 | 494 |
| 487 void hide_plugins(GtkWidget *w, gpointer data) { | 495 void hide_plugins(GtkWidget *w, gpointer data) |
| 496 { | |
| 488 if (plugwindow) | 497 if (plugwindow) |
| 489 gtk_widget_destroy(plugwindow); | 498 gtk_widget_destroy(plugwindow); |
| 490 plugwindow = NULL; | 499 plugwindow = NULL; |
| 491 config = NULL; | 500 config = NULL; |
| 492 confighandle = 0; | 501 confighandle = 0; |
| 493 } | 502 } |
| 494 | 503 |
| 495 void gaim_signal_connect(GModule *handle, enum gaim_event which, | 504 void gaim_signal_connect(GModule *handle, enum gaim_event which, void *func, void *data) |
| 496 void *func, void *data) { | 505 { |
| 497 struct gaim_callback *call = g_new0(struct gaim_callback, 1); | 506 struct gaim_callback *call = g_new0(struct gaim_callback, 1); |
| 498 call->handle = handle; | 507 call->handle = handle; |
| 499 call->event = which; | 508 call->event = which; |
| 500 call->function = func; | 509 call->function = func; |
| 501 call->data = data; | 510 call->data = data; |
| 502 | 511 |
| 503 callbacks = g_list_append(callbacks, call); | 512 callbacks = g_list_append(callbacks, call); |
| 504 debug_printf("Adding callback %d\n", g_list_length(callbacks)); | 513 debug_printf("Adding callback %d\n", g_list_length(callbacks)); |
| 505 } | 514 } |
| 506 | 515 |
| 507 void gaim_signal_disconnect(GModule *handle, enum gaim_event which, void *func) { | 516 void gaim_signal_disconnect(GModule *handle, enum gaim_event which, void *func) |
| 517 { | |
| 508 GList *c = callbacks; | 518 GList *c = callbacks; |
| 509 struct gaim_callback *g = NULL; | 519 struct gaim_callback *g = NULL; |
| 510 | 520 |
| 511 while (c) { | 521 while (c) { |
| 512 g = (struct gaim_callback *)c->data; | 522 g = (struct gaim_callback *)c->data; |
| 513 if (handle == g->handle && func == g->function) { | 523 if (handle == g->handle && func == g->function) { |
| 514 callbacks = g_list_remove(callbacks, c->data); | 524 callbacks = g_list_remove(callbacks, c->data); |
| 515 g_free(g); | 525 g_free(g); |
| 516 c = callbacks; | 526 c = callbacks; |
| 517 if (c == NULL) break; | 527 if (c == NULL) |
| 528 break; | |
| 518 } | 529 } |
| 519 c = g_list_next(c); | 530 c = g_list_next(c); |
| 520 } | 531 } |
| 521 } | 532 } |
| 522 | 533 |
| 523 #endif /* GAIM_PLUGINS */ | 534 #endif /* GAIM_PLUGINS */ |
| 524 | 535 |
| 525 char *event_name(enum gaim_event event) | 536 char *event_name(enum gaim_event event) |
| 526 { | 537 { |
| 527 static char buf[128]; | 538 static char buf[128]; |
| 528 switch(event) { | 539 switch (event) { |
| 529 case event_signon: | 540 case event_signon: |
| 530 sprintf(buf, "event_signon"); | 541 sprintf(buf, "event_signon"); |
| 531 break; | 542 break; |
| 532 case event_signoff: | 543 case event_signoff: |
| 533 sprintf(buf, "event_signoff"); | 544 sprintf(buf, "event_signoff"); |
| 534 break; | 545 break; |
| 535 case event_away: | 546 case event_away: |
| 536 sprintf(buf, "event_away"); | 547 sprintf(buf, "event_away"); |
| 537 break; | 548 break; |
| 538 case event_back: | 549 case event_back: |
| 539 sprintf(buf, "event_back"); | 550 sprintf(buf, "event_back"); |
| 540 break; | 551 break; |
| 541 case event_im_recv: | 552 case event_im_recv: |
| 542 sprintf(buf, "event_im_recv"); | 553 sprintf(buf, "event_im_recv"); |
| 543 break; | 554 break; |
| 544 case event_im_send: | 555 case event_im_send: |
| 545 sprintf(buf, "event_im_send"); | 556 sprintf(buf, "event_im_send"); |
| 546 break; | 557 break; |
| 547 case event_buddy_signon: | 558 case event_buddy_signon: |
| 548 sprintf(buf, "event_buddy_signon"); | 559 sprintf(buf, "event_buddy_signon"); |
| 549 break; | 560 break; |
| 550 case event_buddy_signoff: | 561 case event_buddy_signoff: |
| 551 sprintf(buf, "event_buddy_signoff"); | 562 sprintf(buf, "event_buddy_signoff"); |
| 552 break; | 563 break; |
| 553 case event_buddy_away: | 564 case event_buddy_away: |
| 554 sprintf(buf, "event_buddy_away"); | 565 sprintf(buf, "event_buddy_away"); |
| 555 break; | 566 break; |
| 556 case event_buddy_back: | 567 case event_buddy_back: |
| 557 sprintf(buf, "event_buddy_back"); | 568 sprintf(buf, "event_buddy_back"); |
| 558 break; | 569 break; |
| 559 case event_buddy_idle: | 570 case event_buddy_idle: |
| 560 sprintf(buf, "event_buddy_idle"); | 571 sprintf(buf, "event_buddy_idle"); |
| 561 break; | 572 break; |
| 562 case event_buddy_unidle: | 573 case event_buddy_unidle: |
| 563 sprintf(buf, "event_buddy_unidle"); | 574 sprintf(buf, "event_buddy_unidle"); |
| 564 break; | 575 break; |
| 565 case event_blist_update: | 576 case event_blist_update: |
| 566 sprintf(buf, "event_blist_update"); | 577 sprintf(buf, "event_blist_update"); |
| 567 break; | 578 break; |
| 568 case event_chat_invited: | 579 case event_chat_invited: |
| 569 sprintf(buf, "event_chat_invited"); | 580 sprintf(buf, "event_chat_invited"); |
| 570 break; | 581 break; |
| 571 case event_chat_join: | 582 case event_chat_join: |
| 572 sprintf(buf, "event_chat_join"); | 583 sprintf(buf, "event_chat_join"); |
| 573 break; | 584 break; |
| 574 case event_chat_leave: | 585 case event_chat_leave: |
| 575 sprintf(buf, "event_chat_leave"); | 586 sprintf(buf, "event_chat_leave"); |
| 576 break; | 587 break; |
| 577 case event_chat_buddy_join: | 588 case event_chat_buddy_join: |
| 578 sprintf(buf, "event_chat_buddy_join"); | 589 sprintf(buf, "event_chat_buddy_join"); |
| 579 break; | 590 break; |
| 580 case event_chat_buddy_leave: | 591 case event_chat_buddy_leave: |
| 581 sprintf(buf, "event_chat_buddy_leave"); | 592 sprintf(buf, "event_chat_buddy_leave"); |
| 582 break; | 593 break; |
| 583 case event_chat_recv: | 594 case event_chat_recv: |
| 584 sprintf(buf, "event_chat_recv"); | 595 sprintf(buf, "event_chat_recv"); |
| 585 break; | 596 break; |
| 586 case event_chat_send: | 597 case event_chat_send: |
| 587 sprintf(buf, "event_chat_send"); | 598 sprintf(buf, "event_chat_send"); |
| 588 break; | 599 break; |
| 589 case event_warned: | 600 case event_warned: |
| 590 sprintf(buf, "event_warned"); | 601 sprintf(buf, "event_warned"); |
| 591 break; | 602 break; |
| 592 case event_error: | 603 case event_error: |
| 593 sprintf(buf, "event_error"); | 604 sprintf(buf, "event_error"); |
| 594 break; | 605 break; |
| 595 case event_quit: | 606 case event_quit: |
| 596 sprintf(buf, "event_quit"); | 607 sprintf(buf, "event_quit"); |
| 597 break; | 608 break; |
| 598 case event_new_conversation: | 609 case event_new_conversation: |
| 599 sprintf(buf, "event_new_conversaion"); | 610 sprintf(buf, "event_new_conversaion"); |
| 600 break; | 611 break; |
| 601 default: | 612 default: |
| 602 sprintf(buf, "event_unknown"); | 613 sprintf(buf, "event_unknown"); |
| 603 break; | 614 break; |
| 604 } | 615 } |
| 605 return buf; | 616 return buf; |
| 606 } | 617 } |
| 607 | 618 |
| 608 int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) { | 619 int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) |
| 620 { | |
| 609 #ifdef USE_PERL | 621 #ifdef USE_PERL |
| 610 char buf[BUF_LONG]; | 622 char buf[BUF_LONG]; |
| 611 char *tmp; | 623 char *tmp; |
| 612 #endif | 624 #endif |
| 613 #ifdef GAIM_PLUGINS | 625 #ifdef GAIM_PLUGINS |
| 614 GList *c = callbacks; | 626 GList *c = callbacks; |
| 615 struct gaim_callback *g; | 627 struct gaim_callback *g; |
| 616 | 628 |
| 617 while (c) { | 629 while (c) { |
| 618 g = (struct gaim_callback *)c->data; | 630 g = (struct gaim_callback *)c->data; |
| 619 if (g->event == event && g->function != NULL) { | 631 if (g->event == event && g->function !=NULL) { |
| 620 switch(event) { | 632 switch (event) { |
| 621 | 633 |
| 622 /* struct gaim_connection * */ | 634 /* struct gaim_connection * */ |
| 623 case event_signon: | 635 case event_signon: |
| 624 case event_signoff: | 636 case event_signoff: |
| 625 { | 637 { |
| 626 void (*function)(struct gaim_connection *, void *) = g->function; | 638 void (*function) (struct gaim_connection *, void *) = |
| 639 g->function; | |
| 627 (*function)(arg1, g->data); | 640 (*function)(arg1, g->data); |
| 628 } | 641 } |
| 629 break; | 642 break; |
| 630 | 643 |
| 631 /* no args */ | 644 /* no args */ |
| 632 case event_away: | 645 case event_away: |
| 633 case event_back: | 646 case event_back: |
| 634 case event_blist_update: | 647 case event_blist_update: |
| 635 case event_quit: | 648 case event_quit: |
| 636 { | 649 { |
| 637 void (*function)(void *) = g->function; | 650 void (*function)(void *) = g->function; |
| 638 (*function)(g->data); | 651 (*function)(g->data); |
| 639 } | 652 } |
| 640 break; | 653 break; |
| 641 | 654 |
| 642 /* struct gaim_connection *, char **, char ** */ | 655 /* struct gaim_connection *, char **, char ** */ |
| 643 case event_im_recv: | 656 case event_im_recv: |
| 644 { | 657 { |
| 645 void (*function)(struct gaim_connection *, char **, char **, | 658 void (*function)(struct gaim_connection *, char **, char **, |
| 646 void *) = g->function; | 659 void *) = g->function; |
| 647 (*function)(arg1, arg2, arg3, g->data); | 660 (*function)(arg1, arg2, arg3, g->data); |
| 648 } | 661 } |
| 649 break; | 662 break; |
| 650 | 663 |
| 651 /* struct gaim_connection *, char *, char ** */ | 664 /* struct gaim_connection *, char *, char ** */ |
| 652 case event_im_send: | 665 case event_im_send: |
| 653 case event_chat_send: | 666 case event_chat_send: |
| 654 { | 667 { |
| 655 void (*function)(struct gaim_connection *, char *, char **, | 668 void (*function)(struct gaim_connection *, char *, char **, |
| 656 void *) = g->function; | 669 void *) = g->function; |
| 657 (*function)(arg1, arg2, arg3, g->data); | 670 (*function)(arg1, arg2, arg3, g->data); |
| 658 } | 671 } |
| 659 break; | 672 break; |
| 660 | 673 |
| 661 /* struct gaim_connection *, char * */ | 674 /* struct gaim_connection *, char * */ |
| 662 case event_chat_join: | 675 case event_chat_join: |
| 663 case event_chat_leave: | 676 case event_chat_leave: |
| 664 case event_buddy_signon: | 677 case event_buddy_signon: |
| 665 case event_buddy_signoff: | 678 case event_buddy_signoff: |
| 666 case event_buddy_away: | 679 case event_buddy_away: |
| 667 case event_buddy_back: | 680 case event_buddy_back: |
| 668 case event_buddy_idle: | 681 case event_buddy_idle: |
| 669 case event_buddy_unidle: | 682 case event_buddy_unidle: |
| 670 { | 683 { |
| 671 void (*function)(struct gaim_connection *, char *, void *) = | 684 void (*function)(struct gaim_connection *, char *, void *) = |
| 672 g->function; | 685 g->function; |
| 673 (*function)(arg1, arg2, g->data); | 686 (*function)(arg1, arg2, g->data); |
| 674 } | 687 } |
| 675 break; | 688 break; |
| 676 | 689 |
| 677 /* char * */ | 690 /* char * */ |
| 678 case event_new_conversation: | 691 case event_new_conversation: |
| 679 { | 692 { |
| 680 void (*function)(char *, void *) = g->function; | 693 void (*function)(char *, void *) = g->function; |
| 681 (*function)(arg1, g->data); | 694 (*function)(arg1, g->data); |
| 682 } | 695 } |
| 683 break; | 696 break; |
| 684 | 697 |
| 685 /* struct gaim_connection *, char *, char *, char * */ | 698 /* struct gaim_connection *, char *, char *, char * */ |
| 686 case event_chat_invited: | 699 case event_chat_invited: |
| 687 case event_chat_recv: | 700 case event_chat_recv: |
| 688 { | 701 { |
| 689 void (*function)(struct gaim_connection *, char *, char *, | 702 void (*function)(struct gaim_connection *, char *, char *, |
| 690 char *, void *) = g->function; | 703 char *, void *) = g->function; |
| 691 (*function)(arg1, arg2, arg3, arg4, g->data); | 704 (*function)(arg1, arg2, arg3, arg4, g->data); |
| 692 } | 705 } |
| 693 break; | 706 break; |
| 694 | 707 |
| 695 /* struct gaim_connection *, char *, char * */ | 708 /* struct gaim_connection *, char *, char * */ |
| 696 case event_chat_buddy_join: | 709 case event_chat_buddy_join: |
| 697 case event_chat_buddy_leave: | 710 case event_chat_buddy_leave: |
| 698 { | 711 { |
| 699 void (*function)(struct gaim_connection *, char *, char *, | 712 void (*function)(struct gaim_connection *, char *, char *, |
| 700 void *) = g->function; | 713 void *) = g->function; |
| 701 (*function)(arg1, arg2, arg3, g->data); | 714 (*function)(arg1, arg2, arg3, g->data); |
| 702 } | 715 } |
| 703 break; | 716 break; |
| 704 | 717 |
| 705 /* char *, int */ | 718 /* char *, int */ |
| 706 case event_warned: | 719 case event_warned: |
| 707 { | 720 { |
| 708 void (*function)(char *, int, void *) = g->function; | 721 void (*function)(char *, int, void *) = g->function; |
| 709 (*function)(arg1, (int)arg2, g->data); | 722 (*function)(arg1, (int)arg2, g->data); |
| 710 } | 723 } |
| 711 break; | 724 break; |
| 712 | 725 |
| 713 /* int */ | 726 /* int */ |
| 714 case event_error: | 727 case event_error: |
| 715 { | 728 { |
| 716 void (*function)(int, void *) = g->function; | 729 void (*function)(int, void *) = g->function; |
| 717 (*function)((int)arg1, g->data); | 730 (*function)((int)arg1, g->data); |
| 718 } | 731 } |
| 726 c = c->next; | 739 c = c->next; |
| 727 } | 740 } |
| 728 #endif /* GAIM_PLUGINS */ | 741 #endif /* GAIM_PLUGINS */ |
| 729 #ifdef USE_PERL | 742 #ifdef USE_PERL |
| 730 switch (event) { | 743 switch (event) { |
| 731 case event_signon: | 744 case event_signon: |
| 732 g_snprintf(buf, sizeof buf, "\"%s\"", ((struct gaim_connection *)arg1)->username); | 745 g_snprintf(buf, sizeof buf, "\"%s\"", ((struct gaim_connection *)arg1)->username); |
| 733 break; | 746 break; |
| 734 case event_signoff: | 747 case event_signoff: |
| 735 g_snprintf(buf, sizeof buf, "\"%s\"", ((struct gaim_connection *)arg1)->username); | 748 g_snprintf(buf, sizeof buf, "\"%s\"", ((struct gaim_connection *)arg1)->username); |
| 736 break; | 749 break; |
| 737 case event_away: | 750 case event_away: |
| 738 buf[0] = 0; | 751 buf[0] = 0; |
| 739 break; | 752 break; |
| 740 case event_back: | 753 case event_back: |
| 741 buf[0] = 0; | 754 buf[0] = 0; |
| 742 break; | 755 break; |
| 743 case event_im_recv: | 756 case event_im_recv: |
| 744 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", ((struct gaim_connection *)arg1)->username, *(char **)arg2, *(char **)arg3); | 757 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", |
| 745 break; | 758 ((struct gaim_connection *)arg1)->username, *(char **)arg2, *(char **)arg3); |
| 746 case event_im_send: | 759 break; |
| 747 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", ((struct gaim_connection *)arg1)->username, (char *)arg2, *(char **)arg3); | 760 case event_im_send: |
| 748 break; | 761 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", |
| 749 case event_buddy_signon: | 762 ((struct gaim_connection *)arg1)->username, (char *)arg2, *(char **)arg3); |
| 750 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 763 break; |
| 751 break; | 764 case event_buddy_signon: |
| 752 case event_buddy_signoff: | 765 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 753 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 766 break; |
| 754 break; | 767 case event_buddy_signoff: |
| 755 case event_buddy_away: | 768 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 756 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 769 break; |
| 757 break; | 770 case event_buddy_away: |
| 758 case event_buddy_back: | 771 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 759 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 772 break; |
| 760 break; | 773 case event_buddy_back: |
| 761 case event_buddy_idle: | 774 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 762 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 775 break; |
| 763 break; | 776 case event_buddy_idle: |
| 764 case event_buddy_unidle: | 777 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 765 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 778 break; |
| 766 break; | 779 case event_buddy_unidle: |
| 767 case event_blist_update: | 780 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 768 buf[0] = 0; | 781 break; |
| 769 break; | 782 case event_blist_update: |
| 770 case event_chat_invited: | 783 buf[0] = 0; |
| 771 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", (char *)arg2, (char *)arg3, (char *)arg4); | 784 break; |
| 772 break; | 785 case event_chat_invited: |
| 773 case event_chat_join: | 786 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", (char *)arg2, (char *)arg3, |
| 774 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 787 (char *)arg4); |
| 775 break; | 788 break; |
| 776 case event_chat_leave: | 789 case event_chat_join: |
| 777 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); | 790 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 778 break; | 791 break; |
| 779 case event_chat_buddy_join: | 792 case event_chat_leave: |
| 780 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\"", (char *)arg2, (char *)arg3); | 793 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg2); |
| 781 break; | 794 break; |
| 782 case event_chat_buddy_leave: | 795 case event_chat_buddy_join: |
| 783 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\"", (char *)arg2, (char *)arg3); | 796 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\"", (char *)arg2, (char *)arg3); |
| 784 break; | 797 break; |
| 785 case event_chat_recv: | 798 case event_chat_buddy_leave: |
| 786 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", (char *)arg2, (char *)arg3, (char *)arg4); | 799 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\"", (char *)arg2, (char *)arg3); |
| 787 break; | 800 break; |
| 788 case event_chat_send: | 801 case event_chat_recv: |
| 789 g_snprintf(buf, sizeof buf, "\"%s\" %s", (char *)arg2, *(char **)arg3); | 802 g_snprintf(buf, sizeof buf, "\"%s\" \"%s\" %s", (char *)arg2, (char *)arg3, |
| 790 break; | 803 (char *)arg4); |
| 791 case event_warned: | 804 break; |
| 792 g_snprintf(buf, sizeof buf, "\"%s\" %d", (char *)arg1, (int)arg2); | 805 case event_chat_send: |
| 793 break; | 806 g_snprintf(buf, sizeof buf, "\"%s\" %s", (char *)arg2, *(char **)arg3); |
| 794 case event_error: | 807 break; |
| 795 g_snprintf(buf, sizeof buf, "%d", (int)arg1); | 808 case event_warned: |
| 796 break; | 809 g_snprintf(buf, sizeof buf, "\"%s\" %d", (char *)arg1, (int)arg2); |
| 797 case event_quit: | 810 break; |
| 798 buf[0] = 0; | 811 case event_error: |
| 799 break; | 812 g_snprintf(buf, sizeof buf, "%d", (int)arg1); |
| 800 case event_new_conversation: | 813 break; |
| 801 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg1); | 814 case event_quit: |
| 802 break; | 815 buf[0] = 0; |
| 803 default: | 816 break; |
| 804 break; | 817 case event_new_conversation: |
| 818 g_snprintf(buf, sizeof buf, "\"%s\"", (char *)arg1); | |
| 819 break; | |
| 820 default: | |
| 821 break; | |
| 805 } | 822 } |
| 806 tmp = event_name(event); | 823 tmp = event_name(event); |
| 807 debug_printf("%s: %s\n", tmp, buf); | 824 debug_printf("%s: %s\n", tmp, buf); |
| 808 return perl_event(tmp, buf); | 825 return perl_event(tmp, buf); |
| 809 #else | 826 #else |
