src/dialogs.c

changeset 4359
cf899ee07d1d
parent 4350
00068aee8e2b
child 4371
2a9d4c697481
--- a/src/dialogs.c	Mon Jan 20 07:00:10 2003 +0000
+++ b/src/dialogs.c	Mon Jan 20 09:10:23 2003 +0000
@@ -240,7 +240,7 @@
 	GtkWidget *text;
 	GtkWidget *toggle;
 	GtkWidget *entry;
-	struct conversation *c;
+	struct gaim_conversation *c;
 };
 
 struct passwddlg {
@@ -279,36 +279,45 @@
 /*  Destroys                                                              */
 /*------------------------------------------------------------------------*/
 
-static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct conversation *c)
+static gint delete_event_dialog(GtkWidget *w, GdkEventAny *e, struct gaim_conversation *c)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	gchar *object_data;
+
 	object_data = gtk_object_get_user_data(GTK_OBJECT(w));
 
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
 	if (GTK_IS_COLOR_SELECTION_DIALOG(w)) {
-		set_state_lock(1);
-		if (w == c->fg_color_dialog) {
-			gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->fgcolorbtn), FALSE);
-			c->fg_color_dialog = NULL;
+		gaim_gtk_set_state_lock(TRUE);
+		if (w == gtkconv->dialogs.fg_color) {
+			gtk_toggle_button_set_state(
+				GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor), FALSE);
+			gtkconv->dialogs.fg_color = NULL;
 		} else {
-			gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->bgcolorbtn), FALSE);
-			c->bg_color_dialog = NULL;
+			gtk_toggle_button_set_state(
+				GTK_TOGGLE_BUTTON(gtkconv->toolbar.bgcolor), FALSE);
+			gtkconv->dialogs.bg_color = NULL;
 		}
-		set_state_lock(0);
+		gaim_gtk_set_state_lock(FALSE);
 	} else if (GTK_IS_FONT_SELECTION_DIALOG(w)) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->font), FALSE);
-		set_state_lock(0);
-		c->font_dialog = NULL;
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(
+			GTK_TOGGLE_BUTTON(gtkconv->toolbar.normal_size), FALSE);
+		gaim_gtk_set_state_lock(FALSE);
+		gtkconv->dialogs.font = NULL;
 	} else if (!g_strcasecmp(object_data, "smiley dialog")) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->smiley), FALSE);
-		set_state_lock(0);
-		c->smiley_dialog = NULL;
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.smiley),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
+		gtkconv->dialogs.smiley = NULL;
 	} else if (!g_strcasecmp(object_data, "log dialog")) {
-		set_state_lock(1);
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(c->log_button), FALSE);
-		set_state_lock(0);
-		c->log_dialog = NULL;
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->toolbar.log),
+									   FALSE);
+		gaim_gtk_set_state_lock(FALSE);
+		gtkconv->dialogs.log = NULL;
 	}
 
 	dialogwindows = g_list_remove(dialogwindows, w);
@@ -395,7 +404,7 @@
 	GtkWidget *hbox, *vbox;
 	GtkWidget *label;
 	GtkWidget *img = gtk_image_new_from_file(filename);
-	struct conversation *c = find_conversation(who);
+	struct gaim_conversation *c = gaim_find_conversation(who);
 
 	struct warning *w = g_new0(struct warning, 1);
 	w->who = who;
@@ -450,21 +459,22 @@
 void do_remove_buddy(struct buddy *b)
 {
 	struct group *g = find_group_by_buddy(b);
-	struct conversation *cv;
+	struct gaim_conversation *c;
 
 	if (!b)
 		return;
 
+	g = find_group_by_buddy(b);
+
 	debug_printf(_("Removing '%s' from buddy list.\n"), b->name);
 	serv_remove_buddy(b->user->gc, b->name, g->name);
 	remove_buddy(b);
 	gaim_blist_save();
 
-	cv = find_conversation(b->name);
-
-	if (cv)
-		update_convo_add_button(cv);
-
+	c = gaim_find_conversation(b->name);
+
+	if (c != NULL)
+		gaim_conversation_update(c, GAIM_CONV_UPDATE_REMOVE);
 }
 
 void show_confirm_del(struct gaim_connection *gc, gchar *name)
