diff src/gtkutils.c @ 10175:53410b84336f

[gaim-migrate @ 11290] I wrote a helper function that creates the imhtml and toolbar and puts them in a widget and what not. And I changed some places to use this. And I removed some whitespace from log.c. And I changed the conversation colors back to normal. And I'm not committing everything in my tree, so let me know if this doesn't compile. And that's all. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 14 Nov 2004 01:52:25 +0000
parents 83eb12b1f1a1
children 82c1322c4b56
line wrap: on
line diff
--- a/src/gtkutils.c	Sat Nov 13 16:17:41 2004 +0000
+++ b/src/gtkutils.c	Sun Nov 14 01:52:25 2004 +0000
@@ -53,6 +53,7 @@
 #include "gtkconv.h"
 #include "gtkdialogs.h"
 #include "gtkimhtml.h"
+#include "gtkimhtmltoolbar.h"
 #include "gtkutils.h"
 
 guint accels_save_timer = 0;
@@ -94,6 +95,75 @@
 	gtk_imhtml_set_funcs(GTK_IMHTML(imhtml), &gtkimhtml_cbs);
 }
 
+GtkWidget *
+gaim_gtk_create_imhtml(gboolean editable, GtkWidget **imhtml_ret, GtkWidget **toolbar_ret)
+{
+	GtkWidget *frame;
+	GtkWidget *imhtml;
+	GtkWidget *sep;
+	GtkWidget *sw;
+	GtkWidget *toolbar;
+	GtkWidget *vbox;
+
+	frame = gtk_frame_new(NULL);
+	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
+	gtk_widget_show(frame);
+
+	vbox = gtk_vbox_new(FALSE, 0);
+	gtk_container_add(GTK_CONTAINER(frame), vbox);
+	gtk_widget_show(vbox);
+
+	if (editable) {
+		toolbar = gtk_imhtmltoolbar_new();
+		gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
+		gtk_widget_show(toolbar);
+
+		sep = gtk_hseparator_new();
+		gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
+		gtk_widget_show(sep);
+	}
+
+	/*
+	 * We never show the horizontal scrollbar in editable imhtmls becuase
+	 * it was causing weird lockups when typing text just as you type the
+	 * character that would cause both scrollbars to appear.  Definitely
+	 * seems like a gtk bug to me.
+	 */
+	sw = gtk_scrolled_window_new(NULL, NULL);
+	if (editable)
+		gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
+									   GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+	else
+		gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
+									   GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+	gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
+	gtk_widget_show(sw);
+
+	imhtml = gtk_imhtml_new(NULL, NULL);
+	gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable);
+	gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE);
+	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
+	if (editable && gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
+		gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(imhtml));
+	gtk_widget_show(imhtml);
+
+	if (editable) {
+		gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml);
+		gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
+	}
+	gaim_setup_imhtml(imhtml);
+
+	gtk_container_add(GTK_CONTAINER(sw), imhtml);
+
+	if (imhtml_ret != NULL)
+		*imhtml_ret = imhtml;
+
+	if (toolbar_ret != NULL)
+		*toolbar_ret = toolbar;
+
+	return frame;
+}
+
 void
 toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle)
 {
@@ -137,7 +207,7 @@
 
 		sensitivity = GTK_WIDGET_IS_SENSITIVE(element);
 
-		gtk_widget_set_sensitive(element, !sensitivity);	
+		gtk_widget_set_sensitive(element, !sensitivity);
 	}
 }