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 |