Mercurial > pidgin
diff src/buddy_chat.c @ 964:2cd7b73e2c9a
[gaim-migrate @ 974]
damn i'm smooth. chat is working now. :)
committer: Tailor Script <tailor@pidgin.im>
| author | Eric Warmenhoven <eric@warmenhoven.org> |
|---|---|
| date | Tue, 10 Oct 2000 10:04:59 +0000 |
| parents | fa681641643d |
| children | 91b7377e7b45 |
line wrap: on
line diff
--- a/src/buddy_chat.c Tue Oct 10 09:14:26 2000 +0000 +++ b/src/buddy_chat.c Tue Oct 10 10:04:59 2000 +0000 @@ -38,6 +38,7 @@ #include "pixmaps/close.xpm" static GtkWidget *joinchat; +static struct gaim_connection *joinchatgc; static GtkWidget *entry; static GtkWidget *invite; static GtkWidget *inviteentry; @@ -60,25 +61,6 @@ } -struct conversation *find_chat(char *name) -{ - char cuser[64]; - struct conversation *c = NULL; - GList *cnv = buddy_chats; - - strcpy(cuser, normalize(name)); - - while (cnv) { - c = (struct conversation *)cnv->data; - if (!strcasecmp(cuser, normalize(c->name))) { - return c; - } - cnv = cnv->next; - } - return NULL; -} - - static void do_join_chat() { char *group; @@ -86,12 +68,47 @@ group = gtk_entry_get_text(GTK_ENTRY(entry)); if (joinchat) { - serv_join_chat(community + 4, group); + serv_join_chat(joinchatgc, community + 4, group); gtk_widget_destroy(joinchat); } joinchat=NULL; } +static void joinchat_choose(GtkWidget *w, struct gaim_connection *g) +{ + joinchatgc = g; +} + + +static void create_joinchat_menu(GtkWidget *box) +{ + GtkWidget *optmenu; + GtkWidget *menu; + GtkWidget *opt; + GSList *c = connections; + struct gaim_connection *g; + + optmenu = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(box), optmenu, FALSE, FALSE, 5); + gtk_widget_show(optmenu); + + menu = gtk_menu_new(); + + while (c) { + g = (struct gaim_connection *)c->data; + opt = gtk_menu_item_new_with_label(g->username); + gtk_object_set_user_data(GTK_OBJECT(opt), g); + gtk_signal_connect(GTK_OBJECT(opt), "activate", GTK_SIGNAL_FUNC(joinchat_choose), g); + gtk_menu_append(GTK_MENU(menu), opt); + gtk_widget_show(opt); + c = c->next; + } + + gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0); + + joinchatgc = connections->data; +} void join_chat() @@ -112,24 +129,48 @@ "Gaim"); gtk_window_set_policy(GTK_WINDOW(joinchat), FALSE, FALSE, TRUE); gtk_widget_realize(joinchat); - bbox = gtk_hbox_new(TRUE, 10); - topbox = gtk_hbox_new(FALSE, 5); - vbox = gtk_vbox_new(FALSE, 5); - entry = gtk_entry_new(); - hbox = gtk_hbox_new(TRUE, 10); + gtk_signal_connect(GTK_OBJECT(joinchat), "delete_event", + GTK_SIGNAL_FUNC(destroy_join_chat), joinchat); + gtk_window_set_title(GTK_WINDOW(joinchat), _("Join Chat")); + gtk_container_set_border_width(GTK_CONTAINER(joinchat), 5); + aol_icon(joinchat->window); frame = gtk_frame_new(_("Buddy Chat")); + gtk_container_add(GTK_CONTAINER(joinchat), frame); + gtk_widget_show(frame); - join = picture_button(joinchat, _("Join"), join_xpm); - cancel = picture_button(joinchat, _("Cancel"), cancel_xpm); + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(frame), vbox); + gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(bbox), join, FALSE, FALSE, 5); - gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); + topbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); + gtk_widget_show(topbox); label = gtk_label_new(_("Join what group:")); + gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(topbox), label, FALSE, FALSE, 5); + + entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(topbox), entry, FALSE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(entry), "activate", + GTK_SIGNAL_FUNC(do_join_chat), joinchat); + gtk_window_set_focus(GTK_WINDOW(joinchat), entry); + gtk_widget_show(entry); + + hbox = gtk_hbox_new(TRUE, 10); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); + gtk_widget_show(hbox); + + label = gtk_label_new(_("Join Chat As:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_widget_show(label); + + create_joinchat_menu(hbox); + + hbox = gtk_hbox_new(TRUE, 10); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); + gtk_widget_show(hbox); opt = gtk_radio_button_new_with_label(NULL, _("AIM Private Chats")); @@ -144,38 +185,19 @@ gtk_box_pack_start(GTK_BOX(hbox), opt, FALSE, FALSE, 0); gtk_widget_show(opt); - /* And the boxes in the box */ - gtk_box_pack_start(GTK_BOX(vbox), topbox, TRUE, TRUE, 5); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 5); + bbox = gtk_hbox_new(TRUE, 10); gtk_box_pack_start(GTK_BOX(vbox), bbox, TRUE, TRUE, 5); - - /* Handle closes right */ - gtk_signal_connect(GTK_OBJECT(joinchat), "delete_event", - GTK_SIGNAL_FUNC(destroy_join_chat), joinchat); + gtk_widget_show(bbox); - gtk_signal_connect(GTK_OBJECT(cancel), "clicked", - GTK_SIGNAL_FUNC(destroy_join_chat), joinchat); + join = picture_button(joinchat, _("Join"), join_xpm); + gtk_box_pack_start(GTK_BOX(bbox), join, FALSE, FALSE, 5); gtk_signal_connect(GTK_OBJECT(join), "clicked", GTK_SIGNAL_FUNC(do_join_chat), joinchat); - gtk_signal_connect(GTK_OBJECT(entry), "activate", - GTK_SIGNAL_FUNC(do_join_chat), joinchat); - /* Finish up */ - gtk_widget_show(join); - gtk_widget_show(cancel); - gtk_widget_show(entry); - gtk_widget_show(topbox); - gtk_widget_show(hbox); - gtk_widget_show(bbox); - gtk_widget_show(vbox); - gtk_widget_show(frame); - gtk_container_add(GTK_CONTAINER(frame), vbox); - gtk_window_set_title(GTK_WINDOW(joinchat), _("Join Chat")); - gtk_window_set_focus(GTK_WINDOW(joinchat), entry); - gtk_container_add(GTK_CONTAINER(joinchat), frame); - gtk_container_set_border_width(GTK_CONTAINER(joinchat), 5); - gtk_widget_realize(joinchat); - aol_icon(joinchat->window); + cancel = picture_button(joinchat, _("Cancel"), cancel_xpm); + gtk_box_pack_end(GTK_BOX(bbox), cancel, FALSE, FALSE, 5); + gtk_signal_connect(GTK_OBJECT(cancel), "clicked", + GTK_SIGNAL_FUNC(destroy_join_chat), joinchat); } gtk_widget_show(joinchat); } @@ -195,7 +217,7 @@ mess = gtk_entry_get_text(GTK_ENTRY(invitemess)); if (invite) { - serv_chat_invite(b->id, mess, buddy); + serv_chat_invite(b->gc, b->id, mess, buddy); gtk_widget_destroy(invite); } invite=NULL; @@ -359,7 +381,7 @@ gtk_editable_delete_text(GTK_EDITABLE(b->entry), 0, -1); escape_text(buf); /* it's ok to leave this here because oscar can't whisper */ - serv_chat_whisper(b->id, who, buf); + serv_chat_whisper(b->gc, b->id, who, buf); g_snprintf(buf2, sizeof(buf2), "%s->%s", b->gc->username, who); @@ -705,7 +727,8 @@ void handle_click_chat(GtkWidget *widget, GdkEventButton *event, struct chat_room *cr) { if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { - serv_join_chat(cr->exchange, cr->name); + /* FIXME */ + serv_join_chat(connections->data, cr->exchange, cr->name); } } @@ -779,22 +802,30 @@ void update_chat_button_pix() { - GList *bcs = buddy_chats; - struct conversation *c; - int opt = 1; + GSList *C = connections; + struct gaim_connection *g; + + while (C) { + GSList *bcs; + struct conversation *c; + int opt = 1; + g = (struct gaim_connection *)C->data; + bcs = g->buddy_chats; - while (bcs) { - c = (struct conversation *)bcs->data; - c->send = change_text(c->window, _("Send"), c->send, tmp_send_xpm, opt); - c->whisper = change_text(c->window, _("Whisper"), c->whisper, tb_forward_xpm, opt); - c->invite = change_text(c->window, _("Invite"), c->invite, join_xpm, opt); - c->close = change_text(c->window, _("Close"), c->close, cancel_xpm, opt); - gtk_object_set_user_data(GTK_OBJECT(c->close), c); - gtk_signal_connect(GTK_OBJECT(c->close), "clicked", GTK_SIGNAL_FUNC(close_callback),c); - gtk_signal_connect(GTK_OBJECT(c->send), "clicked", GTK_SIGNAL_FUNC(send_callback),c); - gtk_signal_connect(GTK_OBJECT(c->invite), "clicked", GTK_SIGNAL_FUNC(invite_callback),c); - gtk_signal_connect(GTK_OBJECT(c->whisper), "clicked", GTK_SIGNAL_FUNC(whisper_callback),c); - bcs = bcs->next; + while (bcs) { + c = (struct conversation *)bcs->data; + c->send = change_text(c->window, _("Send"), c->send, tmp_send_xpm, opt); + c->whisper = change_text(c->window, _("Whisper"), c->whisper, tb_forward_xpm, opt); + c->invite = change_text(c->window, _("Invite"), c->invite, join_xpm, opt); + c->close = change_text(c->window, _("Close"), c->close, cancel_xpm, opt); + gtk_object_set_user_data(GTK_OBJECT(c->close), c); + gtk_signal_connect(GTK_OBJECT(c->close), "clicked", GTK_SIGNAL_FUNC(close_callback),c); + gtk_signal_connect(GTK_OBJECT(c->send), "clicked", GTK_SIGNAL_FUNC(send_callback),c); + gtk_signal_connect(GTK_OBJECT(c->invite), "clicked", GTK_SIGNAL_FUNC(invite_callback),c); + gtk_signal_connect(GTK_OBJECT(c->whisper), "clicked", GTK_SIGNAL_FUNC(whisper_callback),c); + bcs = bcs->next; + } + C = C->next; } }