@@ -554,30 +564,28 @@
 
 static void do_im(GtkWidget *widget, int resp, struct getuserinfo *info)
 {
-	char *who;
-	struct conversation *c;
+	const char *who;
+	struct gaim_conversation *conv;
 
 	if (resp == GTK_RESPONSE_OK) {
-		who = g_strdup(gtk_entry_get_text(GTK_ENTRY(info->entry)));
-		
+		who = gtk_entry_get_text(GTK_ENTRY(info->entry));
+	
 		if (!g_strcasecmp(who, "")) {
-			g_free(who);
+			g_free(info);
 			return;
 		}
-		
-		c = find_conversation(who);
-		
-		if (c == NULL) {
-			c = new_conversation(who);
-		} else {
-			gdk_window_raise(c->window->window);
-			}
+
+		conv = gaim_find_conversation(who);
+
+		if (conv == NULL)
+			conv = gaim_conversation_new(GAIM_CONV_IM, who);
+		else
+			gaim_window_raise(gaim_conversation_get_window(conv));
+
 		if (info->gc)
-			set_convo_gc(c, info->gc);
-		
-		g_free(who);
+			gaim_conversation_set_user(conv, info->gc->user);
 	}
-	
+
 	destroy_dialog(NULL, imdialog);
 	imdialog = NULL;
 	g_free(info);
@@ -868,12 +876,12 @@
 /*  The dialog for adding buddies                                         */
 /*------------------------------------------------------------------------*/
 
-extern void add_callback(GtkWidget *, struct conversation *);
+extern void add_callback(GtkWidget *, struct gaim_conversation *);
 
 void do_add_buddy(GtkWidget *w, int resp, struct addbuddy *a)
 {
 	const char *grp, *who, *whoalias;
-	struct conversation *c;
+	struct gaim_conversation *c;
 
 	if (resp == GTK_RESPONSE_OK) {
 
@@ -881,14 +889,13 @@
 		grp = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(a->combo)->entry));
 		whoalias = gtk_entry_get_text(GTK_ENTRY(a->entry_for_alias));
 
-		c = find_conversation(who);
+		c = gaim_find_conversation(who);
 
 		add_buddy(a->gc->user, grp, who, whoalias);
 		serv_add_buddy(a->gc, who);
 
-		if (c != NULL) {
-			update_buttons_by_protocol(c);
-		}
+		if (c != NULL)
+			gaim_conversation_update(c, GAIM_CONV_UPDATE_ADD);
 
 		gaim_blist_save();
 	}
@@ -1898,7 +1905,8 @@
 	}
 	gtk_widget_show(b->messentry);
 
-	g_signal_connect(GTK_OBJECT(b->sendim), "clicked", G_CALLBACK(toggle_sensitive),	b->messentry);
+	g_signal_connect(GTK_OBJECT(b->sendim), "clicked",
+					 G_CALLBACK(gaim_gtk_toggle_sensitive), b->messentry);
 
 	b->command = gtk_check_button_new_with_label(_("Execute command on pounce"));
 	gtk_table_attach(GTK_TABLE(table), b->command, 0, 1, 2, 3, GTK_FILL, 0, 0, 0);
@@ -1920,7 +1928,8 @@
 	else
 		gtk_widget_set_sensitive(GTK_WIDGET(b->commentry), FALSE);
 	gtk_widget_show(b->commentry);
-	g_signal_connect(GTK_OBJECT(b->command), "clicked", G_CALLBACK(toggle_sensitive), b->commentry);
+	g_signal_connect(GTK_OBJECT(b->command), "clicked",
+					 G_CALLBACK(gaim_gtk_toggle_sensitive), b->commentry);
 	
 	b->sound = gtk_check_button_new_with_label(_("Play sound on pounce"));
 	if(edit_bp)
@@ -1941,7 +1950,8 @@
 	} else 
 		gtk_widget_set_sensitive(GTK_WIDGET(b->soundentry), FALSE);
 	gtk_widget_show(b->soundentry);
-	g_signal_connect(GTK_OBJECT(b->sound), "clicked", G_CALLBACK(toggle_sensitive), b->soundentry);
+	g_signal_connect(GTK_OBJECT(b->sound), "clicked",
+					 G_CALLBACK(gaim_gtk_toggle_sensitive), b->soundentry);
 	/* </pounce type="action"> */
 
 	b->save = gtk_check_button_new_with_label(_("Save this pounce after activation"));
@@ -2600,71 +2610,86 @@
 /*  Functions Called To Add A Log                                          */
 /*------------------------------------------------------------------------*/
 
