Mercurial > pidgin.yaz
comparison src/oscar.c @ 1072:81d19577285a
[gaim-migrate @ 1082]
got rid of a few FIXME's and implemented the option to hide (show) empty groups
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 06 Nov 2000 00:30:24 +0000 |
parents | b0b40b5faede |
children | efcacae6acdb |
comparison
equal
deleted
inserted
replaced
1071:ce12622502c5 | 1072:81d19577285a |
---|---|
690 | 690 |
691 static int accept_direct_im(gpointer w, struct ask_direct *d) { | 691 static int accept_direct_im(gpointer w, struct ask_direct *d) { |
692 struct gaim_connection *gc = d->gc; | 692 struct gaim_connection *gc = d->gc; |
693 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 693 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
694 struct direct_im *dim; | 694 struct direct_im *dim; |
695 char buf[256]; | |
695 | 696 |
696 debug_printf("Accepted DirectIM.\n"); | 697 debug_printf("Accepted DirectIM.\n"); |
697 | 698 |
698 dim = find_direct_im(od, d->sn); | 699 dim = find_direct_im(od, d->sn); |
699 if (dim) { | 700 if (dim) { |
709 cancel_direct_im(w, d); | 710 cancel_direct_im(w, d); |
710 return; | 711 return; |
711 } | 712 } |
712 | 713 |
713 if (!(dim->cnv = find_conversation(d->sn))) dim->cnv = new_conversation(d->sn); | 714 if (!(dim->cnv = find_conversation(d->sn))) dim->cnv = new_conversation(d->sn); |
715 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s established</B>"), d->sn); | |
716 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL); | |
717 | |
714 gtk_signal_connect(GTK_OBJECT(dim->cnv->window), "destroy", | 718 gtk_signal_connect(GTK_OBJECT(dim->cnv->window), "destroy", |
715 GTK_SIGNAL_FUNC(delete_direct_im), dim); | 719 GTK_SIGNAL_FUNC(delete_direct_im), dim); |
716 | 720 |
717 od->direct_ims = g_slist_append(od->direct_ims, dim); | 721 od->direct_ims = g_slist_append(od->direct_ims, dim); |
718 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, | 722 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, |
1524 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); | 1528 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); |
1525 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 1529 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1526 struct aim_directim_priv *priv; | 1530 struct aim_directim_priv *priv; |
1527 struct aim_conn_t *newconn; | 1531 struct aim_conn_t *newconn; |
1528 struct direct_im *dim; | 1532 struct direct_im *dim; |
1533 char buf[256]; | |
1529 | 1534 |
1530 va_start(ap, command); | 1535 va_start(ap, command); |
1531 newconn = va_arg(ap, struct aim_conn_t *); | 1536 newconn = va_arg(ap, struct aim_conn_t *); |
1532 va_end(ap); | 1537 va_end(ap); |
1533 | 1538 |
1542 GTK_SIGNAL_FUNC(delete_direct_im), dim); | 1547 GTK_SIGNAL_FUNC(delete_direct_im), dim); |
1543 gdk_input_remove(dim->watcher); | 1548 gdk_input_remove(dim->watcher); |
1544 dim->conn = newconn; | 1549 dim->conn = newconn; |
1545 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, | 1550 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, |
1546 oscar_callback, dim->conn); | 1551 oscar_callback, dim->conn); |
1547 /* FIXME: print to screen that this is now direct */ | 1552 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s established</B>"), priv->sn); |
1553 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL); | |
1548 | 1554 |
1549 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, | 1555 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING, |
1550 gaim_directim_incoming, 0); | 1556 gaim_directim_incoming, 0); |
1551 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT, | 1557 aim_conn_addhandler(sess, newconn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT, |
1552 gaim_directim_disconnect, 0); | 1558 gaim_directim_disconnect, 0); |
1580 struct aim_conn_t *conn; | 1586 struct aim_conn_t *conn; |
1581 char *sn; | 1587 char *sn; |
1582 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); | 1588 struct gaim_connection *gc = find_gaim_conn_by_aim_sess(sess); |
1583 struct oscar_data *od = (struct oscar_data *)gc->proto_data; | 1589 struct oscar_data *od = (struct oscar_data *)gc->proto_data; |
1584 struct direct_im *dim; | 1590 struct direct_im *dim; |
1591 char buf[256]; | |
1585 | 1592 |
1586 va_start(ap, command); | 1593 va_start(ap, command); |
1587 conn = va_arg(ap, struct aim_conn_t *); | 1594 conn = va_arg(ap, struct aim_conn_t *); |
1588 sn = va_arg(ap, char *); | 1595 sn = va_arg(ap, char *); |
1589 va_end(ap); | 1596 va_end(ap); |
1593 dim = find_direct_im(od, sn); | 1600 dim = find_direct_im(od, sn); |
1594 od->direct_ims = g_slist_remove(od->direct_ims, dim); | 1601 od->direct_ims = g_slist_remove(od->direct_ims, dim); |
1595 gdk_input_remove(dim->watcher); | 1602 gdk_input_remove(dim->watcher); |
1596 gtk_signal_disconnect_by_data(GTK_OBJECT(dim->cnv->window), dim); | 1603 gtk_signal_disconnect_by_data(GTK_OBJECT(dim->cnv->window), dim); |
1597 | 1604 |
1598 /* FIXME: need to indicate no longer direct */ | 1605 g_snprintf(buf, sizeof buf, _("<B>Direct IM with %s closed</B>"), sn); |
1606 if (dim->cnv) | |
1607 write_to_conv(dim->cnv, buf, WFLAG_SYSTEM, NULL); | |
1599 | 1608 |
1600 aim_conn_kill(sess, &conn); | 1609 aim_conn_kill(sess, &conn); |
1601 | 1610 |
1602 return 1; | 1611 return 1; |
1603 } | 1612 } |
1627 return; | 1636 return; |
1628 } | 1637 } |
1629 dim = g_new0(struct direct_im, 1); | 1638 dim = g_new0(struct direct_im, 1); |
1630 dim->gc = gc; | 1639 dim->gc = gc; |
1631 g_snprintf(dim->name, sizeof dim->name, "%s", who); | 1640 g_snprintf(dim->name, sizeof dim->name, "%s", who); |
1632 od->direct_ims = g_slist_append(od->direct_ims, dim); | |
1633 | 1641 |
1634 dim->conn = aim_directim_initiate(od->sess, od->conn, NULL, who); | 1642 dim->conn = aim_directim_initiate(od->sess, od->conn, NULL, who); |
1635 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, | 1643 if (dim->conn != NULL) { |
1636 oscar_callback, dim->conn); | 1644 od->direct_ims = g_slist_append(od->direct_ims, dim); |
1637 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE, | 1645 dim->watcher = gdk_input_add(dim->conn->fd, GDK_INPUT_READ | GDK_INPUT_EXCEPTION, |
1638 gaim_directim_initiate, 0); | 1646 oscar_callback, dim->conn); |
1647 aim_conn_addhandler(od->sess, dim->conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE, | |
1648 gaim_directim_initiate, 0); | |
1649 } else { | |
1650 do_error_dialog(_("Unable to open Direct IM"), _("Error")); | |
1651 g_free(dim); | |
1652 } | |
1639 } | 1653 } |
1640 | 1654 |
1641 static void oscar_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) { | 1655 static void oscar_action_menu(GtkWidget *menu, struct gaim_connection *gc, char *who) { |
1642 GtkWidget *button; | 1656 GtkWidget *button; |
1643 char *n = g_strdup(normalize(gc->username)); | 1657 char *n = g_strdup(normalize(gc->username)); |