diff src/dialogs.c @ 8317:6f549c1d0829

[gaim-migrate @ 9041] Because I won't be able to work on this until late this week at the earliest, here's GtkIMHtmlToolbar. It's a composite widget that attaches to an editable gtkimhtml and controls all the formatting with ease. All one has to do to get a formattable, editable, gtkimhtml now is to replace a gtktextview with a gtkimhtml (you can even leave all the other calls that control it as gtkimhtml descends from gtktextview) throw one of these toolbars in there and gtk_imhtml_toolbar_attach it to the gtkimhtml. That's what I did in the New Away Message dialog. This would also be nice in gtkrequest.c and gtkpounce.c. Of course, this isn't done and there's a ton of hacky commented out old code in there. Things like keyboard shortcut preferences don't currently work and there's a lot of things I want to move around yet. However, if anyone feels inspired to work on it before I get back to it feel free. Maybe you can IM me beforehand or something. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Mon, 23 Feb 2004 21:18:27 +0000
parents 462ead6fc1a0
children a2c5537a814b
line wrap: on
line diff
--- a/src/dialogs.c	Sun Feb 22 22:10:47 2004 +0000
+++ b/src/dialogs.c	Mon Feb 23 21:18:27 2004 +0000
@@ -34,6 +34,7 @@
 #include "gtkblist.h"
 #include "gtkconv.h"
 #include "gtkimhtml.h"
+#include "gtkimhtmltoolbar.h"
 #include "gtkprefs.h"
 #include "gtkutils.h"
 #include "stock.h"
@@ -57,6 +58,7 @@
 
 struct create_away {
 	GtkWidget *window;
+	GtkWidget *toolbar;
 	GtkWidget *entry;
 	GtkWidget *text;
 	struct away_message *mess;
@@ -112,7 +114,7 @@
 
 	gtkconv = GAIM_GTK_CONVERSATION(c);
 
-	if (GTK_IS_COLOR_SELECTION_DIALOG(w)) {
+	/*if (GTK_IS_COLOR_SELECTION_DIALOG(w)) {
 		if (w == gtkconv->dialogs.fg_color) {
 			gtk_toggle_button_set_active(
 				GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor), FALSE);
@@ -134,7 +136,7 @@
 		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->toolbar.log),
 									   FALSE);
 		gtkconv->dialogs.log = NULL;
-	}
+		}*/
 
 	dialogwindows = g_list_remove(dialogwindows, w);
 	gtk_widget_destroy(w);
@@ -574,92 +576,6 @@
 GtkWidget *fgcseld = NULL;
 GtkWidget *bgcseld = NULL;
 
-void cancel_fgcolor(GtkWidget *widget, GaimConversation *c)
-{
-	GaimGtkConversation *gtkconv;
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	if (gtkconv->toolbar.fgcolor && widget) {
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.fgcolor),
-									FALSE);
-	}
-
-	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, GaimConversation *c)
-{
-	GaimGtkConversation *gtkconv;
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	if (gtkconv->toolbar.bgcolor && widget) {
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.bgcolor),
-									FALSE);
-	}
-
-	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;
-	GaimConversation *c;
-	GaimGtkConversation *gtkconv;
-	char *open_tag;
-
-	open_tag = g_malloc(30);
-
-	gtk_color_selection_get_current_color(colorsel, &text_color);
-
-	c = g_object_get_data(G_OBJECT(colorsel), "gaim_conversation");
-	/* GTK_IS_EDITABLE(c->entry); huh? */
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	gtkconv->fg_color = text_color;
-	g_snprintf(open_tag, 23, "#%02X%02X%02X",
-			   text_color.red / 256,
-			   text_color.green / 256,
-			   text_color.blue / 256);
-	gtk_imhtml_toggle_forecolor(GTK_IMHTML(gtkconv->entry), open_tag);
-
-	g_free(open_tag);
-	cancel_fgcolor(NULL, c);
-}
-
-void do_bgcolor(GtkWidget *widget, GtkColorSelection *colorsel)
-{
-	GdkColor text_color;
-	GaimConversation *c;
-	GaimGtkConversation *gtkconv;
-	char *open_tag;
-
-	open_tag = g_malloc(30);
-
-	gtk_color_selection_get_current_color(colorsel, &text_color);
-
-	c = g_object_get_data(G_OBJECT(colorsel), "gaim_conversation");
-	/* GTK_IS_EDITABLE(c->entry); huh? */
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	gtkconv->bg_color = text_color;
-	g_snprintf(open_tag, 25, "#%02X%02X%02X",
-			   text_color.red / 256,
-			   text_color.green / 256,
-			   text_color.blue / 256);
-	gtk_imhtml_toggle_backcolor(GTK_IMHTML(gtkconv->entry), open_tag);
-	
-	g_free(open_tag);
-	cancel_bgcolor(NULL, c);
-}
-
 void show_fgcolor_dialog(GaimConversation *c, GtkWidget *color)
 {
 	GaimGtkConversation *gtkconv;
@@ -671,45 +587,22 @@
 	gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"),
 					&fgcolor);
 