-void cancel_log(GtkWidget *widget, struct conversation *c)
+void cancel_log(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->log_button) {
-		set_state_lock(1);
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(c->log_button), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.log) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->toolbar.log),
+									   FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	dialogwindows = g_list_remove(dialogwindows, c->log_dialog);
-	gtk_widget_destroy(c->log_dialog);
-	c->log_dialog = NULL;
+
+	dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.log);
+	gtk_widget_destroy(gtkconv->dialogs.log);
+	gtkconv->dialogs.log = NULL;
 }
 
-void do_log(GtkWidget *w, struct conversation *c)
+void do_log(GtkWidget *w, struct gaim_conversation *c)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	struct log_conversation *l;
-	char buf[128];
 	const char *file;
 	char path[PATHSIZE];
 
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
 	if (!find_log_info(c->name)) {
-		file = gtk_file_selection_get_filename(GTK_FILE_SELECTION(c->log_dialog));
+		file = gtk_file_selection_get_filename(
+			GTK_FILE_SELECTION(gtkconv->dialogs.log));
+
 		strncpy(path, file, PATHSIZE - 1);
-		if (file_is_dir(path, c->log_dialog)) {
+
+		if (file_is_dir(path, gtkconv->dialogs.log))
 			return;
-		}
 
 		l = (struct log_conversation *)g_new0(struct log_conversation, 1);
-		strcpy(l->name, c->name);
+		strcpy(l->name, gaim_conversation_get_name(c));
 		strcpy(l->filename, file);
 		log_conversations = g_list_append(log_conversations, l);
 
-		if (c != NULL) {
-			g_snprintf(buf, sizeof(buf), LOG_CONVERSATION_TITLE, c->name);
-			gtk_window_set_title(GTK_WINDOW(c->window), buf);
-		}
+		if (c != NULL)
+			gaim_conversation_set_logging(c, TRUE);
 	}
 
 	save_prefs();
 	cancel_log(NULL, c);
 }
 
-void show_log_dialog(struct conversation *c)
+void show_log_dialog(struct gaim_conversation *c)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	char *buf = g_malloc(BUF_LEN);
 
-	if (!c->log_dialog) {
-		c->log_dialog = gtk_file_selection_new(_("Gaim - Log Conversation"));
-
-		gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(c->log_dialog));
-
-		g_snprintf(buf, BUF_LEN - 1, "%s" G_DIR_SEPARATOR_S "%s.log", gaim_home_dir(), normalize(c->name));
-		gtk_object_set_user_data(GTK_OBJECT(c->log_dialog), "log dialog");
-		gtk_file_selection_set_filename(GTK_FILE_SELECTION(c->log_dialog), buf);
-		g_signal_connect(GTK_OBJECT(c->log_dialog), "delete_event",
-				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(c->log_dialog)->ok_button), "clicked",
-				   G_CALLBACK(do_log), c);
-		g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(c->log_dialog)->cancel_button),
-				   "clicked", G_CALLBACK(cancel_log), c);
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (!gtkconv->dialogs.log) {
+		gtkconv->dialogs.log = gtk_file_selection_new(_("Gaim - Log Conversation"));
+
+		gtk_file_selection_hide_fileop_buttons(
+			GTK_FILE_SELECTION(gtkconv->dialogs.log));
+
+		g_snprintf(buf, BUF_LEN - 1, "%s" G_DIR_SEPARATOR_S "%s.log",
+				   gaim_home_dir(), normalize(c->name));
+		gtk_object_set_user_data(GTK_OBJECT(gtkconv->dialogs.log),
+								 "log dialog");
+		gtk_file_selection_set_filename(GTK_FILE_SELECTION(gtkconv->dialogs.log),
+										buf);
+		g_signal_connect(G_OBJECT(gtkconv->dialogs.log), "delete_event",
+						 G_CALLBACK(delete_event_dialog), c);
+		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(gtkconv->dialogs.log)->ok_button), "clicked",
+						 G_CALLBACK(do_log), c);
+		g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(gtkconv->dialogs.log)->cancel_button), "clicked",
+						 G_CALLBACK(cancel_log), c);
 	}
 
 	g_free(buf);
 
-	gtk_widget_show(c->log_dialog);
-	gdk_window_raise(c->log_dialog->window);
+	gtk_widget_show(gtkconv->dialogs.log);
+	gdk_window_raise(gtkconv->dialogs.log->window);
 }
 
 /*------------------------------------------------------*/
@@ -2918,22 +2943,31 @@
 /* Link Dialog                                          */
 /*------------------------------------------------------*/
 
