diff src/conversation.c @ 1898:73d73939f698

[gaim-migrate @ 1908] this is part one of three. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Mon, 28 May 2001 03:36:04 +0000
parents c81f3dd0e58e
children 9aa7cd7f5948
line wrap: on
line diff
--- a/src/conversation.c	Fri May 25 23:07:22 2001 +0000
+++ b/src/conversation.c	Mon May 28 03:36:04 2001 +0000
@@ -150,6 +150,8 @@
 	c->history = g_string_new("");
 	conversations = g_list_append(conversations, c);
 	show_conv(c);
+	if (c->gc && c->gc->prpl && c->gc->prpl->insert_convo)
+		(*c->gc->prpl->insert_convo)(c->gc, c);
 	plugin_event(event_new_conversation, name, 0, 0, 0);
 	return c;
 }
@@ -420,6 +422,8 @@
 			c->window = NULL;
 		}
 	} else {
+		if (c->gc && c->gc->prpl && c->gc->prpl->remove_convo)
+			(*c->gc->prpl->remove_convo)(c->gc, c);
 		if (display_options & OPT_DISP_ONE_CHAT_WINDOW) {
 			if (g_list_length(chats) > 1) {
 				gtk_notebook_remove_page(GTK_NOTEBOOK(chat_notebook),
@@ -1755,12 +1759,22 @@
 	return toolbar;
 }
 
-static void convo_sel_send(GtkObject * m, struct gaim_connection *c)
+static void convo_sel_send(GtkObject *m, struct gaim_connection *c)
 {
 	struct conversation *cnv = gtk_object_get_user_data(m);
+
+	if (cnv->gc == c)
+		return;
+
+	if (cnv->gc && cnv->gc->prpl && cnv->gc->prpl->remove_convo)
+		(*cnv->gc->prpl->remove_convo)(cnv->gc, cnv);
+
 	cnv->gc = c;
 
 	update_buttons_by_protocol(cnv);
+
+	if (cnv->gc && cnv->gc->prpl && cnv->gc->prpl->insert_convo)
+		(*cnv->gc->prpl->insert_convo)(cnv->gc, cnv);
 }
 
 void update_convo_add_button(struct conversation *c)
@@ -1846,17 +1860,34 @@
 
 	while (c) {
 		C = (struct conversation *)c->data;
+		c = c->next;
+
 		create_convo_menu(C);
 
-		if (connections)
-			C->gc = (struct gaim_connection *)connections->data;
-		else
-			C->gc = NULL;
+		if (g_slist_index(connections, C->gc) < 0)
+			continue;
+
+		set_convo_gc(C, connections ? connections->data : NULL);
+	}
+}
+
+void set_convo_gc(struct conversation *c, struct gaim_connection *gc)
+{
+	if (c->gc == gc)
+		return;
 
-		update_buttons_by_protocol(C);
+	if (c->gc && c->gc->prpl && c->gc->prpl->remove_convo)
+		(*c->gc->prpl->remove_convo)(c->gc, c);
+
+	c->gc = gc;
 
-		c = c->next;
-	}
+	if (gc)
+		gtk_option_menu_set_history(GTK_OPTION_MENU(c->menu), g_slist_index(connections, gc));
+
+	update_buttons_by_protocol(c);
+
+	if (c->gc && c->gc->prpl && c->gc->prpl->insert_convo)
+		(*c->gc->prpl->insert_convo)(c->gc, c);
 }
 
 void update_buttons_by_protocol(struct conversation *c)
@@ -2075,6 +2106,10 @@
 
 	create_convo_menu(c);
 
+	c->lbox = gtk_hbox_new(FALSE, 0);
+	gtk_box_pack_start(GTK_BOX(vbox2), c->lbox, FALSE, FALSE, 0);
+	gtk_widget_show(c->lbox);
+
 	entry = gtk_text_new(NULL, NULL);
 	c->entry = entry;
 	if (!(display_options & OPT_DISP_ONE_WINDOW))
@@ -2097,7 +2132,7 @@
 	gtk_box_pack_start(GTK_BOX(vbox2), entry, TRUE, TRUE, 0);
 	gtk_widget_show(entry);
 
-	bbox = gtk_hbox_new(FALSE, 5);
+	c->bbox = bbox = gtk_hbox_new(FALSE, 5);
 	gtk_box_pack_start(GTK_BOX(vbox2), bbox, FALSE, FALSE, 0);
 	gtk_widget_show(bbox);