-	if (color == NULL) {	/* we came from the prefs */
-		if (fgcseld)
-			return;
-
-		fgcseld = gtk_color_selection_dialog_new(_("Select Text Color"));
-		gtk_color_selection_set_current_color(GTK_COLOR_SELECTION
-					      (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), &fgcolor);
-		g_signal_connect(G_OBJECT(fgcseld), "delete_event",
-				   G_CALLBACK(destroy_colorsel), (void *)1);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->cancel_button),
-				   "clicked", G_CALLBACK(destroy_colorsel), (void *)1);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->ok_button), "clicked",
-				   G_CALLBACK(apply_color_dlg), (void *)1);
-		gtk_widget_realize(fgcseld);
-		gtk_widget_show(fgcseld);
-		gdk_window_raise(fgcseld->window);
+	if (fgcseld)
 		return;
-	}
-
-	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);
-		g_object_set_data(G_OBJECT(colorsel), "gaim_conversation", c);
-
-		g_signal_connect(G_OBJECT(gtkconv->dialogs.fg_color), "delete_event",
-				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.fg_color)->ok_button),
-				   "clicked", G_CALLBACK(do_fgcolor), colorsel);
-		g_signal_connect(G_OBJECT
-				   (GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.fg_color)->cancel_button),
-				   "clicked", G_CALLBACK(cancel_fgcolor), c);
-
-		gtk_widget_realize(gtkconv->dialogs.fg_color);
-	}
-
-	gtk_widget_show(gtkconv->dialogs.fg_color);
-	gdk_window_raise(gtkconv->dialogs.fg_color->window);
+	
+	fgcseld = gtk_color_selection_dialog_new(_("Select Text Color"));
+	gtk_color_selection_set_current_color(GTK_COLOR_SELECTION
+					      (GTK_COLOR_SELECTION_DIALOG(fgcseld)->colorsel), &fgcolor);
+	g_signal_connect(G_OBJECT(fgcseld), "delete_event",
+			 G_CALLBACK(destroy_colorsel), (void *)1);
+	g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->cancel_button),
+			 "clicked", G_CALLBACK(destroy_colorsel), (void *)1);
+	g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(fgcseld)->ok_button), "clicked",
+			 G_CALLBACK(apply_color_dlg), (void *)1);
+	gtk_widget_realize(fgcseld);
+	gtk_widget_show(fgcseld);
+	gdk_window_raise(fgcseld->window);
+	return;
 }
 
 void show_bgcolor_dialog(GaimConversation *c, GtkWidget *color)
@@ -723,93 +616,29 @@
 	gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"),
 					&bgcolor);
 
-	if (color == NULL) {	/* we came from the prefs */
-		if (bgcseld)
-			return;
-
-		bgcseld = gtk_color_selection_dialog_new(_("Select Background Color"));
-		gtk_color_selection_set_current_color(GTK_COLOR_SELECTION
-					      (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), &bgcolor);
-		g_signal_connect(G_OBJECT(bgcseld), "delete_event",
-				   G_CALLBACK(destroy_colorsel), NULL);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->cancel_button),
-				   "clicked", G_CALLBACK(destroy_colorsel), NULL);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->ok_button), "clicked",
-				   G_CALLBACK(apply_color_dlg), (void *)2);
-		gtk_widget_realize(bgcseld);
-		gtk_widget_show(bgcseld);
-		gdk_window_raise(bgcseld->window);
+	if (bgcseld)
 		return;