-void cancel_link(GtkWidget *widget, struct conversation *c)
+void cancel_link(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->link) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->link), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.link) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	destroy_dialog(NULL, c->link_dialog);
-	c->link_dialog = NULL;
+
+	destroy_dialog(NULL, gtkconv->toolbar.link);
+	gtkconv->toolbar.link = NULL;
 }
 
 void do_insert_link(GtkWidget *w, int resp, struct linkdlg *b)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	char *open_tag;
 	const char *urltext, *showtext;
 
+	gtkconv = GAIM_GTK_CONVERSATION(b->c);
+
 	if (resp == GTK_RESPONSE_OK) {
 
 		open_tag = g_malloc(2048);
@@ -2945,46 +2979,54 @@
 			showtext = urltext;
 
 		g_snprintf(open_tag, 2048, "<A HREF=\"%s\">%s", urltext, showtext);
-		surround(b->c, open_tag, "</A>");
+		gaim_gtk_surround(gtkconv, open_tag, "</A>");
 
 		g_free(open_tag);
 	}
 
-	if (b->c->link) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(b->c->link), FALSE);
-		set_state_lock(0);
+	if (gtkconv->toolbar.link) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.link),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
 
-	b->c->link_dialog = NULL;
+	gtkconv->dialogs.link = NULL;
 	destroy_dialog(NULL, b->window);
 }
 
-void show_insert_link(GtkWidget *linky, struct conversation *c)
+void show_insert_link(GtkWidget *linky, struct gaim_conversation *c)
 {
+	struct gaim_gtk_conversation *gtkconv;
+	struct gaim_gtk_window *gtkwin;
 	GtkWidget *table;
 	GtkWidget *label;
 	GtkWidget *hbox;
 	GtkWidget *vbox;
 
-	if (!c->link_dialog) {
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+	gtkwin  = GAIM_GTK_WINDOW(gaim_conversation_get_window(c));
+
+	if (gtkconv->dialogs.link == NULL) {
 		struct linkdlg *a = g_new0(struct linkdlg, 1);
-		char *filename = g_build_filename(DATADIR, "pixmaps", "gaim", "dialogs", "gaim_question.png", NULL);
+		char *filename = g_build_filename(DATADIR, "pixmaps", "gaim",
+										  "dialogs", "gaim_question.png", NULL);
 		GtkWidget *img = gtk_image_new_from_file(filename);
 
 		g_free(filename);
 
 		a->c = c;
-		GAIM_DIALOG(a->window);
-		a->window = gtk_dialog_new_with_buttons(_("Gaim - Insert Link"), GTK_WINDOW(c->window), GTK_DIALOG_MODAL,
-						GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, _("Insert"), GTK_RESPONSE_OK, NULL);
+		a->window = gtk_dialog_new_with_buttons(_("Gaim - Insert Link"),
+				GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL,
+				GTK_RESPONSE_CANCEL, _("Insert"), GTK_RESPONSE_OK, NULL);
 
 		gtk_dialog_set_default_response(GTK_DIALOG(a->window), GTK_RESPONSE_OK);
 		gtk_container_set_border_width(GTK_CONTAINER(a->window), 6);
 		gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE);
 		gtk_dialog_set_has_separator(GTK_DIALOG(a->window), FALSE);
 		gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(a->window)->vbox), 12);
-		gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6);
+		gtk_container_set_border_width(
+			GTK_CONTAINER(GTK_DIALOG(a->window)->vbox), 6);
 		gtk_window_set_role(GTK_WINDOW(a->window), "insert_link");
 	
 		hbox = gtk_hbox_new(FALSE, 12);
@@ -2995,7 +3037,9 @@
 		vbox = gtk_vbox_new(FALSE, 0);
 		gtk_container_add(GTK_CONTAINER(hbox), vbox);
 	
-		label = gtk_label_new(_("Please enter the URL and description of the link that you want to insert.  The description is optional.\n"));
+		label = gtk_label_new(_("Please enter the URL and description of "
+								"the link that you want to insert.  The "
+								"description is optional.\n"));
 	
 		gtk_widget_set_size_request(GTK_WIDGET(label), 335, -1);
 		gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
@@ -3005,8 +3049,10 @@
 		hbox = gtk_hbox_new(FALSE, 6);
 		gtk_container_add(GTK_CONTAINER(vbox), hbox);
 	
