comparison src/gtkimhtml.c @ 13224:2f6c932e5742

[gaim-migrate @ 15588] Function-sized #defines are kinda ugly to work with. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Sat, 11 Feb 2006 07:51:04 +0000
parents 3a3538be5b6a
children d04cfb5fa85b
comparison
equal deleted inserted replaced
13223:3a3538be5b6a 13224:2f6c932e5742
4254 void gtk_imhtml_font_grow(GtkIMHtml *imhtml) 4254 void gtk_imhtml_font_grow(GtkIMHtml *imhtml)
4255 { 4255 {
4256 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_GROW); 4256 imhtml_emit_signal_for_format(imhtml, GTK_IMHTML_GROW);
4257 } 4257 }
4258 4258
4259 #define gtk_imhtml_toggle_str_tag(imhtml, color, edit_field, remove_func, find_func, button) { \ 4259 static gboolean gtk_imhtml_toggle_str_tag(GtkIMHtml *imhtml, const char *value, char **edit_field,
4260 GObject *object; \ 4260 void (*remove_func)(GtkIMHtml *imhtml, GtkTextIter *i, GtkTextIter *e, gboolean homo),
4261 GtkTextIter start, end; \ 4261 GtkTextTag *(find_func)(GtkIMHtml *imhtml, gchar *color), GtkIMHtmlButtons button)
4262 \ 4262 {
4263 g_free(edit_field); \ 4263 GObject *object;
4264 edit_field = NULL; \ 4264 GtkTextIter start;
4265 \ 4265 GtkTextIter end;
4266 if (color && strcmp(color, "") != 0) { \ 4266
4267 edit_field = g_strdup(color); \ 4267 g_free(*edit_field);
4268 \ 4268 *edit_field = NULL;
4269 if (imhtml->wbfo) { \ 4269
4270 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \ 4270 if (value && strcmp(value, "") != 0)
4271 remove_func(imhtml, &start, &end, TRUE); \ 4271 {
4272 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ 4272 *edit_field = g_strdup(value);
4273 find_func(imhtml, edit_field), &start, &end); \ 4273
4274 } else { \ 4274 if (imhtml->wbfo)
4275 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start, \ 4275 {
4276 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert")); \ 4276 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
4277 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) { \ 4277 remove_func(imhtml, &start, &end, TRUE);
4278 remove_func(imhtml, &start, &end, FALSE); \ 4278 gtk_text_buffer_apply_tag(imhtml->text_buffer,
4279 gtk_text_buffer_apply_tag(imhtml->text_buffer, \ 4279 find_func(imhtml, *edit_field), &start, &end);
4280 find_func(imhtml, \ 4280 }
4281 edit_field), \ 4281 else
4282 &start, &end); \ 4282 {
4283 } \ 4283 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &start,
4284 } \ 4284 gtk_text_buffer_get_mark(imhtml->text_buffer, "insert"));
4285 } else { \ 4285 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
4286 if (imhtml->wbfo) { \ 4286 {
4287 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end); \ 4287 remove_func(imhtml, &start, &end, FALSE);
4288 remove_func(imhtml, &start, &end, TRUE); \ 4288 gtk_text_buffer_apply_tag(imhtml->text_buffer,
4289 } else { \ 4289 find_func(imhtml,
4290 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end)) \ 4290 *edit_field),
4291 remove_func(imhtml, &start, &end, TRUE); \ 4291 &start, &end);
4292 } \ 4292 }
4293 } \ 4293 }
4294 \ 4294 }
4295 object = g_object_ref(G_OBJECT(imhtml)); \ 4295 else
4296 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button); \ 4296 {
4297 g_object_unref(object); \ 4297 if (imhtml->wbfo)
4298 \ 4298 {
4299 return edit_field != NULL; \ 4299 gtk_text_buffer_get_bounds(imhtml->text_buffer, &start, &end);
4300 remove_func(imhtml, &start, &end, TRUE);
4301 }
4302 else
4303 {
4304 if (imhtml->editable && gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, &start, &end))
4305 remove_func(imhtml, &start, &end, TRUE);
4306 }
4307 }
4308
4309 object = g_object_ref(G_OBJECT(imhtml));
4310 g_signal_emit(object, signals[TOGGLE_FORMAT], 0, button);
4311 g_object_unref(object);
4312
4313 return *edit_field != NULL;
4300 } 4314 }
4301 4315
4302 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color) 4316 gboolean gtk_imhtml_toggle_forecolor(GtkIMHtml *imhtml, const char *color)
4303 { 4317 {
4304 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.forecolor, remove_font_forecolor, find_font_forecolor_tag, GTK_IMHTML_FORECOLOR); 4318 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.forecolor,
4319 remove_font_forecolor, find_font_forecolor_tag,
4320 GTK_IMHTML_FORECOLOR);
4305 } 4321 }
4306 4322
4307 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color) 4323 gboolean gtk_imhtml_toggle_backcolor(GtkIMHtml *imhtml, const char *color)
4308 { 4324 {
4309 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.backcolor, remove_font_backcolor, find_font_backcolor_tag, GTK_IMHTML_BACKCOLOR); 4325 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.backcolor,
4326 remove_font_backcolor, find_font_backcolor_tag,
4327 GTK_IMHTML_BACKCOLOR);
4310 } 4328 }
4311 4329
4312 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color) 4330 gboolean gtk_imhtml_toggle_background(GtkIMHtml *imhtml, const char *color)
4313 { 4331 {
4314 gtk_imhtml_toggle_str_tag(imhtml, color, imhtml->edit.background, remove_font_background, find_font_background_tag, GTK_IMHTML_BACKGROUND); 4332 return gtk_imhtml_toggle_str_tag(imhtml, color, &imhtml->edit.background,
4333 remove_font_background, find_font_background_tag,
4334 GTK_IMHTML_BACKGROUND);
4315 } 4335 }
4316 4336
4317 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face) 4337 gboolean gtk_imhtml_toggle_fontface(GtkIMHtml *imhtml, const char *face)
4318 { 4338 {
4319 gtk_imhtml_toggle_str_tag(imhtml, face, imhtml->edit.fontface, remove_font_face, find_font_face_tag, GTK_IMHTML_FACE); 4339 return gtk_imhtml_toggle_str_tag(imhtml, face, &imhtml->edit.fontface,
4340 remove_font_face, find_font_face_tag,
4341 GTK_IMHTML_FACE);
4320 } 4342 }
4321 4343
4322 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url) 4344 void gtk_imhtml_toggle_link(GtkIMHtml *imhtml, const char *url)
4323 { 4345 {
4324 GObject *object; 4346 GObject *object;