-	}
-
-	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);
-		g_object_set_data(G_OBJECT(colorsel), "gaim_conversation", c);
-
-		g_signal_connect(G_OBJECT(gtkconv->dialogs.bg_color), "delete_event",
-				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.bg_color)->ok_button),
-				   "clicked", G_CALLBACK(do_bgcolor), colorsel);
-		g_signal_connect(G_OBJECT
-				   (GTK_COLOR_SELECTION_DIALOG(gtkconv->dialogs.bg_color)->cancel_button),
-				   "clicked", G_CALLBACK(cancel_bgcolor), c);
-
-		gtk_widget_realize(gtkconv->dialogs.bg_color);
-	}
-
-	gtk_widget_show(gtkconv->dialogs.bg_color);
-	gdk_window_raise(gtkconv->dialogs.bg_color->window);
+	
+	bgcseld = gtk_color_selection_dialog_new(_("Select Background Color"));
+	gtk_color_selection_set_current_color(GTK_COLOR_SELECTION
+					      (GTK_COLOR_SELECTION_DIALOG(bgcseld)->colorsel), &bgcolor);
+	g_signal_connect(G_OBJECT(bgcseld), "delete_event",
+			 G_CALLBACK(destroy_colorsel), NULL);
+	g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->cancel_button),
+			 "clicked", G_CALLBACK(destroy_colorsel), NULL);
+	g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(bgcseld)->ok_button), "clicked",
+			 G_CALLBACK(apply_color_dlg), (void *)2);
+	gtk_widget_realize(bgcseld);
+	gtk_widget_show(bgcseld);
+	gdk_window_raise(bgcseld->window);
+	return;
 }
 
-/*------------------------------------------------------------------------*/
+
+/*------------------------  ----------------------------------------------*/
 /*  Font Selection Dialog                                                 */
 /*------------------------------------------------------------------------*/
 
-void cancel_font(GtkWidget *widget, GaimConversation *c)
-{
-	GaimGtkConversation *gtkconv;
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	if (gtkconv->toolbar.font && widget) {
-		gtk_toggle_button_set_active(
-			GTK_TOGGLE_BUTTON(gtkconv->toolbar.font), FALSE);
-	}
-
-	if (gtkconv->dialogs.font) {
-		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)
-{
-	/* this could be expanded to include font size, weight, etc.
-	   but for now only works with font face */
-	char *fontname;
-	char *space;
-	GaimConversation *c = g_object_get_data(G_OBJECT(fontsel),
-			"gaim_conversation");
-
-	if(!c)
-		return;
-
-	fontname = gtk_font_selection_dialog_get_font_name(GTK_FONT_SELECTION_DIALOG(fontsel));
-
-	space = strrchr(fontname, ' ');
-	if(space && isdigit(*(space+1)))
-		*space = '\0';
-
-	gaim_gtk_set_font_face(GAIM_GTK_CONVERSATION(c), fontname);
-
-	g_free(fontname);
-
-	cancel_font(NULL, c);
-}
 
 void destroy_fontsel(GtkWidget *w, gpointer d)
 {
@@ -825,62 +654,34 @@
 
 	gtkconv = GAIM_GTK_CONVERSATION(c);
 
-	if (!font) {		/* we came from the prefs dialog */
-		if (fontseld)
-			return;
 
-		fontseld = gtk_font_selection_dialog_new(_("Select Font"));
-
-		fontface = gaim_prefs_get_string("/gaim/gtk/conversations/font_face");
-
-		if (fontface != NULL && *fontface != '\0') {
-			g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontface);
-			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld),
-								fonttif);
-		} else {
-			gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld),
-								DEFAULT_FONT_FACE " 12");
-		}
-
-		g_signal_connect(G_OBJECT(fontseld), "delete_event",
-				   G_CALLBACK(destroy_fontsel), NULL);
-		g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->cancel_button),
-				   "clicked", G_CALLBACK(destroy_fontsel), NULL);
-		g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->ok_button), "clicked",
-				   G_CALLBACK(apply_font_dlg), fontseld);
-		gtk_widget_realize(fontseld);
-		gtk_widget_show(fontseld);
-		gdk_window_raise(fontseld->window);
+	if (fontseld)
 		return;
+	
+	fontseld = gtk_font_selection_dialog_new(_("Select Font"));
+	
+	fontface = gaim_prefs_get_string("/gaim/gtk/conversations/font_face");
+	
+	if (fontface != NULL && *fontface != '\0') {
+		g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontface);
+		gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld),
+							fonttif);
+	} else {
+		gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(fontseld),
+							DEFAULT_FONT_FACE " 12");
 	}