-		g_signal_connect(GTK_OBJECT(a->window), "destroy", G_CALLBACK(destroy_dialog), a->window);
-		g_signal_connect(GTK_OBJECT(a->window), "destroy", G_CALLBACK(free_dialog), a);
+		g_signal_connect(G_OBJECT(a->window), "destroy",
+						 G_CALLBACK(destroy_dialog), a->window);
+		g_signal_connect(G_OBJECT(a->window), "destroy",
+						 G_CALLBACK(free_dialog), a);
 		dialogwindows = g_list_prepend(dialogwindows, a->window);
 	
 		table = gtk_table_new(4, 2, FALSE);
@@ -3033,14 +3079,15 @@
 		gtk_table_attach_defaults(GTK_TABLE(table), a->text, 1, 2, 1, 2);
 		gtk_entry_set_activates_default (GTK_ENTRY(a->text), TRUE);
 
-		g_signal_connect(G_OBJECT(a->window), "response", G_CALLBACK(do_insert_link), a);
+		g_signal_connect(G_OBJECT(a->window), "response",
+						 G_CALLBACK(do_insert_link), a);
 
 		a->toggle = linky;
-		c->link_dialog = a->window;
+		gtkconv->dialogs.link = a->window;
 	}
 
-	gtk_widget_show_all(GTK_WIDGET(c->link_dialog));
-	gdk_window_raise(c->link_dialog->window);
+	gtk_widget_show_all(gtkconv->dialogs.link);
+	gdk_window_raise(gtkconv->dialogs.link->window);
 }
 
 /*------------------------------------------------------*/
@@ -3050,34 +3097,47 @@
 GtkWidget *fgcseld = NULL;
 GtkWidget *bgcseld = NULL;
 
-void cancel_fgcolor(GtkWidget *widget, struct conversation *c)
+void cancel_fgcolor(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->fgcolorbtn && widget) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->fgcolorbtn), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.fgcolor && widget) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	dialogwindows = g_list_remove(dialogwindows, c->fg_color_dialog);
-	gtk_widget_destroy(c->fg_color_dialog);
-	c->fg_color_dialog = NULL;
+
+	dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.fg_color);
+	gtk_widget_destroy(gtkconv->dialogs.fg_color);
+	gtkconv->dialogs.fg_color = NULL;
 }
 
-void cancel_bgcolor(GtkWidget *widget, struct conversation *c)
+void cancel_bgcolor(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->bgcolorbtn && widget) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->bgcolorbtn), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.bgcolor && widget) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.bgcolor),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	dialogwindows = g_list_remove(dialogwindows, c->bg_color_dialog);
-	gtk_widget_destroy(c->bg_color_dialog);
-	c->bg_color_dialog = NULL;
+
+	dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.bg_color);
+	gtk_widget_destroy(gtkconv->dialogs.bg_color);
+	gtkconv->dialogs.bg_color = NULL;
 }
 
 void do_fgcolor(GtkWidget *widget, GtkColorSelection *colorsel)
 {
 	GdkColor text_color;
-	struct conversation *c;
+	struct gaim_conversation *c;
+	struct gaim_gtk_conversation *gtkconv;
 	char *open_tag;
 
 	open_tag = g_malloc(30);
@@ -3087,12 +3147,19 @@
 	c = gtk_object_get_user_data(GTK_OBJECT(colorsel));
 	/* GTK_IS_EDITABLE(c->entry); huh? */
 
-	c->fgcol = text_color;
-	c->hasfg = 1;
-	g_snprintf(open_tag, 23, "<FONT COLOR=\"#%02X%02X%02X\">", text_color.red/256, 
-		   text_color.green/256, text_color.blue/256);
-	surround(c, open_tag, "</FONT>");
-	debug_printf("#%02X%02X%02X\n", text_color.red/256, text_color.green/256, text_color.blue/256);
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	gtkconv->fg_color = text_color;
+	gtkconv->has_fg = TRUE;
+	g_snprintf(open_tag, 23, "<FONT COLOR=\"#%02X%02X%02X\">",
+			   text_color.red / 256,
+			   text_color.green / 256,
+			   text_color.blue / 256);
+	gaim_gtk_surround(gtkconv, open_tag, "</FONT>");
+	debug_printf("#%02X%02X%02X\n",
+				 text_color.red / 256,
+				 text_color.green / 256,
+				 text_color.blue / 256);
 	g_free(open_tag);
 	cancel_fgcolor(NULL, c);
 }
