diff src/buddy_chat.c @ 1806:c649b63382b7

[gaim-migrate @ 1816] part one of nsanch's patch. i still need to look at what got changed with zephyr. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Sat, 05 May 2001 11:11:22 +0000
parents 00c753b86710
children ba8f463744c0
line wrap: on
line diff
--- a/src/buddy_chat.c	Sat May 05 10:36:08 2001 +0000
+++ b/src/buddy_chat.c	Sat May 05 11:11:22 2001 +0000
@@ -45,13 +45,29 @@
 static GtkWidget *invite;
 static GtkWidget *inviteentry;
 static GtkWidget *invitemess;
-static int community;
+static GtkWidget *jc_vbox;
 extern int state_lock;
 
 GList *chats = NULL;
 GtkWidget *all_chats = NULL;
 GtkWidget *chat_notebook = NULL;
 
+
+static void destroy_prev_jc()
+{
+	GList *children, *curr;
+	GtkWidget *w;
+	if (!jc_vbox)
+		return;
+
+	children = g_list_copy(gtk_container_children(GTK_CONTAINER(jc_vbox)));
+	for (curr = children; curr != NULL; curr = g_list_next(curr)) {
+		w = (GtkWidget *)curr->data;
+		gtk_container_remove(GTK_CONTAINER(jc_vbox), w);
+	}
+	g_list_free(children);
+}
+
 static void destroy_join_chat()
 {
 	if (joinchat)
@@ -69,23 +85,56 @@
 
 static void do_join_chat()
 {
-	char *group;
-
-	group = gtk_entry_get_text(GTK_ENTRY(entry));
-
 	if (joinchat) {
-		serv_join_chat(joinchatgc, community + 4, group);
+		if (joinchatgc->prpl->draw_join_chat)
+			serv_join_chat(joinchatgc, 0, NULL);
+		else
+			serv_join_chat(joinchatgc, 0, gtk_entry_get_text(GTK_ENTRY(entry)));
 		gtk_widget_destroy(joinchat);
 	}
 	joinchat = NULL;
 }
 
+static void default_draw_join_chat(struct gaim_connection *gc, GtkWidget *fbox) {
+	GtkWidget *label;
+	GtkWidget *rowbox;
+
+	if (!joinchat || !fbox)
+		return;
+	
+	rowbox = gtk_hbox_new(FALSE, 5);
+	gtk_box_pack_start(GTK_BOX(fbox), rowbox, TRUE, TRUE, 0);
+
+	label = gtk_label_new(_("Join what group:"));
+	gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0);
+	entry = gtk_entry_new();
+	gtk_box_pack_start(GTK_BOX(rowbox), entry, TRUE, TRUE, 0);
+
+	gtk_widget_show(label);
+	gtk_widget_show(entry);
+	gtk_widget_show(rowbox);
+}
+
+static void rebuild_jc()
+{
+	if (!joinchatgc)
+		return;
+
+	destroy_prev_jc();
+	if (joinchatgc->prpl->draw_join_chat)
+		(*joinchatgc->prpl->draw_join_chat)(joinchatgc, jc_vbox);
+	else
+		default_draw_join_chat(joinchatgc, jc_vbox);
+}
+
 static void joinchat_choose(GtkWidget *w, struct gaim_connection *g)
 {
+	if (joinchatgc == g)
+		return;
 	joinchatgc = g;
+	rebuild_jc();
 }
 
-
 static void create_joinchat_menu(GtkWidget *box)
 {
 	GtkWidget *optmenu;
@@ -120,7 +169,6 @@
 	gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), 0);
 }
 
-
 void join_chat()
 {
 	GtkWidget *mainbox;
@@ -131,7 +179,6 @@
 	GtkWidget *join;
 	GtkWidget *cancel;
 	GtkWidget *label;
-	GtkWidget *opt;
 	GSList *c = connections;
 	struct gaim_connection *gc = NULL;
 
@@ -169,18 +216,6 @@
 		gtk_container_set_border_width(GTK_CONTAINER(fbox), 5);
 		gtk_container_add(GTK_CONTAINER(frame), fbox);
 
-		rowbox = gtk_hbox_new(FALSE, 5);
-		gtk_box_pack_start(GTK_BOX(fbox), rowbox, TRUE, TRUE, 0);
-
-		label = gtk_label_new(_("Join what group:"));
-		gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0);
-
-		entry = gtk_entry_new();
-		gtk_box_pack_start(GTK_BOX(rowbox), entry, TRUE, TRUE, 0);
-		gtk_signal_connect(GTK_OBJECT(entry), "activate",
-				   GTK_SIGNAL_FUNC(do_join_chat), joinchat);
-		gtk_window_set_focus(GTK_WINDOW(joinchat), entry);
-
 #ifndef NO_MULTI
 		rowbox = gtk_hbox_new(FALSE, 5);
 		gtk_box_pack_start(GTK_BOX(fbox), rowbox, TRUE, TRUE, 0);
@@ -189,24 +224,18 @@
 		gtk_box_pack_start(GTK_BOX(rowbox), label, FALSE, FALSE, 0);
 
 		create_joinchat_menu(rowbox);
+
+		{
+			GtkWidget *tmp = fbox;
+			fbox = gtk_vbox_new(FALSE, 5);
+			gtk_container_add(GTK_CONTAINER(tmp), fbox);
+			gtk_container_set_border_width(GTK_CONTAINER(fbox), 0);
+			jc_vbox = fbox;
+		}
 #else
 		joinchatgc = connections->data;
 #endif
-
-		rowbox = gtk_hbox_new(FALSE, 5);
-		gtk_box_pack_start(GTK_BOX(fbox), rowbox, TRUE, TRUE, 0);
-
-		community = 0;
-		opt = gtk_radio_button_new_with_label(NULL, _("AIM Private Chats"));
-		gtk_box_pack_start(GTK_BOX(rowbox), opt, TRUE, TRUE, 0);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(opt), TRUE);
-		gtk_signal_connect(GTK_OBJECT(opt), "clicked", set_option, &community);
-		gtk_widget_show(opt);
-
-		opt = gtk_radio_button_new_with_label(gtk_radio_button_group(GTK_RADIO_BUTTON(opt)),
-						      _("AOL Community Chats"));
-		gtk_box_pack_start(GTK_BOX(rowbox), opt, TRUE, TRUE, 0);
-
+		rebuild_jc();
 		/* buttons */
 
 		bbox = gtk_hbox_new(FALSE, 5);