Mercurial > pidgin
comparison src/gtkimhtml.c @ 13551:40612ca80643
[gaim-migrate @ 15929]
This patch from Fernando Herrera traps the expose events used to redraw
animated images in a GtkIMHtml such that they do not cause a redraw of
the entire conversation.
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Thu, 23 Mar 2006 14:20:56 +0000 |
parents | 60de8d24831d |
children | 11434fa0ca22 |
comparison
equal
deleted
inserted
replaced
13550:47c12348cfd1 | 13551:40612ca80643 |
---|---|
4413 | 4413 |
4414 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); | 4414 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, mark); |
4415 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, smiley, &iter); | 4415 gtk_imhtml_insert_smiley_at_iter(imhtml, sml, smiley, &iter); |
4416 } | 4416 } |
4417 | 4417 |
4418 static gboolean | |
4419 image_expose(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) | |
4420 { | |
4421 GTK_WIDGET_CLASS(GTK_WIDGET_GET_CLASS(widget))->expose_event(widget, event); | |
4422 | |
4423 return TRUE; | |
4424 } | |
4425 | |
4418 void gtk_imhtml_insert_smiley_at_iter(GtkIMHtml *imhtml, const char *sml, char *smiley, GtkTextIter *iter) | 4426 void gtk_imhtml_insert_smiley_at_iter(GtkIMHtml *imhtml, const char *sml, char *smiley, GtkTextIter *iter) |
4419 { | 4427 { |
4420 GdkPixbuf *pixbuf = NULL; | 4428 GdkPixbuf *pixbuf = NULL; |
4421 GdkPixbufAnimation *annipixbuf = NULL; | 4429 GdkPixbufAnimation *annipixbuf = NULL; |
4422 GtkWidget *icon = NULL; | 4430 GtkWidget *icon = NULL; |
4439 | 4447 |
4440 if (icon) { | 4448 if (icon) { |
4441 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); | 4449 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); |
4442 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free); | 4450 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(unescaped), g_free); |
4443 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free); | 4451 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley), g_free); |
4452 | |
4453 /* This catches the expose events generated by animated | |
4454 * images, and ensures that they are handled by the image | |
4455 * itself, without propagating to the textview and causing | |
4456 * a complete refresh */ | |
4457 g_signal_connect(G_OBJECT(icon), "expose-event", G_CALLBACK(image_expose), NULL); | |
4444 | 4458 |
4445 gtk_widget_show(icon); | 4459 gtk_widget_show(icon); |
4446 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor); | 4460 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), icon, anchor); |
4447 } else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) { | 4461 } else if (imhtml_smiley != NULL && (imhtml->format_functions & GTK_IMHTML_SMILEY)) { |
4448 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); | 4462 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); |