@@ -3100,7 +3167,8 @@
 void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel)
 {
 	GdkColor text_color;
-	struct conversation *c;
+	struct gaim_conversation *c;
+	struct gaim_gtk_conversation *gtkconv;
 	char *open_tag;
 
 	open_tag = g_malloc(30);
@@ -3110,20 +3178,30 @@
 	c = gtk_object_get_user_data(GTK_OBJECT(colorsel));
 	/* GTK_IS_EDITABLE(c->entry); huh? */
 
-	c->bgcol = text_color;
-	c->hasbg = 1;
-	g_snprintf(open_tag, 25, "<BODY BGCOLOR=\"#%02X%02X%02X\">", text_color.red/256, 
-		   text_color.green/256, text_color.blue/256);
-	surround(c, open_tag, "</BODY>");
-	debug_printf("#%02X%02X%02X\n", text_color.red/256, text_color.green/256, text_color.blue/256);
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	gtkconv->bg_color = text_color;
+	gtkconv->has_bg = TRUE;
+	g_snprintf(open_tag, 25, "<BODY BGCOLOR=\"#%02X%02X%02X\">",
+			   text_color.red / 256,
+			   text_color.green / 256,
+			   text_color.blue / 256);
+	gaim_gtk_surround(gtkconv, open_tag, "</BODY>");
+	debug_printf("#%02X%02X%02X\n",
+				 text_color.red / 256,
+				 text_color.green / 256,
+				 text_color.blue / 256);
 	g_free(open_tag);
 	cancel_bgcolor(NULL, c);
 }
 
-void show_fgcolor_dialog(struct conversation *c, GtkWidget *color)
+void show_fgcolor_dialog(struct gaim_conversation *c, GtkWidget *color)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	GtkWidget *colorsel;
 
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
 	if (color == NULL) {	/* we came from the prefs */
 		if (fgcseld)
 			return;
@@ -3143,32 +3221,35 @@
 		return;
 	}
 
-	if (!c->fg_color_dialog) {
-
-		c->fg_color_dialog = gtk_color_selection_dialog_new(_("Select Text Color"));
-		colorsel = GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->colorsel;
+	if (!gtkconv->dialogs.fg_color) {
+
+		gtkconv->dialogs.fg_color = gtk_color_selection_dialog_new(_("Select Text Color"));
+		colorsel = GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.fg_color)->colorsel;
 		gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &fgcolor);
 		gtk_object_set_user_data(GTK_OBJECT(colorsel), c);
 
-		g_signal_connect(GTK_OBJECT(c->fg_color_dialog), "delete_event",
+		g_signal_connect(GTK_OBJECT(gtkconv->dialogs.fg_color), "delete_event",
 				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->ok_button),
+		g_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.fg_color)->ok_button),
 				   "clicked", G_CALLBACK(do_fgcolor), colorsel);
 		g_signal_connect(GTK_OBJECT
-				   (GTK_COLOR_SELECTION_DIALOG(c->fg_color_dialog)->cancel_button),
+				   (GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.fg_color)->cancel_button),
 				   "clicked", G_CALLBACK(cancel_fgcolor), c);
 
-		gtk_widget_realize(c->fg_color_dialog);
+		gtk_widget_realize(gtkconv->dialogs.fg_color);
 	}
 
-	gtk_widget_show(c->fg_color_dialog);
-	gdk_window_raise(c->fg_color_dialog->window);
+	gtk_widget_show(gtkconv->dialogs.fg_color);
+	gdk_window_raise(gtkconv->dialogs.fg_color->window);
 }
 
-void show_bgcolor_dialog(struct conversation *c, GtkWidget *color)
+void show_bgcolor_dialog(struct gaim_conversation *c, GtkWidget *color)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	GtkWidget *colorsel;
 
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
 	if (color == NULL) {	/* we came from the prefs */
 		if (bgcseld)
 			return;
@@ -3188,42 +3269,48 @@
 		return;
 	}
 
-	if (!c->bg_color_dialog) {
-
-		c->bg_color_dialog = gtk_color_selection_dialog_new(_("Select Background Color"));
-		colorsel = GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->colorsel;
+	if (!gtkconv->dialogs.bg_color) {
+
+		gtkconv->dialogs.bg_color = gtk_color_selection_dialog_new(_("Select Background Color"));
+		colorsel = GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.bg_color)->colorsel;
 		gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), &bgcolor);
 		gtk_object_set_user_data(GTK_OBJECT(colorsel), c);
 
-		g_signal_connect(GTK_OBJECT(c->bg_color_dialog), "delete_event",
+		g_signal_connect(GTK_OBJECT(gtkconv->dialogs.bg_color), "delete_event",
 				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->ok_button),
+		g_signal_connect(GTK_OBJECT(GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.bg_color)->ok_button),
 				   "clicked", G_CALLBACK(do_bgcolor), colorsel);
 		g_signal_connect(GTK_OBJECT
-				   (GTK_COLOR_SELECTION_DIALOG(c->bg_color_dialog)->cancel_button),
+				   (GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.bg_color)->cancel_button),
 				   "clicked", G_CALLBACK(cancel_bgcolor), c);
 
