diff src/gtkimhtml.c @ 8420:c25c697525b7

[gaim-migrate @ 9150] Phase II. If anyone finds anything problematic here that can't be attributed to GtkIMHtml itself, please let me know (I'll probably tell you it can be attributed to GtkIMHtml itself ;)). Love, Sean. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Wed, 10 Mar 2004 06:10:00 +0000
parents 4a5b36510665
children 2e18099ded93
line wrap: on
line diff
--- a/src/gtkimhtml.c	Tue Mar 09 19:52:17 2004 +0000
+++ b/src/gtkimhtml.c	Wed Mar 10 06:10:00 2004 +0000
@@ -84,6 +84,14 @@
 	DRAG_URL
 };
 
+enum {
+	URL_CLICKED,
+	BUTTONS_UPDATE,
+	TOGGLE_FORMAT,
+	LAST_SIGNAL
+};
+static guint signals [LAST_SIGNAL] = { 0 };
+
 GtkTargetEntry selection_targets[] = {
 	{ "text/html", 0, TARGET_HTML },
 	{ "UTF8_STRING", 0, TARGET_UTF8_STRING },
@@ -360,6 +368,7 @@
 {	
 	char buf[7];
 	buf[0] = '\0';
+	GObject *object;
 
 	if (event->state & GDK_CONTROL_MASK)
 		switch (event->keyval) {
@@ -377,7 +386,12 @@
 		
 		case 'b':  /* ctrl-b is GDK_Left, which moves backwards. */
 		case 'B':
-			gtk_imhtml_toggle_bold(imhtml);
+			if (imhtml->format_functions & GTK_IMHTML_BOLD) {
+				gtk_imhtml_toggle_bold(imhtml);
+				object = g_object_ref(G_OBJECT(imhtml));
+				g_signal_emit(object, signals[TOGGLE_FORMAT], 0, GTK_IMHTML_BOLD);
+				g_object_unref(object);
+			}
 			return TRUE;
 			break;
 			
@@ -392,36 +406,28 @@
 			
 		case 'i':
 		case 'I':
-			/*set_toggle(gtkconv->toolbar.italic,
-			  !gtk_toggle_button_get_active(
-			  GTK_TOGGLE_BUTTON(gtkconv->toolbar.italic)));*/
-			gtk_imhtml_toggle_italic(imhtml);
+			if (imhtml->format_functions & GTK_IMHTML_ITALIC)
+				gtk_imhtml_toggle_italic(imhtml);
 			return TRUE;
 			break;
 			
 		case 'u':  /* ctrl-u is GDK_Clear, which clears the line. */
 		case 'U':
-			/*set_toggle(gtkconv->toolbar.underline,
-			  !gtk_toggle_button_get_active(
-			  GTK_TOGGLE_BUTTON(gtkconv->toolbar.underline)));*/
-			gtk_imhtml_toggle_underline(imhtml);
+			if (imhtml->format_functions & GTK_IMHTML_UNDERLINE)
+				gtk_imhtml_toggle_underline(imhtml);
 			return TRUE;
 			break;
 			
 		case '-':
-			/*set_toggle(gtkconv->toolbar.smaller_size,
-			  !gtk_toggle_button_get_active(
-			  GTK_TOGGLE_BUTTON(gtkconv->toolbar.smaller_size)));*/
-			gtk_imhtml_font_shrink(imhtml);
+			if (imhtml->format_functions & GTK_IMHTML_SHRINK)
+				gtk_imhtml_font_shrink(imhtml);
 			return TRUE;
 			break;
 			
 		case '=':
 		case '+':
-			/*set_toggle(gtkconv->toolbar.larger_size,
-			  !gtk_toggle_button_get_active(
-			  GTK_TOGGLE_BUTTON(gtkconv->toolbar.larger_size)));*/
-			gtk_imhtml_font_grow(imhtml);
+			if (imhtml->format_functions & GTK_IMHTML_GROW)
+				gtk_imhtml_font_grow(imhtml);
 			return TRUE;
 			break;
 			
@@ -566,13 +572,6 @@
 
 static GtkTextViewClass *parent_class = NULL;
 
-/* GtkIMHtml has one signal--URL_CLICKED */
-enum {
-	URL_CLICKED,
-	LAST_SIGNAL
-};
-static guint signals [LAST_SIGNAL] = { 0 };
-
 static void
 gtk_imhtml_finalize (GObject *object)
 {
@@ -616,6 +615,24 @@
 						g_cclosure_marshal_VOID__POINTER,
 						G_TYPE_NONE, 1,
 						G_TYPE_POINTER);
+	signals[BUTTONS_UPDATE] = g_signal_new("format_functions_update",
+					       G_TYPE_FROM_CLASS(gobject_class),
+					       G_SIGNAL_RUN_FIRST,
+					       G_STRUCT_OFFSET(GtkIMHtmlClass, buttons_update),
+					       NULL,
+					       0,
+					       g_cclosure_marshal_VOID__POINTER,
+					       G_TYPE_NONE, 1,
+					       G_TYPE_INT);
+	signals[TOGGLE_FORMAT] = g_signal_new("format_function_toggle",
+					      G_TYPE_FROM_CLASS(gobject_class),
+					      G_SIGNAL_RUN_FIRST,
+					      G_STRUCT_OFFSET(GtkIMHtmlClass, toggle_format),
+					      NULL,
+					      0,
+					      g_cclosure_marshal_VOID__POINTER,
+					      G_TYPE_NONE, 1,
+					      G_TYPE_INT);
 	gobject_class->finalize = gtk_imhtml_finalize;
 }
 
@@ -690,7 +707,6 @@
 	imhtml->scalables = NULL;
 
 	gtk_imhtml_set_editable(imhtml, FALSE);
-
 }
 
 GtkWidget *gtk_imhtml_new(void *a, void *b)
@@ -1373,6 +1389,7 @@
 	GtkIMHtmlScalable *scalable = NULL;
 	int y, height;
 
+	printf("Appending: %s\n", text);
 
 	g_return_val_if_fail (imhtml != NULL, NULL);
 	g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
@@ -2462,6 +2479,15 @@
 	 */
 	/* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */
 	imhtml->editable = editable;
+	imhtml->format_functions = !editable ? 0 : -1;
+}
+
+void gtk_imhtml_set_format_functions(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons)
+{
+	GObject *object = g_object_ref(G_OBJECT(imhtml));
+	g_signal_emit(object, signals[BUTTONS_UPDATE], 0, buttons);
+	imhtml->format_functions = buttons;
+	g_object_unref(object);
 }
 
 gboolean gtk_imhtml_get_editable(GtkIMHtml *imhtml)