Mercurial > pidgin
comparison src/module.c @ 3517:6b0cb60162f4
[gaim-migrate @ 3590]
Rob McQueen added a mute feature to his nice little docklet. I added a
queuing feature. Configure the docklet in the plugins dialog to queue
unread messages, and when you receive a message the docklet will eat it up
and show a little message pending icon. Click on it, and read your message.
ICQ people will like it.
I also made plugin_event use a va_list.
I bet this breaks perl.
committer: Tailor Script <tailor@pidgin.im>
| author | Sean Egan <seanegan@gmail.com> |
|---|---|
| date | Mon, 16 Sep 2002 08:35:24 +0000 |
| parents | e23909729192 |
| children | cd938f18f3f8 |
comparison
equal
deleted
inserted
replaced
| 3516:db00eb77997d | 3517:6b0cb60162f4 |
|---|---|
| 374 break; | 374 break; |
| 375 } | 375 } |
| 376 return buf; | 376 return buf; |
| 377 } | 377 } |
| 378 | 378 |
| 379 static void debug_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) | 379 int plugin_event(enum gaim_event event, ...) |
| 380 { | |
| 381 if (!opt_debug && !(misc_options & OPT_MISC_DEBUG)) | |
| 382 return; | |
| 383 | |
| 384 switch (event) { | |
| 385 case event_blist_update: | |
| 386 /* this happens *really* often */ | |
| 387 if (opt_debug) { | |
| 388 debug_printf("%s\n", event_name(event)); | |
| 389 } | |
| 390 break; | |
| 391 case event_quit: | |
| 392 debug_printf("%s\n", event_name(event)); | |
| 393 break; | |
| 394 case event_signon: | |
| 395 case event_signoff: | |
| 396 debug_printf("%s: %s\n", event_name(event), | |
| 397 ((struct gaim_connection *)arg1)->username); | |
| 398 break; | |
| 399 case event_new_conversation: | |
| 400 debug_printf("%s: %s\n", event_name(event), (char *)arg1); | |
| 401 break; | |
| 402 case event_error: | |
| 403 debug_printf("%s: %d\n", event_name(event), (int)arg1); | |
| 404 break; | |
| 405 case event_buddy_signon: | |
| 406 case event_buddy_signoff: | |
| 407 case event_buddy_away: | |
| 408 case event_buddy_back: | |
| 409 case event_buddy_idle: | |
| 410 case event_buddy_unidle: | |
| 411 case event_set_info: | |
| 412 case event_got_typing: | |
| 413 debug_printf("%s: %s %s\n", event_name(event), | |
| 414 ((struct gaim_connection *)arg1)->username, (char *)arg2); | |
| 415 break; | |
| 416 case event_chat_leave: | |
| 417 debug_printf("%s: %s %d\n", event_name(event), | |
| 418 ((struct gaim_connection *)arg1)->username, (int)arg2); | |
| 419 break; | |
| 420 case event_im_send: | |
| 421 case event_im_displayed_sent: | |
| 422 debug_printf("%s: %s %s %s\n", event_name(event), | |
| 423 ((struct gaim_connection *)arg1)->username, | |
| 424 (char *)arg2, *(char **)arg3 ? *(char **)arg3 : ""); | |
| 425 break; | |
| 426 case event_chat_join: | |
| 427 case event_chat_buddy_join: | |
| 428 case event_chat_buddy_leave: | |
| 429 debug_printf("%s: %s %d %s\n", event_name(event), | |
| 430 ((struct gaim_connection *)arg1)->username, | |
| 431 (int)arg2, (char *)arg3); | |
| 432 break; | |
| 433 case event_chat_send: | |
| 434 debug_printf("%s: %s %d %s\n", event_name(event), | |
| 435 ((struct gaim_connection *)arg1)->username, | |
| 436 (int)arg2, *(char **)arg3 ? *(char **)arg3 : ""); | |
| 437 break; | |
| 438 case event_away: | |
| 439 debug_printf("%s: %s %s %s\n", event_name(event), | |
| 440 ((struct gaim_connection *)arg1)->username, | |
| 441 (char *)arg2, (char *)arg3 ? (char *)arg3 : ""); | |
| 442 break; | |
| 443 case event_warned: | |
| 444 debug_printf("%s: %s %s %d\n", event_name(event), | |
| 445 ((struct gaim_connection *)arg1)->username, | |
| 446 (char *)arg2 ? (char *)arg2 : "", (int)arg3); | |
| 447 break; | |
| 448 case event_im_recv: | |
| 449 debug_printf("%s: %s %s %s\n", event_name(event), | |
| 450 ((struct gaim_connection *)arg1)->username, | |
| 451 *(char **)arg2 ? *(char **)arg2 : "", | |
| 452 *(char **)arg3 ? *(char **)arg3 : ""); | |
| 453 break; | |
| 454 case event_im_displayed_rcvd: | |
| 455 debug_printf("%s: %s %s %s\n", event_name(event), | |
| 456 ((struct gaim_connection *)arg1)->username, | |
| 457 (char *)arg2 ? (char *)arg2 : "", | |
| 458 (char *)arg3 ? (char *)arg3 : ""); | |
| 459 break; | |
| 460 case event_chat_recv: | |
| 461 debug_printf("%s: %s %d %s\n", event_name(event), | |
| 462 ((struct gaim_connection *)arg1)->username, | |
| 463 (int)arg2, | |
| 464 *(char **)arg3 ? *(char **)arg3 : "", | |
| 465 *(char **)arg4 ? *(char **)arg4 : ""); | |
| 466 break; | |
| 467 case event_chat_send_invite: | |
| 468 debug_printf("%s: %s %d %s %s\n", event_name(event), | |
| 469 ((struct gaim_connection *)arg1)->username, | |
| 470 (int)arg2, (char *)arg3, | |
| 471 *(char **)arg4 ? *(char **)arg4 : ""); | |
| 472 break; | |
| 473 case event_chat_invited: | |
| 474 debug_printf("%s: %s %s %s %s\n", event_name(event), | |
| 475 ((struct gaim_connection *)arg1)->username, | |
| 476 (char *)arg2, (char *)arg3, | |
| 477 (char *)arg4 ? (char *)arg4 : ""); | |
| 478 break; | |
| 479 case event_del_conversation: | |
| 480 debug_printf("%s: %s\n", event_name(event), (char *)arg1); | |
| 481 break; | |
| 482 case event_connecting: | |
| 483 debug_printf("%s: %s\n", event_name(event), ((struct aim_user *)arg1)->username); | |
| 484 break; | |
| 485 default: | |
| 486 debug_printf("%s: um, right. yeah.\n", event_name(event)); | |
| 487 break; | |
| 488 } | |
| 489 } | |
| 490 | |
| 491 int plugin_event(enum gaim_event event, void *arg1, void *arg2, void *arg3, void *arg4) | |
| 492 { | 380 { |
| 493 #ifdef GAIM_PLUGINS | 381 #ifdef GAIM_PLUGINS |
| 494 GList *c = callbacks; | 382 GList *c = callbacks; |
| 495 struct gaim_callback *g; | 383 struct gaim_callback *g; |
| 384 va_list arrg; | |
| 385 void *arg1 = NULL, | |
| 386 *arg2 = NULL, | |
| 387 *arg3 = NULL, | |
| 388 *arg4 = NULL, | |
| 389 *arg5 = NULL; | |
| 496 #endif | 390 #endif |
| 497 | 391 |
| 498 debug_event(event, arg1, arg2, arg3, arg4); | 392 debug_printf("%s\n", event_name(event)); |
| 499 | 393 |
| 500 #ifdef GAIM_PLUGINS | 394 #ifdef GAIM_PLUGINS |
| 501 while (c) { | 395 while (c) { |
| 502 void (*zero)(void *); | 396 void (*cbfunc)(void *, ...); |
| 503 void (*one)(void *, void *); | 397 |
| 504 void (*two)(void *, void *, void *); | |
| 505 void (*three)(void *, void *, void *, void *); | |
| 506 void (*four)(void *, void *, void *, void *, void *); | |
| 507 | |
| 508 g = (struct gaim_callback *)c->data; | 398 g = (struct gaim_callback *)c->data; |
| 509 if (g->event == event && g->function != NULL) { | 399 if (g->event == event && g->function != NULL) { |
| 400 cbfunc=g->function; | |
| 401 va_start(arrg, event); | |
| 510 switch (event) { | 402 switch (event) { |
| 511 | 403 |
| 512 /* no args */ | 404 /* no args */ |
| 513 case event_blist_update: | 405 case event_blist_update: |
| 514 case event_quit: | 406 case event_quit: |
| 515 zero = g->function; | 407 cbfunc(g->data); |
| 516 zero(g->data); | |
| 517 break; | 408 break; |
| 518 | 409 |
| 519 /* one arg */ | 410 /* one arg */ |
| 520 case event_signon: | 411 case event_signon: |
| 521 case event_signoff: | 412 case event_signoff: |
| 522 case event_new_conversation: | 413 case event_new_conversation: |
| 523 case event_del_conversation: | 414 case event_del_conversation: |
| 524 case event_error: | 415 case event_error: |
| 525 case event_connecting: | 416 case event_connecting: |
| 526 one = g->function; | 417 arg1 = va_arg(arrg, void *); |
| 527 one(arg1, g->data); | 418 cbfunc(arg1, g->data); |
| 528 break; | 419 break; |
| 529 | 420 |
| 530 /* two args */ | 421 /* two args */ |
| 531 case event_buddy_signon: | 422 case event_buddy_signon: |
| 532 case event_buddy_signoff: | 423 case event_buddy_signoff: |
| 533 case event_buddy_away: | 424 case event_buddy_away: |
| 534 case event_buddy_back: | 425 case event_buddy_back: |
| 535 case event_buddy_idle: | 426 case event_buddy_idle: |
| 536 case event_buddy_unidle: | 427 case event_buddy_unidle: |
| 537 case event_chat_leave: | |
| 538 case event_set_info: | 428 case event_set_info: |
| 539 case event_draw_menu: | 429 case event_draw_menu: |
| 540 case event_got_typing: | 430 case event_got_typing: |
| 541 two = g->function; | 431 arg1 = va_arg(arrg, void *); |
| 542 two(arg1, arg2, g->data); | 432 arg2 = va_arg(arrg, void *); |
| 543 break; | 433 cbfunc(arg1, arg2, g->data); |
| 544 | 434 break; |
| 435 case event_chat_leave: | |
| 436 { | |
| 437 int id; | |
| 438 arg1 = va_arg(arrg, void*); | |
| 439 id = va_arg(arrg, int); | |
| 440 cbfunc(arg1, id, g->data); | |
| 441 } | |
| 442 break; | |
| 545 /* three args */ | 443 /* three args */ |
| 546 case event_im_send: | 444 case event_im_send: |
| 547 case event_im_displayed_sent: | 445 case event_im_displayed_sent: |
| 548 case event_chat_join: | 446 case event_away: |
| 447 arg1 = va_arg(arrg, void *); | |
| 448 arg2 = va_arg(arrg, void *); | |
| 449 arg3 = va_arg(arrg, void *); | |
| 450 cbfunc(arg1, arg2, arg3, g->data); | |
| 451 break; | |
| 549 case event_chat_buddy_join: | 452 case event_chat_buddy_join: |
| 550 case event_chat_buddy_leave: | 453 case event_chat_buddy_leave: |
| 551 case event_chat_send: | 454 case event_chat_send: |
| 552 case event_away: | 455 case event_chat_join: |
| 553 case event_back: | 456 { |
| 457 int id; | |
| 458 arg1 = va_arg(arrg, void*); | |
| 459 id = va_arg(arrg, int); | |
| 460 arg3 = va_arg(arrg, void*); | |
| 461 cbfunc(arg1, id, arg3, g->data); | |
| 462 } | |
| 463 break; | |
| 554 case event_warned: | 464 case event_warned: |
| 555 three = g->function; | 465 { |
| 556 three(arg1, arg2, arg3, g->data); | 466 int id; |
| 557 break; | 467 arg1 = va_arg(arrg, void*); |
| 558 | 468 arg2 = va_arg(arrg, void*); |
| 469 id = va_arg(arrg, int); | |
| 470 cbfunc(arg1, arg2, id, g->data); | |
| 471 } | |
| 472 break; | |
| 559 /* four args */ | 473 /* four args */ |
| 560 case event_im_recv: | 474 case event_im_recv: |
| 475 case event_chat_invited: | |
| 476 arg1 = va_arg(arrg, void *); | |
| 477 arg2 = va_arg(arrg, void *); | |
| 478 arg3 = va_arg(arrg, void *); | |
| 479 arg4 = va_arg(arrg, void *); | |
| 480 cbfunc(arg1, arg2, arg3, arg4, g->data); | |
| 481 break; | |
| 561 case event_chat_recv: | 482 case event_chat_recv: |
| 483 case event_chat_send_invite: | |
| 484 { | |
| 485 int id; | |
| 486 arg1 = va_arg(arrg, void *); | |
| 487 id = va_arg(arrg, int); | |
| 488 | |
| 489 arg3 = va_arg(arrg, void *); | |
| 490 arg4 = va_arg(arrg, void *); | |
| 491 cbfunc(arg1, id, arg3, arg4, g->data); | |
| 492 } | |
| 493 break; | |
| 494 /* five args */ | |
| 562 case event_im_displayed_rcvd: | 495 case event_im_displayed_rcvd: |
| 563 case event_chat_send_invite: | 496 { |
| 564 case event_chat_invited: | 497 time_t time; |
| 565 four = g->function; | 498 arg1 = va_arg(arrg, void *); |
| 566 four(arg1, arg2, arg3, arg4, g->data); | 499 arg2 = va_arg(arrg, void *); |
| 567 break; | 500 arg3 = va_arg(arrg, void *); |
| 568 | 501 arg4 = va_arg(arrg, void *); |
| 569 default: | 502 time = va_arg(arrg, time_t); |
| 503 cbfunc(arg1, arg2, arg3, arg4, time, g->data); | |
| 504 } | |
| 505 break; | |
| 506 default: | |
| 570 debug_printf("unknown event %d\n", event); | 507 debug_printf("unknown event %d\n", event); |
| 571 break; | 508 break; |
| 572 } | 509 } |
| 510 va_end(arrg); | |
| 573 } | 511 } |
| 574 c = c->next; | 512 c = c->next; |
| 575 } | 513 } |
| 576 #endif /* GAIM_PLUGINS */ | 514 #endif /* GAIM_PLUGINS */ |
| 577 #ifdef USE_PERL | 515 #ifdef USE_PERL |
| 578 return perl_event(event, arg1, arg2, arg3, arg4); | 516 va_start(arrg, event); |
| 517 arg1 = va_arg(arrg, void *); | |
| 518 arg2 = va_arg(arrg, void *); | |
| 519 arg3 = va_arg(arrg, void *); | |
| 520 arg4 = va_arg(arrg, void *); | |
| 521 arg5 = va_arg(arrg, void *); | |
| 522 return perl_event(event, arg1, arg2, arg3, arg4, arg5); | |
| 579 #else | 523 #else |
| 580 return 0; | 524 return 0; |
| 581 #endif | 525 #endif |
| 582 } | 526 } |
| 583 | 527 |