-		gtk_widget_realize(c->bg_color_dialog);
+		gtk_widget_realize(gtkconv->dialogs.bg_color);
 	}
 
-	gtk_widget_show(c->bg_color_dialog);
-	gdk_window_raise(c->bg_color_dialog->window);
+	gtk_widget_show(gtkconv->dialogs.bg_color);
+	gdk_window_raise(gtkconv->dialogs.bg_color->window);
 }
 
 /*------------------------------------------------------------------------*/
 /*  Font Selection Dialog                                                 */
 /*------------------------------------------------------------------------*/
 
-void cancel_font(GtkWidget *widget, struct conversation *c)
+void cancel_font(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->font && widget) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->font), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.normal_size && widget) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(
+			GTK_TOGGLE_BUTTON(gtkconv->toolbar.normal_size), FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	dialogwindows = g_list_remove(dialogwindows, c->font_dialog);
-	gtk_widget_destroy(c->font_dialog);
-	c->font_dialog = NULL;
+
+	dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.font);
+	gtk_widget_destroy(gtkconv->dialogs.font);
+	gtkconv->dialogs.font = NULL;
 }
 
 void apply_font(GtkWidget *widget, GtkFontSelection *fontsel)
@@ -3232,7 +3319,7 @@
 	   but for now only works with font face */
 	int i = 0;
 	char *fontname;
-	struct conversation *c = gtk_object_get_user_data(GTK_OBJECT(fontsel));
+	struct gaim_conversation *c = gtk_object_get_user_data(GTK_OBJECT(fontsel));
 
 	if (c) {
 		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel));
@@ -3240,7 +3327,7 @@
 			i++;
 		}
 		fontname[i] = 0;
-		set_font_face(fontname, c);
+		gaim_gtk_set_font_face(GAIM_GTK_CONVERSATION(c), fontname);
 	} else {
 		fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel));
 		while(fontface[i] && !isdigit(fontname[i]) && i < sizeof(fontface)) { 
@@ -3259,9 +3346,13 @@
 	fontseld = NULL;
 }
 
-void show_font_dialog(struct conversation *c, GtkWidget *font)
+void show_font_dialog(struct gaim_conversation *c, GtkWidget *font)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	char fonttif[128];
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
 	if (!font) {		/* we came from the prefs dialog */
 		if (fontseld)
 			return;
@@ -3288,35 +3379,36 @@
 		return;
 	}
 
-	if (!c->font_dialog) {
-		c->font_dialog = gtk_font_selection_dialog_new(_("Select Font"));
+	if (!gtkconv->dialogs.font) {
+		gtkconv->dialogs.font = gtk_font_selection_dialog_new(_("Select Font"));
 
 		if (font)
-			gtk_object_set_user_data(GTK_OBJECT(c->font_dialog), c);
+			gtk_object_set_user_data(GTK_OBJECT(gtkconv->dialogs.font), c);
 		else
-			gtk_object_set_user_data(GTK_OBJECT(c->font_dialog), NULL);
-
-		if (c->fontface[0]) {
-			g_snprintf(fonttif, sizeof(fonttif), "%s 12", c->fontface);
-			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(c->font_dialog),
+			gtk_object_set_user_data(GTK_OBJECT(gtkconv->dialogs.font), NULL);
+
+		if (gtkconv->fontface[0]) {
+			g_snprintf(fonttif, sizeof(fonttif), "%s 12", gtkconv->fontface);
+			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font),
 							       fonttif);
 		} else {
-			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(c->font_dialog),
+			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font),
 								DEFAULT_FONT_FACE);
 		}
 
-		g_signal_connect(GTK_OBJECT(c->font_dialog), "delete_event",
+		g_signal_connect(GTK_OBJECT(gtkconv->dialogs.font), "delete_event",
 				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->ok_button),
-				   "clicked", G_CALLBACK(apply_font), c->font_dialog);
-		g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(c->font_dialog)->cancel_button),
+		g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font)->ok_button),
+				   "clicked", G_CALLBACK(apply_font), gtkconv->dialogs.font);
+		g_signal_connect(GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font)->cancel_button),
 				   "clicked", G_CALLBACK(cancel_font), c);
 
