forked from pool/pidgin
d8d59d9808
- Fix the infinite resizing freeze (boo#1197418, https://issues.imfreedom.org/issue/PIDGIN-17602) * added rb1342.patch (https://reviews.imfreedom.org/r/1342/) OBS-URL: https://build.opensuse.org/request/show/964242 OBS-URL: https://build.opensuse.org/package/show/network:pidgin/pidgin?expand=0&rev=56
87 lines
2.3 KiB
Diff
87 lines
2.3 KiB
Diff
# 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);
|
|
|