# HG changeset patch # User Richard Laager # Date 1124135192 0 # Node ID ffc86d9ad8b76e3b266d24e8b5f5f53a1d6ef4a6 # Parent 67a929d50cfe8c785d267ddc3c816f9289da5ae0 [gaim-migrate @ 13461] Make the new clear formatting button work. committer: Tailor Script diff -r 67a929d50cfe -r ffc86d9ad8b7 src/gtkconv.c --- a/src/gtkconv.c Mon Aug 15 16:22:25 2005 +0000 +++ b/src/gtkconv.c Mon Aug 15 19:46:32 2005 +0000 @@ -364,6 +364,12 @@ } } +static void +clear_formatting_cb(GtkIMHtml *imhtml, GaimGtkConversation *gtkconv) +{ + default_formatize(gtkconv); +} + static const char * gaim_gtk_get_cmd_prefix(void) { @@ -1766,7 +1772,6 @@ conv->send_history = conv->send_history->next; gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); - gtk_imhtml_clear_formatting(GTK_IMHTML(gtkconv->entry)); gtk_imhtml_append_text_with_images( GTK_IMHTML(gtkconv->entry), conv->send_history->data, 0, NULL); @@ -1790,7 +1795,6 @@ conv->send_history = conv->send_history->prev; gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); - gtk_imhtml_clear_formatting(GTK_IMHTML(gtkconv->entry)); gtk_imhtml_append_text_with_images( GTK_IMHTML(gtkconv->entry), conv->send_history->data, 0, NULL); @@ -4182,6 +4186,9 @@ */ default_formatize(gtkconv); + g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", + G_CALLBACK(clear_formatting_cb), gtkconv); + gtkconv->u.im->animate = gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons"); gtkconv->u.im->show_icon = TRUE; diff -r 67a929d50cfe -r ffc86d9ad8b7 src/gtkimhtml.c --- a/src/gtkimhtml.c Mon Aug 15 16:22:25 2005 +0000 +++ b/src/gtkimhtml.c Mon Aug 15 19:46:32 2005 +0000 @@ -1113,8 +1113,7 @@ { /* since this function is the handler for the formatting keystrokes, we need to check here that the formatting attempted is permitted */ - if (!(imhtml->format_functions & buttons)) - return; + buttons &= imhtml->format_functions; switch (buttons) { case GTK_IMHTML_BOLD: @@ -3831,23 +3830,42 @@ void gtk_imhtml_clear_formatting(GtkIMHtml *imhtml) { - gboolean bold, italic, uline; - bold = italic = uline = FALSE; - - gtk_imhtml_get_current_format(imhtml, &bold, &italic, &uline); - if (bold) - gtk_imhtml_toggle_bold(imhtml); - if (italic) - gtk_imhtml_toggle_italic(imhtml); - if (uline) - gtk_imhtml_toggle_underline(imhtml); - - gtk_imhtml_font_set_size(imhtml, 3); - gtk_imhtml_toggle_fontface(imhtml, NULL); - - gtk_imhtml_toggle_forecolor(imhtml, NULL); - gtk_imhtml_toggle_backcolor(imhtml, NULL); - gtk_imhtml_toggle_background(imhtml, NULL); + GtkTextIter start, end; + GObject *object; + + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + + /* Move the selection bounds, so the format functions will know we want to + * manipulate the formatting on the entire buffer. */ +#if GTK_CHECK_VERSION(2,4,0) + gtk_text_buffer_select_range(imhtml->text_buffer, &end, &end); +#else + gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "insert", &end); + gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "selection_bound", &end); +#endif + + gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); + gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); + gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); + gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); + remove_font_size(imhtml, &start, &end, TRUE); + remove_font_face(imhtml, &start, &end, TRUE); + remove_font_forecolor(imhtml, &start, &end, TRUE); + remove_font_backcolor(imhtml, &start, &end, TRUE); + remove_font_background(imhtml, &start, &end, TRUE); + + imhtml->edit.bold = 0; + imhtml->edit.italic = 0; + imhtml->edit.underline = 0; + imhtml->edit.strike = 0; + imhtml->edit.fontsize = 3; + imhtml->edit.forecolor = NULL; + imhtml->edit.backcolor = NULL; + imhtml->edit.background = NULL; + + object = g_object_ref(G_OBJECT(imhtml)); + g_signal_emit(object, signals[CLEAR_FORMAT], 0); + g_object_unref(object); gtk_widget_grab_focus(GTK_WIDGET(imhtml)); } @@ -3940,12 +3958,14 @@ gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + if (imhtml->edit.bold) gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); - } } @@ -3972,8 +3992,11 @@ gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { - if (imhtml->edit.italic) + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + + if (imhtml->edit.bold) gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); @@ -4002,8 +4025,11 @@ gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { - if (imhtml->edit.underline) + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + + if (imhtml->edit.bold) gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); @@ -4033,8 +4059,11 @@ gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { - if (imhtml->edit.strike) + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + + if (imhtml->edit.bold) gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); else gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); @@ -4064,7 +4093,10 @@ remove_font_size(imhtml, &start, &end, TRUE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + remove_font_size(imhtml, &start, &end, FALSE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); @@ -4092,7 +4124,10 @@ remove_font_size(imhtml, &start, &end, TRUE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + remove_font_size(imhtml, &start, &end, FALSE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); @@ -4127,7 +4162,10 @@ remove_font_size(imhtml, &start, &end, TRUE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); - } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { + } else if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + remove_font_size(imhtml, &start, &end, FALSE); gtk_text_buffer_apply_tag(imhtml->text_buffer, find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); @@ -4163,7 +4201,10 @@ } else { \ gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, \ gtk_text_buffer_get_mark(imhtml->text_buffer, "insert")); \ - if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { \ + if (imhtml->editable) { \ + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) \ + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \ +\ remove_func(imhtml, &start, &end, FALSE); \ gtk_text_buffer_apply_tag(imhtml->text_buffer, \ find_func(imhtml, \ @@ -4230,7 +4271,10 @@ g_object_set_data_full(G_OBJECT(linktag), "link_url", g_strdup(url), g_free); g_signal_connect(G_OBJECT(linktag), "event", G_CALLBACK(tag_event), NULL); - if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { + if (imhtml->editable) { + if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) + gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); + remove_font_link(imhtml, &start, &end, FALSE); gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end); } diff -r 67a929d50cfe -r ffc86d9ad8b7 src/gtkimhtmltoolbar.c --- a/src/gtkimhtmltoolbar.c Mon Aug 15 16:22:25 2005 +0000 +++ b/src/gtkimhtmltoolbar.c Mon Aug 15 19:46:32 2005 +0000 @@ -38,6 +38,11 @@ static GtkHBoxClass *parent_class = NULL; +static void toggle_button_set_active_block(GtkToggleButton *button, + gboolean is_active, + GtkIMHtmlToolbar *toolbar); + + static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) { g_return_if_fail(toolbar != NULL); @@ -324,7 +329,7 @@ static void clear_formatting_cb(GtkWidget *clear, GtkIMHtmlToolbar *toolbar) { - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->clear), FALSE); + toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->clear), FALSE, toolbar); gtk_imhtml_clear_formatting(GTK_IMHTML(toolbar->imhtml)); } @@ -772,21 +777,6 @@ g_object_unref(object); } -static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) -{ - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) - toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, - toolbar); - - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic))) - toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), - FALSE, toolbar); - - if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline))) - toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), - FALSE, toolbar); -} - static void update_buttons(GtkIMHtmlToolbar *toolbar) { gboolean bold, italic, underline; char *tmp; @@ -1111,7 +1101,7 @@ toolbar->imhtml = imhtml; g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar); g_signal_connect_after(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_after(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(update_format_cb), toolbar); g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar); g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar); diff -r 67a929d50cfe -r ffc86d9ad8b7 src/gtkprefs.c --- a/src/gtkprefs.c Mon Aug 15 16:22:25 2005 +0000 +++ b/src/gtkprefs.c Mon Aug 15 19:46:32 2005 +0000 @@ -818,6 +818,20 @@ } } +static void +formatting_clear_cb(GtkIMHtml *imhtml, void *data) +{ + gaim_prefs_set_bool("/gaim/gtk/conversations/send_bold", FALSE); + gaim_prefs_set_bool("/gaim/gtk/conversations/send_italic", FALSE); + gaim_prefs_set_bool("/gaim/gtk/conversations/send_underline", FALSE); + + gaim_prefs_set_int("/gaim/gtk/conversations/font_size", 3); + + gaim_prefs_set_string("/gaim/gtk/conversations/font_face", ""); + gaim_prefs_set_string("/gaim/gtk/conversations/fgcolor", ""); + gaim_prefs_set_string("/gaim/gtk/conversations/bgcolor", ""); +} + static GtkWidget * list_page() { @@ -929,7 +943,8 @@ g_signal_connect_after(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(formatting_toggle_cb), toolbar); - + g_signal_connect_after(G_OBJECT(imhtml), "format_function_clear", + G_CALLBACK(formatting_clear_cb), NULL); /* All the tab options! */ vbox = gaim_gtk_make_frame(ret, _("Tab Options"));