-
-	if (!gtkconv->dialogs.font) {
-		gtkconv->dialogs.font = gtk_font_selection_dialog_new(_("Select Font"));
-
-		g_object_set_data(G_OBJECT(gtkconv->dialogs.font), "gaim_conversation", c);
+	
+	g_signal_connect(G_OBJECT(fontseld), "delete_event",
+			 G_CALLBACK(destroy_fontsel), NULL);
+	g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->cancel_button),
+			 "clicked", G_CALLBACK(destroy_fontsel), NULL);
+	g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(fontseld)->ok_button), "clicked",
+			 G_CALLBACK(apply_font_dlg), fontseld);
+	gtk_widget_realize(fontseld);
+	gtk_widget_show(fontseld);
+	gdk_window_raise(fontseld->window);
+	return;
 
-		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(gtkconv->dialogs.font),
-								DEFAULT_FONT_FACE);
-		}
-
-		g_signal_connect(G_OBJECT(gtkconv->dialogs.font), "delete_event",
-				   G_CALLBACK(delete_event_dialog), c);
-		g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font)->ok_button),
-				   "clicked", G_CALLBACK(apply_font), gtkconv->dialogs.font);
-		g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(gtkconv->dialogs.font)->cancel_button),
-				   "clicked", G_CALLBACK(cancel_font), c);
-
-		gtk_widget_realize(gtkconv->dialogs.font);
-
-	}
-
-	gtk_widget_show(gtkconv->dialogs.font);
-	gdk_window_raise(gtkconv->dialogs.font->window);
 }
 
 /*------------------------------------------------------------------------*/
@@ -899,7 +700,7 @@
 	}
 
 	g_snprintf(am->name, sizeof(am->name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry)));
-	away_message = gtk_text_view_get_text(GTK_TEXT_VIEW(ca->text), FALSE);
+	away_message = gtk_imhtml_get_markup(GTK_IMHTML(ca->text));
 
 	g_snprintf(am->message, sizeof(am->message), "%s", away_message);
 	g_free(away_message);
@@ -926,7 +727,7 @@
 		return 0;
 	}
 
-	msg = gtk_text_view_get_text(GTK_TEXT_VIEW(ca->text), FALSE);
+	msg = gtk_imhtml_get_markup(GTK_IMHTML(ca->text));
 
 	if (!msg && (type <= 1)) {
 		/* We shouldn't allow a blank message */
@@ -959,7 +760,7 @@
 		return;
 
 	g_snprintf(am.name, sizeof(am.name), "%s", gtk_entry_get_text(GTK_ENTRY(ca->entry)));
-	away_message = gtk_text_view_get_text(GTK_TEXT_VIEW(ca->text), FALSE);
+	away_message = gtk_imhtml_get_markup(GTK_IMHTML(ca->text));
 
 	g_snprintf(am.message, sizeof(am.message), "%s", away_message);
 	g_free(away_message);
@@ -1022,6 +823,10 @@
 	gaim_set_accessible_label (ca->entry, label);
 	gtk_widget_grab_focus(ca->entry);
 
+	/* Toolbar */
+	ca->toolbar = gtk_imhtmltoolbar_new();
+	gtk_box_pack_start(GTK_BOX(vbox), ca->toolbar, FALSE, FALSE, 0);
+
 	/* Away message text */
 	sw = gtk_scrolled_window_new(NULL, NULL);
 	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
@@ -1029,11 +834,13 @@
 	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
 	gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
 
-	ca->text = gtk_text_view_new();
+	ca->text = gtk_imhtml_new(NULL, NULL);
+	gtk_imhtml_set_editable(ca->text, TRUE);
 	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(ca->text), GTK_WRAP_WORD_CHAR);
 
 	if (gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
 		gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(ca->text));
+	gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(ca->toolbar), ca->text);
 
 	gtk_container_add(GTK_CONTAINER(sw), ca->text);
 
@@ -1052,10 +859,7 @@
 		gtk_tree_model_get_value (GTK_TREE_MODEL(ls), &iter, 1, &val);
 		amt = g_value_get_pointer (&val);
 		gtk_entry_set_text(GTK_ENTRY(ca->entry), amt->name);
-		buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(ca->text));
-		gtk_text_buffer_get_iter_at_offset(buffer, &start, pos);
-		gtk_text_buffer_insert(buffer, &start, amt->message, strlen(amt->message));
-
+		gtk_imhtml_append_text_with_images(GTK_IMHTML(ca->text), amt->message, 0, NULL);
 		ca->mess = amt;
 	}
 
@@ -1081,143 +885,6 @@
 	gtk_widget_show_all(ca->window);
 }
 
