Mercurial > pidgin
comparison src/gtkimhtml.c @ 11275:ffc86d9ad8b7
[gaim-migrate @ 13461]
Make the new clear formatting button work.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Mon, 15 Aug 2005 19:46:32 +0000 |
parents | 1cbe76d30e81 |
children | 17ebda61c6ce |
comparison
equal
deleted
inserted
replaced
11274:67a929d50cfe | 11275:ffc86d9ad8b7 |
---|---|
1111 | 1111 |
1112 static void imhtml_toggle_format(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons) | 1112 static void imhtml_toggle_format(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons) |
1113 { | 1113 { |
1114 /* since this function is the handler for the formatting keystrokes, | 1114 /* since this function is the handler for the formatting keystrokes, |
1115 we need to check here that the formatting attempted is permitted */ | 1115 we need to check here that the formatting attempted is permitted */ |
1116 if (!(imhtml->format_functions & buttons)) | 1116 buttons &= imhtml->format_functions; |
1117 return; | |
1118 | 1117 |
1119 switch (buttons) { | 1118 switch (buttons) { |
1120 case GTK_IMHTML_BOLD: | 1119 case GTK_IMHTML_BOLD: |
1121 imhtml_toggle_bold(imhtml); | 1120 imhtml_toggle_bold(imhtml); |
1122 break; | 1121 break; |
3829 } | 3828 } |
3830 | 3829 |
3831 void | 3830 void |
3832 gtk_imhtml_clear_formatting(GtkIMHtml *imhtml) | 3831 gtk_imhtml_clear_formatting(GtkIMHtml *imhtml) |
3833 { | 3832 { |
3834 gboolean bold, italic, uline; | 3833 GtkTextIter start, end; |
3835 bold = italic = uline = FALSE; | 3834 GObject *object; |
3836 | 3835 |
3837 gtk_imhtml_get_current_format(imhtml, &bold, &italic, &uline); | 3836 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
3838 if (bold) | 3837 |
3839 gtk_imhtml_toggle_bold(imhtml); | 3838 /* Move the selection bounds, so the format functions will know we want to |
3840 if (italic) | 3839 * manipulate the formatting on the entire buffer. */ |
3841 gtk_imhtml_toggle_italic(imhtml); | 3840 #if GTK_CHECK_VERSION(2,4,0) |
3842 if (uline) | 3841 gtk_text_buffer_select_range(imhtml->text_buffer, &end, &end); |
3843 gtk_imhtml_toggle_underline(imhtml); | 3842 #else |
3844 | 3843 gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "insert", &end); |
3845 gtk_imhtml_font_set_size(imhtml, 3); | 3844 gtk_text_buffer_move_mark_by_name(imhtml->text_buffer, "selection_bound", &end); |
3846 gtk_imhtml_toggle_fontface(imhtml, NULL); | 3845 #endif |
3847 | 3846 |
3848 gtk_imhtml_toggle_forecolor(imhtml, NULL); | 3847 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); |
3849 gtk_imhtml_toggle_backcolor(imhtml, NULL); | 3848 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); |
3850 gtk_imhtml_toggle_background(imhtml, NULL); | 3849 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); |
3850 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); | |
3851 remove_font_size(imhtml, &start, &end, TRUE); | |
3852 remove_font_face(imhtml, &start, &end, TRUE); | |
3853 remove_font_forecolor(imhtml, &start, &end, TRUE); | |
3854 remove_font_backcolor(imhtml, &start, &end, TRUE); | |
3855 remove_font_background(imhtml, &start, &end, TRUE); | |
3856 | |
3857 imhtml->edit.bold = 0; | |
3858 imhtml->edit.italic = 0; | |
3859 imhtml->edit.underline = 0; | |
3860 imhtml->edit.strike = 0; | |
3861 imhtml->edit.fontsize = 3; | |
3862 imhtml->edit.forecolor = NULL; | |
3863 imhtml->edit.backcolor = NULL; | |
3864 imhtml->edit.background = NULL; | |
3865 | |
3866 object = g_object_ref(G_OBJECT(imhtml)); | |
3867 g_signal_emit(object, signals[CLEAR_FORMAT], 0); | |
3868 g_object_unref(object); | |
3851 | 3869 |
3852 gtk_widget_grab_focus(GTK_WIDGET(imhtml)); | 3870 gtk_widget_grab_focus(GTK_WIDGET(imhtml)); |
3853 } | 3871 } |
3854 | 3872 |
3855 /* | 3873 /* |
3938 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 3956 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
3939 if (imhtml->edit.bold) | 3957 if (imhtml->edit.bold) |
3940 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); | 3958 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); |
3941 else | 3959 else |
3942 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); | 3960 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); |
3943 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 3961 } else if (imhtml->editable) { |
3962 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) | |
3963 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
3964 | |
3944 if (imhtml->edit.bold) | 3965 if (imhtml->edit.bold) |
3945 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); | 3966 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); |
3946 else | 3967 else |
3947 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); | 3968 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "BOLD", &start, &end); |
3948 | |
3949 } | 3969 } |
3950 } | 3970 } |
3951 | 3971 |
3952 void gtk_imhtml_toggle_bold(GtkIMHtml *imhtml) | 3972 void gtk_imhtml_toggle_bold(GtkIMHtml *imhtml) |
3953 { | 3973 { |
3970 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 3990 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
3971 if (imhtml->edit.italic) | 3991 if (imhtml->edit.italic) |
3972 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); | 3992 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); |
3973 else | 3993 else |
3974 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); | 3994 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); |
3975 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 3995 } else if (imhtml->editable) { |
3976 if (imhtml->edit.italic) | 3996 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) |
3997 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
3998 | |
3999 if (imhtml->edit.bold) | |
3977 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); | 4000 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); |
3978 else | 4001 else |
3979 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); | 4002 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "ITALICS", &start, &end); |
3980 } | 4003 } |
3981 } | 4004 } |
4000 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 4023 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
4001 if (imhtml->edit.underline) | 4024 if (imhtml->edit.underline) |
4002 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); | 4025 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); |
4003 else | 4026 else |
4004 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); | 4027 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); |
4005 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4028 } else if (imhtml->editable) { |
4006 if (imhtml->edit.underline) | 4029 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) |
4030 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4031 | |
4032 if (imhtml->edit.bold) | |
4007 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); | 4033 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); |
4008 else | 4034 else |
4009 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); | 4035 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "UNDERLINE", &start, &end); |
4010 } | 4036 } |
4011 } | 4037 } |
4031 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 4057 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
4032 if (imhtml->edit.strike) | 4058 if (imhtml->edit.strike) |
4033 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); | 4059 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); |
4034 else | 4060 else |
4035 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); | 4061 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); |
4036 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4062 } else if (imhtml->editable) { |
4037 if (imhtml->edit.strike) | 4063 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) |
4064 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4065 | |
4066 if (imhtml->edit.bold) | |
4038 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); | 4067 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); |
4039 else | 4068 else |
4040 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); | 4069 gtk_text_buffer_remove_tag_by_name(imhtml->text_buffer, "STRIKE", &start, &end); |
4041 } | 4070 } |
4042 } | 4071 } |
4062 if (imhtml->wbfo) { | 4091 if (imhtml->wbfo) { |
4063 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 4092 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
4064 remove_font_size(imhtml, &start, &end, TRUE); | 4093 remove_font_size(imhtml, &start, &end, TRUE); |
4065 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4094 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4066 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4095 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4067 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4096 } else if (imhtml->editable) { |
4097 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) | |
4098 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4099 | |
4068 remove_font_size(imhtml, &start, &end, FALSE); | 4100 remove_font_size(imhtml, &start, &end, FALSE); |
4069 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4101 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4070 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4102 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4071 } | 4103 } |
4072 | 4104 |
4090 if (imhtml->wbfo) { | 4122 if (imhtml->wbfo) { |
4091 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 4123 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
4092 remove_font_size(imhtml, &start, &end, TRUE); | 4124 remove_font_size(imhtml, &start, &end, TRUE); |
4093 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4125 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4094 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4126 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4095 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4127 } else if (imhtml->editable) { |
4128 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) | |
4129 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4130 | |
4096 remove_font_size(imhtml, &start, &end, FALSE); | 4131 remove_font_size(imhtml, &start, &end, FALSE); |
4097 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4132 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4098 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4133 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4099 } | 4134 } |
4100 } | 4135 } |
4125 if (imhtml->wbfo) { | 4160 if (imhtml->wbfo) { |
4126 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | 4161 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); |
4127 remove_font_size(imhtml, &start, &end, TRUE); | 4162 remove_font_size(imhtml, &start, &end, TRUE); |
4128 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4163 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4129 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4164 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4130 } else if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4165 } else if (imhtml->editable) { |
4166 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) | |
4167 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4168 | |
4131 remove_font_size(imhtml, &start, &end, FALSE); | 4169 remove_font_size(imhtml, &start, &end, FALSE); |
4132 gtk_text_buffer_apply_tag(imhtml->text_buffer, | 4170 gtk_text_buffer_apply_tag(imhtml->text_buffer, |
4133 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); | 4171 find_font_size_tag(imhtml, imhtml->edit.fontsize), &start, &end); |
4134 } | 4172 } |
4135 } | 4173 } |
4161 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ | 4199 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ |
4162 find_func(imhtml, edit_field), &start, &end); \ | 4200 find_func(imhtml, edit_field), &start, &end); \ |
4163 } else { \ | 4201 } else { \ |
4164 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, \ | 4202 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, \ |
4165 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert")); \ | 4203 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert")); \ |
4166 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { \ | 4204 if (imhtml->editable) { \ |
4205 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) \ | |
4206 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \ | |
4207 \ | |
4167 remove_func(imhtml, &start, &end, FALSE); \ | 4208 remove_func(imhtml, &start, &end, FALSE); \ |
4168 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ | 4209 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ |
4169 find_func(imhtml, \ | 4210 find_func(imhtml, \ |
4170 edit_field), \ | 4211 edit_field), \ |
4171 &start, &end); \ | 4212 &start, &end); \ |
4228 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL); | 4269 imhtml->edit.link = linktag = gtk_text_buffer_create_tag(imhtml->text_buffer, str, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL); |
4229 } | 4270 } |
4230 g_object_set_data_full(G_OBJECT(linktag), "link_url", g_strdup(url), g_free); | 4271 g_object_set_data_full(G_OBJECT(linktag), "link_url", g_strdup(url), g_free); |
4231 g_signal_connect(G_OBJECT(linktag), "event", G_CALLBACK(tag_event), NULL); | 4272 g_signal_connect(G_OBJECT(linktag), "event", G_CALLBACK(tag_event), NULL); |
4232 | 4273 |
4233 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { | 4274 if (imhtml->editable) { |
4275 if (!gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) | |
4276 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); | |
4277 | |
4234 remove_font_link(imhtml, &start, &end, FALSE); | 4278 remove_font_link(imhtml, &start, &end, FALSE); |
4235 gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end); | 4279 gtk_text_buffer_apply_tag(imhtml->text_buffer, linktag, &start, &end); |
4236 } | 4280 } |
4237 } | 4281 } |
4238 | 4282 |