comparison src/gtkimhtmltoolbar.c @ 11267:477e5cca8287

[gaim-migrate @ 13449] Combining the Message Text tab in the preferences into the Conversation tab. Along the way, I found and fixed a number of bugs relating to the formatting toolbar, etc. This also includes part of patch #1240388 from Sadrul. I'm still seeing a couple bugs with the backcolor stuff, but I confirmed they were there before this change. Hopefully I haven't introduced any new bugs. Holler at me if I did. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 15 Aug 2005 04:15:22 +0000
parents a511b77a368b
children b33eccbc3a10
comparison
equal deleted inserted replaced
11266:a0e769ca84cf 11267:477e5cca8287
38 38
39 static GtkHBoxClass *parent_class = NULL; 39 static GtkHBoxClass *parent_class = NULL;
40 40
41 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar) 41 static void do_bold(GtkWidget *bold, GtkIMHtmlToolbar *toolbar)
42 { 42 {
43 GObject *object; 43 g_return_if_fail(toolbar != NULL);
44 44 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml));
45 gtk_widget_grab_focus(toolbar->imhtml);
46 }
47
48 static void
49 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar)
50 {
51 g_return_if_fail(toolbar != NULL);
52 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml));
53 gtk_widget_grab_focus(toolbar->imhtml);
54 }
55
56 static void
57 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar)
58 {
59 g_return_if_fail(toolbar != NULL);
60 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml));
61 gtk_widget_grab_focus(toolbar->imhtml);
62 }
63
64 static void
65 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar)
66 {
67 g_return_if_fail(toolbar != NULL);
68 gtk_imhtml_font_shrink(GTK_IMHTML(toolbar->imhtml));
69 gtk_widget_grab_focus(toolbar->imhtml);
70 }
71
72 static void
73 do_big(GtkWidget *large, GtkIMHtmlToolbar *toolbar)
74 {
45 g_return_if_fail(toolbar); 75 g_return_if_fail(toolbar);
46 76 gtk_imhtml_font_grow(GTK_IMHTML(toolbar->imhtml));
47 /* block the format_function_toggle handler */
48 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml)));
49 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
50 NULL, toolbar);
51 gtk_imhtml_toggle_bold(GTK_IMHTML(toolbar->imhtml));
52 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
53 NULL, toolbar);
54 g_object_unref(object);
55
56 gtk_widget_grab_focus(toolbar->imhtml);
57 }
58
59 static void
60 do_italic(GtkWidget *italic, GtkIMHtmlToolbar *toolbar)
61 {
62 GObject *object;
63
64 g_return_if_fail(toolbar);
65
66 /* block the format_function_toggle handler */
67 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml)));
68 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
69 NULL, toolbar);
70 gtk_imhtml_toggle_italic(GTK_IMHTML(toolbar->imhtml));
71 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
72 NULL, toolbar);
73 g_object_unref(object);
74
75 gtk_widget_grab_focus(toolbar->imhtml);
76 }
77
78 static void
79 do_underline(GtkWidget *underline, GtkIMHtmlToolbar *toolbar)
80 {
81 GObject *object;
82
83 g_return_if_fail(toolbar);
84
85 /* block the format_function_toggle handler */
86 object = g_object_ref(G_OBJECT(GTK_IMHTML(toolbar->imhtml)));
87 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
88 NULL, toolbar);
89 gtk_imhtml_toggle_underline(GTK_IMHTML(toolbar->imhtml));
90 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL,
91 NULL, toolbar);
92 g_object_unref(object);
93
94 gtk_widget_grab_focus(toolbar->imhtml);
95 }
96
97 static void
98 do_small(GtkWidget *smalltb, GtkIMHtmlToolbar *toolbar)
99 {
100 g_return_if_fail(toolbar);
101 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size)))
102 gtk_imhtml_font_shrink(GTK_IMHTML(toolbar->imhtml));
103 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size), FALSE);
104 gtk_widget_grab_focus(toolbar->imhtml);
105 }
106
107 static void
108 do_big(GtkWidget *large, GtkIMHtmlToolbar *toolbar)
109 {
110 g_return_if_fail(toolbar);
111 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->larger_size)))
112 gtk_imhtml_font_grow(GTK_IMHTML(toolbar->imhtml));
113 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->larger_size), FALSE);
114 gtk_widget_grab_focus(toolbar->imhtml); 77 gtk_widget_grab_focus(toolbar->imhtml);
115 } 78 }
116 79
117 static void 80 static void
118 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event, 81 destroy_toolbar_font(GtkWidget *widget, GdkEvent *event,
119 GtkIMHtmlToolbar *toolbar) 82 GtkIMHtmlToolbar *toolbar)
120 { 83 {
121 if (widget != NULL) 84 if (widget != NULL)
122 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->font), FALSE); 85 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), "");
123 86
124 if (toolbar->font_dialog != NULL) 87 if (toolbar->font_dialog != NULL)
125 { 88 {
126 gtk_widget_destroy(toolbar->font_dialog); 89 gtk_widget_destroy(toolbar->font_dialog);
127 toolbar->font_dialog = NULL; 90 toolbar->font_dialog = NULL;
159 space = strrchr(fontname, ' '); 122 space = strrchr(fontname, ' ');
160 if(space && isdigit(*(space+1))) 123 if(space && isdigit(*(space+1)))
161 *space = '\0'; 124 *space = '\0';
162 125
163 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname); 126 gtk_imhtml_toggle_fontface(GTK_IMHTML(toolbar->imhtml), fontname);
164
165 g_free(fontname); 127 g_free(fontname);
166 128
167 cancel_toolbar_font(NULL, toolbar); 129 cancel_toolbar_font(NULL, toolbar);
168 } 130 }
169 131
170 static void 132 static void
171 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar) 133 toggle_font(GtkWidget *font, GtkIMHtmlToolbar *toolbar)
172 { 134 {
173 char *fontname;
174
175 g_return_if_fail(toolbar); 135 g_return_if_fail(toolbar);
176 136
177 fontname = gtk_imhtml_get_current_fontface(GTK_IMHTML(toolbar->imhtml)); 137 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(font))) {
178 138 char *fontname = gtk_imhtml_get_current_fontface(GTK_IMHTML(toolbar->imhtml));
179 if (!toolbar->font_dialog) { 139
180 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font")); 140 if (!toolbar->font_dialog) {
181 141 toolbar->font_dialog = gtk_font_selection_dialog_new(_("Select Font"));
182 g_object_set_data(G_OBJECT(toolbar->font_dialog), "gaim_toolbar", toolbar); 142
183 143 g_object_set_data(G_OBJECT(toolbar->font_dialog), "gaim_toolbar", toolbar);
184 if(fontname) { 144
185 char fonttif[128]; 145 if(fontname) {
186 g_snprintf(fonttif, sizeof(fonttif), "%s 12", fontname); 146 char *fonttif = g_strdup_printf("%s 12", fontname);
187 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), 147 g_free(fontname);
188 fonttif); 148 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog),
189 g_free(fontname); 149 fonttif);
190 } else { 150 g_free(fonttif);
191 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog), 151 } else {
192 DEFAULT_FONT_FACE); 152 gtk_font_selection_dialog_set_font_name(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog),
153 DEFAULT_FONT_FACE);
154 }
155
156 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event",
157 G_CALLBACK(destroy_toolbar_font), toolbar);
158 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked",
159 G_CALLBACK(apply_font), toolbar->font_dialog);
160 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked",
161 G_CALLBACK(cancel_toolbar_font), toolbar);
162 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize",
163 G_CALLBACK(realize_toolbar_font), toolbar);
193 } 164 }
194
195 g_signal_connect(G_OBJECT(toolbar->font_dialog), "delete_event",
196 G_CALLBACK(destroy_toolbar_font), toolbar);
197 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->ok_button), "clicked",
198 G_CALLBACK(apply_font), toolbar->font_dialog);
199 g_signal_connect(G_OBJECT(GTK_FONT_SELECTION_DIALOG(toolbar->font_dialog)->cancel_button), "clicked",
200 G_CALLBACK(cancel_toolbar_font), toolbar);
201 g_signal_connect_after(G_OBJECT(toolbar->font_dialog), "realize",
202 G_CALLBACK(realize_toolbar_font), toolbar);
203
204 gtk_window_present(GTK_WINDOW(toolbar->font_dialog)); 165 gtk_window_present(GTK_WINDOW(toolbar->font_dialog));
205 } else { 166 } else {
206 cancel_toolbar_font(NULL, toolbar); 167 cancel_toolbar_font(font, toolbar);
207 } 168 }
208 gtk_widget_grab_focus(toolbar->imhtml); 169 gtk_widget_grab_focus(toolbar->imhtml);
209 } 170 }
210 171
211 static void 172 static void
212 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event, 173 destroy_toolbar_fgcolor(GtkWidget *widget, GdkEvent *event,
213 GtkIMHtmlToolbar *toolbar) 174 GtkIMHtmlToolbar *toolbar)
214 { 175 {
215 if (widget != NULL) 176 if (widget != NULL)
216 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->fgcolor), FALSE); 177 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), "");
217 178
218 if (toolbar->fgcolor_dialog != NULL) 179 if (toolbar->fgcolor_dialog != NULL)
219 { 180 {
220 gtk_widget_destroy(toolbar->fgcolor_dialog); 181 gtk_widget_destroy(toolbar->fgcolor_dialog);
221 toolbar->fgcolor_dialog = NULL; 182 toolbar->fgcolor_dialog = NULL;
239 g_snprintf(open_tag, 23, "#%02X%02X%02X", 200 g_snprintf(open_tag, 23, "#%02X%02X%02X",
240 text_color.red / 256, 201 text_color.red / 256,
241 text_color.green / 256, 202 text_color.green / 256,
242 text_color.blue / 256); 203 text_color.blue / 256);
243 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag); 204 gtk_imhtml_toggle_forecolor(GTK_IMHTML(toolbar->imhtml), open_tag);
244
245 g_free(open_tag); 205 g_free(open_tag);
206
246 cancel_toolbar_fgcolor(NULL, toolbar); 207 cancel_toolbar_fgcolor(NULL, toolbar);
247 } 208 }
248 209
249 static void 210 static void
250 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) 211 toggle_fg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar)
270 G_CALLBACK(destroy_toolbar_fgcolor), toolbar); 231 G_CALLBACK(destroy_toolbar_fgcolor), toolbar);
271 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked", 232 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->ok_button), "clicked",
272 G_CALLBACK(do_fgcolor), colorsel); 233 G_CALLBACK(do_fgcolor), colorsel);
273 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked", 234 g_signal_connect(G_OBJECT (GTK_COLOR_SELECTION_DIALOG(toolbar->fgcolor_dialog)->cancel_button), "clicked",
274 G_CALLBACK(cancel_toolbar_fgcolor), toolbar); 235 G_CALLBACK(cancel_toolbar_fgcolor), toolbar);
275
276 } 236 }
277 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog)); 237 gtk_window_present(GTK_WINDOW(toolbar->fgcolor_dialog));
278 } else if (toolbar->fgcolor_dialog != NULL) { 238 } else {
279 cancel_toolbar_fgcolor(color, toolbar); 239 cancel_toolbar_fgcolor(color, toolbar);
280 } else {
281 /* gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); */
282 } 240 }
283 gtk_widget_grab_focus(toolbar->imhtml); 241 gtk_widget_grab_focus(toolbar->imhtml);
284 } 242 }
285 243
286 static void 244 static void
287 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event, 245 destroy_toolbar_bgcolor(GtkWidget *widget, GdkEvent *event,
288 GtkIMHtmlToolbar *toolbar) 246 GtkIMHtmlToolbar *toolbar)
289 { 247 {
290 if (widget != NULL) 248 if (widget != NULL) {
291 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->bgcolor), FALSE); 249 if (gtk_text_buffer_get_selection_bounds(GTK_IMHTML(toolbar->imhtml)->text_buffer, NULL, NULL))
250 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), "");
251 else
252 gtk_imhtml_toggle_background(GTK_IMHTML(toolbar->imhtml), "");
253 }
292 254
293 if (toolbar->bgcolor_dialog != NULL) 255 if (toolbar->bgcolor_dialog != NULL)
294 { 256 {
295 gtk_widget_destroy(toolbar->bgcolor_dialog); 257 gtk_widget_destroy(toolbar->bgcolor_dialog);
296 toolbar->bgcolor_dialog = NULL; 258 toolbar->bgcolor_dialog = NULL;
317 text_color.blue / 256); 279 text_color.blue / 256);
318 if (gtk_text_buffer_get_selection_bounds(GTK_IMHTML(toolbar->imhtml)->text_buffer, NULL, NULL)) 280 if (gtk_text_buffer_get_selection_bounds(GTK_IMHTML(toolbar->imhtml)->text_buffer, NULL, NULL))
319 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag); 281 gtk_imhtml_toggle_backcolor(GTK_IMHTML(toolbar->imhtml), open_tag);
320 else 282 else
321 gtk_imhtml_toggle_background(GTK_IMHTML(toolbar->imhtml), open_tag); 283 gtk_imhtml_toggle_background(GTK_IMHTML(toolbar->imhtml), open_tag);
322
323 g_free(open_tag); 284 g_free(open_tag);
285
324 cancel_toolbar_bgcolor(NULL, toolbar); 286 cancel_toolbar_bgcolor(NULL, toolbar);
325 } 287 }
326 288
327 static void 289 static void
328 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar) 290 toggle_bg_color(GtkWidget *color, GtkIMHtmlToolbar *toolbar)
351 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked", 313 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(toolbar->bgcolor_dialog)->cancel_button), "clicked",
352 G_CALLBACK(cancel_toolbar_bgcolor), toolbar); 314 G_CALLBACK(cancel_toolbar_bgcolor), toolbar);
353 315
354 } 316 }
355 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog)); 317 gtk_window_present(GTK_WINDOW(toolbar->bgcolor_dialog));
356 } else if (toolbar->bgcolor_dialog != NULL) { 318 } else {
357 cancel_toolbar_bgcolor(color, toolbar); 319 cancel_toolbar_bgcolor(color, toolbar);
358 } else {
359 /* gaim_gtk_advance_past(gtkconv, "<FONT COLOR>", "</FONT>"); */
360 } 320 }
361 gtk_widget_grab_focus(toolbar->imhtml); 321 gtk_widget_grab_focus(toolbar->imhtml);
362 } 322 }
363 323
364 static void 324 static void
803 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 763 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA,
804 0, 0, NULL, NULL, toolbar); 764 0, 0, NULL, NULL, toolbar);
805 g_object_unref(object); 765 g_object_unref(object);
806 } 766 }
807 767
808 static void toggle_button_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar)
809 {
810 if (buttons & GTK_IMHTML_BOLD)
811 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold),
812 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)),
813 toolbar);
814
815 if (buttons & GTK_IMHTML_ITALIC)
816 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic),
817 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->italic)),
818 toolbar);
819
820 if (buttons & GTK_IMHTML_UNDERLINE)
821 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
822 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)),
823 toolbar);
824 }
825
826 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) 768 static void reset_buttons_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar)
827 { 769 {
828 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold))) 770 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->bold)))
829 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE, 771 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), FALSE,
830 toolbar); 772 toolbar);
838 FALSE, toolbar); 780 FALSE, toolbar);
839 } 781 }
840 782
841 static void update_buttons(GtkIMHtmlToolbar *toolbar) { 783 static void update_buttons(GtkIMHtmlToolbar *toolbar) {
842 gboolean bold, italic, underline; 784 gboolean bold, italic, underline;
785 char *tmp;
786 char *tmp2;
843 787
844 bold = italic = underline = FALSE; 788 bold = italic = underline = FALSE;
845 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml), 789 gtk_imhtml_get_current_format(GTK_IMHTML(toolbar->imhtml),
846 &bold, &italic, &underline); 790 &bold, &italic, &underline);
847 791
854 toolbar); 798 toolbar);
855 799
856 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline) 800 if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->underline)) != underline)
857 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline), 801 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
858 underline, toolbar); 802 underline, toolbar);
803
804 /* These buttons aren't ever "active". */
805 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->smaller_size), FALSE);
806 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->larger_size), FALSE);
807
808 tmp = gtk_imhtml_get_current_fontface(GTK_IMHTML(toolbar->imhtml));
809 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->font),
810 (tmp != NULL), toolbar);
811 g_free(tmp);
812
813 tmp = gtk_imhtml_get_current_forecolor(GTK_IMHTML(toolbar->imhtml));
814 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->fgcolor),
815 (tmp != NULL), toolbar);
816 g_free(tmp);
817
818 tmp = gtk_imhtml_get_current_backcolor(GTK_IMHTML(toolbar->imhtml));
819 tmp2 = gtk_imhtml_get_current_background(GTK_IMHTML(toolbar->imhtml));
820 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bgcolor),
821 (tmp != NULL || tmp2 != NULL), toolbar);
822 g_free(tmp);
823 g_free(tmp2);
824 }
825
826 static void toggle_button_cb(GtkIMHtml *imhtml, GtkIMHtmlButtons buttons, GtkIMHtmlToolbar *toolbar)
827 {
828 update_buttons(toolbar);
859 } 829 }
860 830
861 static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) { 831 static void update_format_cb(GtkIMHtml *imhtml, GtkIMHtmlToolbar *toolbar) {
862 update_buttons(toolbar); 832 update_buttons(toolbar);
863 } 833 }
1115 g_return_if_fail(imhtml != NULL); 1085 g_return_if_fail(imhtml != NULL);
1116 g_return_if_fail(GTK_IS_IMHTML(imhtml)); 1086 g_return_if_fail(GTK_IS_IMHTML(imhtml));
1117 1087
1118 toolbar->imhtml = imhtml; 1088 toolbar->imhtml = imhtml;
1119 g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar); 1089 g_signal_connect(G_OBJECT(imhtml), "format_buttons_update", G_CALLBACK(update_buttons_cb), toolbar);
1120 g_signal_connect(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar); 1090 g_signal_connect_after(G_OBJECT(imhtml), "format_function_toggle", G_CALLBACK(toggle_button_cb), toolbar);
1121 g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar); 1091 g_signal_connect(G_OBJECT(imhtml), "format_function_clear", G_CALLBACK(reset_buttons_cb), toolbar);
1122 g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar); 1092 g_signal_connect(G_OBJECT(imhtml), "format_function_update", G_CALLBACK(update_format_cb), toolbar);
1123 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar); 1093 g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), toolbar);
1124 1094
1125 buttons = gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml)); 1095 buttons = gtk_imhtml_get_format_functions(GTK_IMHTML(imhtml));
1127 1097
1128 bold = italic = underline = FALSE; 1098 bold = italic = underline = FALSE;
1129 1099
1130 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline); 1100 gtk_imhtml_get_current_format(GTK_IMHTML(imhtml), &bold, &italic, &underline);
1131 1101
1132 if(bold) 1102 update_buttons(toolbar);
1133 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->bold), bold,
1134 toolbar);
1135
1136 if(italic)
1137 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->italic), italic,
1138 toolbar);
1139
1140 if(underline)
1141 toggle_button_set_active_block(GTK_TOGGLE_BUTTON(toolbar->underline),
1142 underline, toolbar);
1143 } 1103 }
1144 1104
1145 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id) 1105 void gtk_imhtmltoolbar_associate_smileys(GtkIMHtmlToolbar *toolbar, const char *proto_id)
1146 { 1106 {
1147 if (toolbar->sml) 1107 if (toolbar->sml)