Mercurial > pidgin
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) |