-		gtk_widget_realize(c->font_dialog);
+		gtk_widget_realize(gtkconv->dialogs.font);
 
 	}
-	gtk_widget_show(c->font_dialog);
-	gdk_window_raise(c->font_dialog->window);
+
+	gtk_widget_show(gtkconv->dialogs.font);
+	gdk_window_raise(gtkconv->dialogs.font->window);
 }
 
 /*------------------------------------------------------------------------*/
@@ -3612,16 +3704,21 @@
 
 /* smiley dialog */
 
-void close_smiley_dialog(GtkWidget *widget, struct conversation *c)
+void close_smiley_dialog(GtkWidget *widget, struct gaim_conversation *c)
 {
-	if (c->smiley) {
-		set_state_lock(1);
-		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(c->smiley), FALSE);
-		set_state_lock(0);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->toolbar.smiley) {
+		gaim_gtk_set_state_lock(TRUE);
+		gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(gtkconv->toolbar.smiley),
+									FALSE);
+		gaim_gtk_set_state_lock(FALSE);
 	}
-	dialogwindows = g_list_remove(dialogwindows, c->smiley_dialog);
-	gtk_widget_destroy(c->smiley_dialog);
-	c->smiley_dialog = NULL;
+	dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.smiley);
+	gtk_widget_destroy(gtkconv->dialogs.smiley);
+	gtkconv->dialogs.smiley = NULL;
 }
 
 void set_smiley(GtkWidget *w, char *face) 
@@ -3641,14 +3738,17 @@
 	return;
 }
 
-void insert_smiley_text(GtkWidget *widget, struct conversation *c)
+void insert_smiley_text(GtkWidget *widget, struct gaim_conversation *c)
 {
-	gtk_text_buffer_insert_at_cursor(c->entry_buffer,
-					 current_smiley, -1);
+	struct gaim_gtk_conversation *gtkconv;
+
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, current_smiley, -1);
 	close_smiley_dialog(NULL, c);
 }
 
-static void toolbar_add_smiley(struct conversation *c, GtkWidget *bar, char* path, char *filename, char *face)
+static void toolbar_add_smiley(struct gaim_conversation *c, GtkWidget *bar, char* path, char *filename, char *face)
 {
 	GtkWidget *image;
 	GtkWidget *button;
@@ -3666,18 +3766,21 @@
 	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
 }
 
-void show_smiley_dialog(struct conversation *c, GtkWidget *widget)
+void show_smiley_dialog(struct gaim_conversation *c, GtkWidget *widget)
 {
+	struct gaim_gtk_conversation *gtkconv;
 	GtkWidget *dialog;
 	GtkWidget *vbox, *smiley_box = NULL;
 	GtkWidget *win;
 	GtkWidget *bbox;
 	char *smiley_path = 0;
 
-	if (c->smiley_dialog)
+	gtkconv = GAIM_GTK_CONVERSATION(c);
+
+	if (gtkconv->dialogs.smiley)
 		return;
 
-	win = c->window;
+	win = GAIM_GTK_WINDOW(gaim_conversation_get_window(c))->window;
 
 	GAIM_DIALOG(dialog);
 	gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, TRUE);
@@ -3730,13 +3833,14 @@
 
 	/* connect signals */
 	gtk_object_set_user_data(GTK_OBJECT(dialog), "smiley dialog");
-	g_signal_connect(GTK_OBJECT(dialog), "delete_event", G_CALLBACK(delete_event_dialog), c);
+	g_signal_connect(G_OBJECT(dialog), "delete_event",
+					 G_CALLBACK(delete_event_dialog), c);
 
 	/* show everything */
 	gtk_window_set_title(GTK_WINDOW(dialog), _("Smile!"));
 	gtk_widget_show_all(dialog);
 
-	c->smiley_dialog = dialog;
+	gtkconv->dialogs.smiley = dialog;
 
 	return;
 }
@@ -4595,7 +4699,9 @@
 }
 
 
-GtkWidget *gaim_pixbuf_button_from_stock(char *text, char *icon, GaimButtonStyle style)
+GtkWidget *
+gaim_pixbuf_button_from_stock(const char *text, const char *icon,
+							  GaimButtonStyle style)
 {
 	GtkWidget *button, *image, *label, *bbox;
 	button = gtk_button_new();
@@ -5291,3 +5397,4 @@
 /*------------------------------------------------------------------------*/
 /*  End dialog for setting v-card info                                    */
 /*------------------------------------------------------------------------*/
+

mercurial