diff src/gtkimhtmltoolbar.c @ 8516:5b25f72c4723

[gaim-migrate @ 9254] " Buttons don't push in and out when the cursor enters regions that are differently formatted. For example, if you move the cursor to a place where the text is bold, the B button should probably be pushed in. this patch adds the toolbar to update to the current format when the mouse is clicked. I also cleaned up some duplicated code and some logic." --Gary Kramlich okay, that less than clear text basically boils down to you can move the cursor with the mouse as well as the keyboard without confusing the toolbar now committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sun, 28 Mar 2004 18:00:04 +0000
parents 887c0259b47b
children cc2ce209cc46
line wrap: on
line diff
--- a/src/gtkimhtmltoolbar.c	Sun Mar 28 17:57:32 2004 +0000
+++ b/src/gtkimhtmltoolbar.c	Sun Mar 28 18:00:04 2004 +0000
@@ -701,46 +701,38 @@
 		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
 									   FALSE, toolbar);
 }
-static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar)
-{
+
+static void update_buttons(GtkIMHtmlToolbar *toolbar) {
 	gboolean bold, italic, underline;
 	
 	bold = italic = underline = FALSE;
-	gtk_imhtml_get_current_format(imhtml, -1, &bold, &italic, &underline);
+	gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml),
+								  &bold, &italic, &underline);
 
 	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold)
 		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold,
 									   toolbar);
-	
+
 	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic)
 		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic,
 									   toolbar);
-	
+
 	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline)
 		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
 									   underline, toolbar);	
 }
 
-static void cursor_moved_cb(GtkIMHtml *imhtml, GtkMovementStep step,
-							gint change, gboolean selected,
-							GtkIMHtmlToolbar *toolbar)
-{
-	gboolean bold, italic, underline;
-
-	bold = italic = underline = FALSE;
-	gtk_imhtml_get_current_format(imhtml, change, &bold, &italic, &underline);	
+static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) {
+	update_buttons(toolbar);
+}
 
-	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)) != bold)
-		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold,
-									   toolbar);
-	
-	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)) != italic)
-		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic,
-									   toolbar);
-	
-	if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline)
-		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
-									   underline, toolbar);
+static void mark_set_cb(GtkTextBuffer *buffer, GtkTextIter *location,
+						GtkTextMark *mark, GtkIMHtmlToolbar *toolbar)
+{
+	if(mark != gtk_text_buffer_get_insert(buffer))
+		return;
+
+	update_buttons(toolbar);
 }
 
 enum {
@@ -1002,11 +994,11 @@
 	g_signal_connect(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar);
 	g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar);
 	g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar);
-	g_signal_connect_after(G_OBJECT(imhtml), "move_cursor", G_CALLBACK(cursor_moved_cb), toolbar);
+	g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar);
 
 	bold = italic = underline = FALSE;
 
-	gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), 0, &bold, &italic, &underline);
+	gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline);
 	
 	if(bold)
 		toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold,