# HG changeset patch # Node ID 8719e6ca6ff4 # Parent 17237faf35cb diff --git a/pidgin/gtkconv.c b/pidgin/gtkconv.c --- a/pidgin/gtkconv.c +++ b/pidgin/gtkconv.c @@ -2361,6 +2361,9 @@ g_return_if_fail(gtkconv != NULL); + g_object_set_data(G_OBJECT(gtkconv->imhtml), "resize-count", + GINT_TO_POINTER(0)); + if (!purple_prefs_get_bool("/purple/conversations/im/send_typing")) return; @@ -2378,6 +2381,9 @@ g_return_if_fail(gtkconv != NULL); + g_object_set_data(G_OBJECT(gtkconv->imhtml), "resize-count", + GINT_TO_POINTER(0)); + conv = gtkconv->active_conv; if (!purple_prefs_get_bool("/purple/conversations/im/send_typing")) @@ -5056,6 +5062,7 @@ gtk_widget_set_name(gtkconv->entry, "pidgin_conv_entry"); gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), purple_account_get_protocol_name(conv->account)); + g_object_set_data(G_OBJECT(gtkconv->entry), "gtkconv", gtkconv); g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", G_CALLBACK(entry_popup_menu_cb), gtkconv); diff --git a/pidgin/gtkimhtml.c b/pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c +++ b/pidgin/gtkimhtml.c @@ -387,6 +387,8 @@ static void (*parent_size_allocate)(GtkWidget *widget, GtkAllocation *alloc); +#define MAX_RESIZE_COUNT 3 + static void gtk_imhtml_size_allocate(GtkWidget *widget, GtkAllocation *alloc) { GtkIMHtml *imhtml = GTK_IMHTML(widget); @@ -395,6 +397,39 @@ int height = 0, y = 0; GtkTextIter iter; gboolean scroll = TRUE; + PidginConversation *gtkconv; + GtkIMHtml *entry, *messages; + int resize_count; + + gtkconv = g_object_get_data(G_OBJECT(imhtml), "gtkconv"); + + if(gtkconv != NULL) { + entry = GTK_IMHTML(gtkconv->entry); + messages = GTK_IMHTML(gtkconv->imhtml); + + resize_count = GPOINTER_TO_INT( + g_object_get_data( + G_OBJECT(imhtml), "resize-count")); + + if(imhtml == entry) { + if(resize_count > MAX_RESIZE_COUNT) { + return; + } + } else if(imhtml == messages) { + g_object_set_data(G_OBJECT(entry), "resize-count", + GINT_TO_POINTER(0)); + + if(resize_count > MAX_RESIZE_COUNT){ + g_object_set_data(G_OBJECT(messages), "resize-count", + GINT_TO_POINTER(0)); + return; + } + } + + resize_count++; + g_object_set_data(G_OBJECT(imhtml), "resize-count", + GINT_TO_POINTER(resize_count)); + } gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);