Mercurial > pidgin
changeset 26811:c791a82b5bb5
Avoid adding several callbacks on repeated invocations of gtk_imhtml_set_editable.
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Sun, 03 May 2009 23:46:18 +0000 |
parents | 55736bd691e2 |
children | 3c06cd0e1717 |
files | pidgin/gtkimhtml.c |
diffstat | 1 files changed, 9 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/pidgin/gtkimhtml.c Sun May 03 22:59:02 2009 +0000 +++ b/pidgin/gtkimhtml.c Sun May 03 23:46:18 2009 +0000 @@ -4420,15 +4420,19 @@ * people can highlight stuff. */ /* gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), editable); */ - imhtml->editable = editable; - imhtml->format_functions = GTK_IMHTML_ALL; - - if (editable) - { + if (editable && !imhtml->editable) { g_signal_connect_after(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), "mark-set", G_CALLBACK(mark_set_cb), imhtml); g_signal_connect(G_OBJECT(imhtml), "backspace", G_CALLBACK(smart_backspace_cb), NULL); + } else if (!editable && imhtml->editable) { + g_signal_handlers_disconnect_by_func(G_OBJECT(GTK_IMHTML(imhtml)->text_buffer), + mark_set_cb, imhtml); + g_signal_handlers_disconnect_by_func(G_OBJECT(imhtml), + smart_backspace_cb, NULL); } + + imhtml->editable = editable; + imhtml->format_functions = GTK_IMHTML_ALL; } void gtk_imhtml_set_whole_buffer_formatting_only(GtkIMHtml *imhtml, gboolean wbfo)