comparison src/buddy.c @ 1091:3d6ab4f1fa55

[gaim-migrate @ 1101] this hopefully should fix a lot of the buddy list problems committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 13 Nov 2000 03:57:40 +0000
parents f0f5c10cce63
children a930439f29b1
comparison
equal deleted inserted replaced
1090:79cdc86ef4c6 1091:3d6ab4f1fa55
273 while (m) { 273 while (m) {
274 b = (struct buddy_show *)m->data; 274 b = (struct buddy_show *)m->data;
275 if ((g_slist_length(b->connlist) == 1) && (b->connlist->data == gc)) { 275 if ((g_slist_length(b->connlist) == 1) && (b->connlist->data == gc)) {
276 if (b->log_timer > 0) 276 if (b->log_timer > 0)
277 gtk_timeout_remove(b->log_timer); 277 gtk_timeout_remove(b->log_timer);
278 b->log_timer = -1;
278 b->connlist = g_slist_remove(b->connlist, gc); 279 b->connlist = g_slist_remove(b->connlist, gc);
279 gtk_container_remove(GTK_CONTAINER(g->tree), b->item); 280 gtk_container_remove(GTK_CONTAINER(g->tree), b->item);
280 m = g->members = g_slist_remove(g->members, b); 281 m = g->members = g_slist_remove(g->members, b);
281 if ((g->members == NULL) && (display_options & OPT_DISP_NO_MT_GRP)) { 282 if ((g->members == NULL) && (display_options & OPT_DISP_NO_MT_GRP)) {
282 shows = g_slist_remove(shows, g); 283 shows = g_slist_remove(shows, g);
324 update_keepalive(gc, FALSE); 325 update_keepalive(gc, FALSE);
325 serv_close(gc); 326 serv_close(gc);
326 327
327 if (connections) return; 328 if (connections) return;
328 329
330 {
331 GSList *s = shows;
332 struct group_show *g;
333 GSList *m;
334 struct buddy_show *b;
335 while (s) {
336 g = (struct group_show *)s->data;
337 debug_printf("group_show still exists: %s\n", g->name);
338 m = g->members;
339 while (m) {
340 b = (struct buddy_show *)m->data;
341 debug_printf("buddy_show still exists: %s\n", b->name);
342 m = g_slist_remove(m, b);
343 if (b->log_timer > 0)
344 gtk_timeout_remove(b->log_timer);
345 b->log_timer = -1;
346 gtk_container_remove(GTK_CONTAINER(g->tree), b->item);
347 g_free(b->show);
348 g_free(b->name);
349 g_free(b);
350 }
351 gtk_container_remove(GTK_CONTAINER(buddies), g->item);
352 s = g_slist_remove(s, g);
353 g_free(g->name);
354 g_free(g);
355 }
356 shows = NULL;
357 }
358
329 sprintf(debug_buff, "date: %s\n", full_date()); 359 sprintf(debug_buff, "date: %s\n", full_date());
330 debug_print(debug_buff); 360 debug_print(debug_buff);
331 destroy_all_dialogs(); 361 destroy_all_dialogs();
332 destroy_buddy(); 362 destroy_buddy();
333 #ifdef USE_APPLET 363 #ifdef USE_APPLET
496 bs->connlist = g_slist_remove(bs->connlist, gc); 526 bs->connlist = g_slist_remove(bs->connlist, gc);
497 if (!g_slist_length(bs->connlist)) { 527 if (!g_slist_length(bs->connlist)) {
498 gs->members = g_slist_remove(gs->members, bs); 528 gs->members = g_slist_remove(gs->members, bs);
499 if (bs->log_timer > 0) 529 if (bs->log_timer > 0)
500 gtk_timeout_remove(bs->log_timer); 530 gtk_timeout_remove(bs->log_timer);
531 bs->log_timer = -1;
501 gtk_container_remove(GTK_CONTAINER(gs->tree), bs->item); 532 gtk_container_remove(GTK_CONTAINER(gs->tree), bs->item);
502 g_free(bs->show); 533 g_free(bs->show);
503 g_free(bs->name); 534 g_free(bs->name);
504 g_free(bs); 535 g_free(bs);
505 if (!g_slist_length(gs->members) && 536 if (!g_slist_length(gs->members) &&
1537 1568
1538 static gint log_timeout(struct buddy_show *b) { 1569 static gint log_timeout(struct buddy_show *b) {
1539 if (!b->connlist) { 1570 if (!b->connlist) {
1540 struct group_show *g = find_gs_by_bs(b); 1571 struct group_show *g = find_gs_by_bs(b);
1541 g->members = g_slist_remove(g->members, b); 1572 g->members = g_slist_remove(g->members, b);
1542 gtk_container_remove(GTK_CONTAINER(g->tree), b->item); 1573 if (blist)
1574 gtk_container_remove(GTK_CONTAINER(g->tree), b->item);
1575 else
1576 debug_printf("log_timeout but buddy list not available\n");
1543 if ((g->members == NULL) && (display_options & OPT_DISP_NO_MT_GRP)) { 1577 if ((g->members == NULL) && (display_options & OPT_DISP_NO_MT_GRP)) {
1544 shows = g_slist_remove(shows, g); 1578 shows = g_slist_remove(shows, g);
1545 gtk_container_remove(GTK_CONTAINER(buddies), g->item); 1579 if (blist)
1580 gtk_container_remove(GTK_CONTAINER(buddies), g->item);
1546 g_free(g->name); 1581 g_free(g->name);
1547 g_free(g); 1582 g_free(g);
1548 } 1583 }
1549 g_free(b->name); 1584 g_free(b->name);
1550 g_free(b->show); 1585 g_free(b->show);
1566 if (ticker_prefs & OPT_DISP_SHOW_BUDDYTICKER) 1601 if (ticker_prefs & OPT_DISP_SHOW_BUDDYTICKER)
1567 BuddyTickerSetPixmap(b->name, pm, bm); 1602 BuddyTickerSetPixmap(b->name, pm, bm);
1568 gdk_pixmap_unref(pm); 1603 gdk_pixmap_unref(pm);
1569 gdk_bitmap_unref(bm); 1604 gdk_bitmap_unref(bm);
1570 } 1605 }
1606 gtk_timeout_remove(b->log_timer);
1571 b->log_timer = -1; 1607 b->log_timer = -1;
1572 return FALSE; 1608 return 0;
1573 } 1609 }
1574 1610
1575 static char *caps_string(gushort caps) 1611 static char *caps_string(gushort caps)
1576 { 1612 {
1577 static char buf[256], *tmp; 1613 static char buf[256], *tmp;
1725 gdk_pixmap_unref(pm); 1761 gdk_pixmap_unref(pm);
1726 gdk_bitmap_unref(bm); 1762 gdk_bitmap_unref(bm);
1727 b->present = 2; 1763 b->present = 2;
1728 if (bs->log_timer > 0) 1764 if (bs->log_timer > 0)
1729 gtk_timeout_remove(bs->log_timer); 1765 gtk_timeout_remove(bs->log_timer);
1766 bs->log_timer = -1;
1730 if (!g_slist_find(bs->connlist, gc)) 1767 if (!g_slist_find(bs->connlist, gc))
1731 bs->connlist = g_slist_append(bs->connlist, gc); 1768 bs->connlist = g_slist_append(bs->connlist, gc);
1732 else 1769 else
1733 debug_printf("already got signon for %s from %s\n", b->name, gc->username); 1770 debug_printf("already got signon for %s from %s\n", b->name, gc->username);
1734 update_num_group(gs); 1771 update_num_group(gs);