Mercurial > pidgin.yaz
comparison src/buddy_chat.c @ 1053:864f4aae0b60
[gaim-migrate @ 1063]
i am so smart
i am so smart
s-m-r-t
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Fri, 03 Nov 2000 01:33:28 +0000 |
parents | 38452403563b |
children | c73736fa0b7c |
comparison
equal
deleted
inserted
replaced
1052:25f121faa75e | 1053:864f4aae0b60 |
---|---|
396 | 396 |
397 } | 397 } |
398 | 398 |
399 | 399 |
400 | 400 |
401 void update_chat_list(struct conversation *b) | |
402 { | |
403 GtkWidget *list_item; | |
404 char name[80]; | |
405 char *tmp; | |
406 GList *names = b->in_room; | |
407 | |
408 if (!b->is_chat) { | |
409 debug_print("update_chat_list: expecting chat, got IM\n"); | |
410 return; | |
411 } | |
412 | |
413 gtk_list_clear_items(GTK_LIST(b->list), 0, -1); | |
414 | |
415 | |
416 while(names) { | |
417 tmp = (char *)names->data; | |
418 if (g_list_index(b->ignored, names->data) != -1) | |
419 g_snprintf(name, sizeof(name), "X %s", tmp); | |
420 else | |
421 g_snprintf(name, sizeof(name), "%s", tmp); | |
422 | |
423 list_item = gtk_list_item_new_with_label(name); | |
424 gtk_widget_show(list_item); | |
425 gtk_object_set_user_data(GTK_OBJECT(list_item), tmp); | |
426 | |
427 gtk_list_append_items(GTK_LIST(b->list), g_list_append(NULL, list_item)); | |
428 | |
429 names = names->next; | |
430 } | |
431 | |
432 } | |
433 | |
434 | |
435 | |
436 void add_chat_buddy(struct conversation *b, char *buddy) | 401 void add_chat_buddy(struct conversation *b, char *buddy) |
437 { | 402 { |
438 char *name = g_strdup(buddy); | 403 char *name = g_strdup(buddy); |
439 char tmp[BUF_LONG]; | 404 char tmp[BUF_LONG]; |
405 GtkWidget *list_item; | |
440 | 406 |
441 plugin_event(event_chat_buddy_join, b->gc, b->name, name, 0); | 407 plugin_event(event_chat_buddy_join, b->gc, b->name, name, 0); |
442 b->in_room = g_list_append(b->in_room, name); | 408 b->in_room = g_list_append(b->in_room, name); |
443 | 409 |
444 update_chat_list(b); | 410 list_item = gtk_list_item_new_with_label(name); |
411 gtk_object_set_user_data(GTK_OBJECT(list_item), name); | |
412 gtk_list_append_items(GTK_LIST(b->list), g_list_append(NULL, list_item)); | |
413 gtk_widget_show(list_item); | |
445 | 414 |
446 if (b->makesound && (sound_options & OPT_SOUND_CHAT_JOIN)) | 415 if (b->makesound && (sound_options & OPT_SOUND_CHAT_JOIN)) |
447 play_sound(CHAT_JOIN); | 416 play_sound(CHAT_JOIN); |
448 | 417 |
449 if (display_options & OPT_DISP_CHAT_LOGON) { | 418 if (display_options & OPT_DISP_CHAT_LOGON) { |
456 | 425 |
457 | 426 |
458 void remove_chat_buddy(struct conversation *b, char *buddy) | 427 void remove_chat_buddy(struct conversation *b, char *buddy) |
459 { | 428 { |
460 GList *names = b->in_room; | 429 GList *names = b->in_room; |
430 GList *items = GTK_LIST(b->list)->children; | |
431 | |
461 char tmp[BUF_LONG]; | 432 char tmp[BUF_LONG]; |
462 | 433 |
463 plugin_event(event_chat_buddy_leave, b->gc, b->name, buddy, 0); | 434 plugin_event(event_chat_buddy_leave, b->gc, b->name, buddy, 0); |
464 | 435 |
465 while(names) { | 436 while(names) { |
466 if (!strcasecmp((char *)names->data, buddy)) { | 437 if (!strcasecmp((char *)names->data, buddy)) { |
438 char *tmp = names->data; | |
467 b->in_room = g_list_remove(b->in_room, names->data); | 439 b->in_room = g_list_remove(b->in_room, names->data); |
468 update_chat_list(b); | 440 while (items) { |
441 if (tmp == gtk_object_get_user_data(items->data)) { | |
442 gtk_list_remove_items(GTK_LIST(b->list), | |
443 g_list_append(NULL, items->data)); | |
444 break; | |
445 } | |
446 items = items->next; | |
447 } | |
448 g_free(tmp); | |
469 break; | 449 break; |
470 } | 450 } |
471 names = names->next; | 451 names = names->next; |
472 } | 452 } |
473 | 453 |
506 | 486 |
507 void ignore_callback(GtkWidget *w, struct conversation *b) | 487 void ignore_callback(GtkWidget *w, struct conversation *b) |
508 { | 488 { |
509 char *name; | 489 char *name; |
510 GList *i; | 490 GList *i; |
491 int pos; | |
492 GtkWidget *list_item; | |
493 char tmp[80]; | |
511 | 494 |
512 i = GTK_LIST(b->list)->selection; | 495 i = GTK_LIST(b->list)->selection; |
513 if (i) | 496 if (i) |
514 name = (char *)gtk_object_get_user_data(GTK_OBJECT(i->data)); | 497 name = (char *)gtk_object_get_user_data(GTK_OBJECT(i->data)); |
515 else | 498 else |
516 return; | 499 return; |
517 | 500 |
518 if (g_list_index(b->ignored, (gpointer)name) == -1) | 501 pos = gtk_list_child_position(GTK_LIST(b->list), i->data); |
502 | |
503 if (g_list_index(b->ignored, (gpointer)name) == -1) { | |
519 b->ignored = g_list_append(b->ignored, name); | 504 b->ignored = g_list_append(b->ignored, name); |
520 else | 505 g_snprintf(tmp, sizeof tmp, "X %s", name); |
506 } else { | |
521 b->ignored = g_list_remove(b->ignored, name); | 507 b->ignored = g_list_remove(b->ignored, name); |
522 | 508 g_snprintf(tmp, sizeof tmp, "%s", name); |
523 update_chat_list(b); | 509 } |
510 | |
511 list_item = gtk_list_item_new_with_label(tmp); | |
512 gtk_object_set_user_data(GTK_OBJECT(list_item), name); | |
513 gtk_list_insert_items(GTK_LIST(b->list), g_list_append(NULL, list_item), pos); | |
514 gtk_widget_destroy(i->data); | |
515 gtk_widget_show(list_item); | |
524 } | 516 } |
525 | 517 |
526 | 518 |
527 | 519 |
528 void show_new_buddy_chat(struct conversation *b) | 520 void show_new_buddy_chat(struct conversation *b) |