SHA256
1
0
forked from pool/pidgin
pidgin/rb1342.patch

87 lines
2.3 KiB
Diff
Raw Normal View History

# 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);