-/* smiley dialog */
-
-void close_smiley_dialog(GtkWidget *widget, GaimConversation *c)
-{
-	GaimGtkConversation *gtkconv;
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	if (gtkconv->toolbar.smiley) {
-		gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.smiley),
-									FALSE);
-	}
-	if(gtkconv->dialogs.smiley) {
-		dialogwindows = g_list_remove(dialogwindows, gtkconv->dialogs.smiley);
-		gtk_widget_destroy(gtkconv->dialogs.smiley);
-		gtkconv->dialogs.smiley = NULL;
-	}
-}
-
-void insert_smiley_text(GtkWidget *widget, GaimConversation *c)
-{
-	GaimGtkConversation *gtkconv;
-	char *smiley_text = g_object_get_data(G_OBJECT(widget), "smiley_text");
-	GaimPlugin *proto = gaim_find_prpl(gaim_account_get_protocol_id(gaim_conversation_get_account(c)));
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	gtk_imhtml_insert_smiley(GTK_IMHTML(gtkconv->entry), proto->info->name, smiley_text);
-
-	close_smiley_dialog(NULL, c);
-}
-
-static void add_smiley(GaimConversation *c, GtkWidget *table, int row, int col, char *filename, char *face)
-{
-	GtkWidget *image;
-	GtkWidget *button;
-	GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	image = gtk_image_new_from_file(filename);
-	button = gtk_button_new();
-	gtk_container_add(GTK_CONTAINER(button), image);
-	g_object_set_data(G_OBJECT(button), "smiley_text", face);
-	g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(insert_smiley_text), c);
-
-	gtk_tooltips_set_tip(gtkconv->tooltips, button, face, NULL);
-
-	gtk_table_attach_defaults(GTK_TABLE(table), button, col, col+1, row, row+1);
-
-	/* these look really weird with borders */
-	gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
-
-	gtk_widget_show(button);
-}
-
-static gboolean smiley_is_unique(GSList *list, GtkIMHtmlSmiley *smiley) {
-	while(list) {
-		GtkIMHtmlSmiley *cur = list->data;
-		if(!strcmp(cur->file, smiley->file))
-			return FALSE;
-		list = list->next;
-	}
-	return TRUE;
-}
-
-void show_smiley_dialog(GaimConversation *c, GtkWidget *widget)
-{
-	GaimGtkConversation *gtkconv;
-	GtkWidget *dialog;
-	GtkWidget *smiley_table = NULL;
-	GSList *smileys, *unique_smileys = NULL;
-	int width;
-	int row = 0, col = 0;
-
-	gtkconv = GAIM_GTK_CONVERSATION(c);
-
-	if (gtkconv->dialogs.smiley)
-		return;
-
-	if(c->account)
-		smileys = get_proto_smileys(
-			gaim_account_get_protocol_id(gaim_conversation_get_account(c)));
-	else
-		smileys = get_proto_smileys(GAIM_PROTO_DEFAULT);
-
-	while(smileys) {
-		GtkIMHtmlSmiley *smiley = smileys->data;
-		if(!smiley->hidden) {
-			if(smiley_is_unique(unique_smileys, smiley))
-					unique_smileys = g_slist_append(unique_smileys, smiley);
-		}
-		smileys = smileys->next;
-	}
-
-
-	width = floor(sqrt(g_slist_length(unique_smileys)));
-
-	GAIM_DIALOG(dialog);
-	gtk_window_set_resizable(GTK_WINDOW(dialog), FALSE);
-	gtk_window_set_role(GTK_WINDOW(dialog), "smiley_dialog");
-	gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_MOUSE);
-
-	smiley_table = gtk_table_new(width, width, TRUE);
-
-	/* pack buttons */
-
-	while(unique_smileys) {
-		GtkIMHtmlSmiley *smiley = unique_smileys->data;
-		if(!smiley->hidden) {
-			add_smiley(c, smiley_table, row, col, smiley->file, smiley->smile);
-			if(++col >= width) {
-				col = 0;
-				row++;
-			}
-		}
-		unique_smileys = unique_smileys->next;
-	}
-
-	gtk_container_add(GTK_CONTAINER(dialog), smiley_table);
-
-	gtk_widget_show(smiley_table);
-
-	gtk_container_set_border_width(GTK_CONTAINER(dialog), 5);
-
-	/* connect signals */
-	g_object_set_data(G_OBJECT(dialog), "dialog_type", "smiley dialog");
-	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);
-
-	gtkconv->dialogs.smiley = dialog;
-
-	return;
-}
-
 static void
 alias_chat_cb(GaimChat *chat, const char *new_alias)
 {