Blob Blame History Raw
diff -up evolution-3.12.11/e-util/e-filter-rule.c.filter-rules-scroll evolution-3.12.11/e-util/e-filter-rule.c
--- evolution-3.12.11/e-util/e-filter-rule.c.filter-rules-scroll	2014-06-04 20:27:43.000000000 +0200
+++ evolution-3.12.11/e-util/e-filter-rule.c	2016-08-23 18:38:17.667859747 +0200
@@ -251,6 +251,9 @@ do_grab_focus_cb (GtkWidget *widget,
 	}
 }
 
+static void parts_mapped_cb (GtkWidget *widget,
+			     GtkScrolledWindow *scrolled_window);
+
 static void
 more_parts (GtkWidget *button,
             FilterRuleData *data)
@@ -308,6 +311,7 @@ more_parts (GtkWidget *button,
 				gtk_adjustment_set_value (adjustment, upper);
 			}
 
+			parts_mapped_cb (NULL, GTK_SCROLLED_WINDOW (w));
 		}
 	}
 }
@@ -727,6 +731,16 @@ ensure_scrolled_height_cb (GtkAdjustment
 	gtk_scrolled_window_set_min_content_height (scrolled_window, require_scw_height);
 }
 
+static void
+parts_mapped_cb (GtkWidget *widget,
+		 GtkScrolledWindow *scrolled_window)
+{
+	g_return_if_fail (GTK_IS_SCROLLED_WINDOW (scrolled_window));
+
+	ensure_scrolled_width_cb (gtk_scrolled_window_get_hadjustment (scrolled_window), NULL, scrolled_window);
+	ensure_scrolled_height_cb (gtk_scrolled_window_get_vadjustment (scrolled_window), NULL, scrolled_window);
+}
+
 static GtkWidget *
 filter_rule_get_widget (EFilterRule *rule,
                         ERuleContext *context)
@@ -904,6 +918,8 @@ filter_rule_get_widget (EFilterRule *rul
 	vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 1.0, 1.0, 1.0, 1.0));
 	scrolledwindow = gtk_scrolled_window_new (hadj, vadj);
 
+	g_signal_connect (parts, "map",
+		G_CALLBACK (parts_mapped_cb), scrolledwindow);
 	e_signal_connect_notify (
 		hadj, "notify::upper",
 		G_CALLBACK (ensure_scrolled_width_cb), scrolledwindow);
diff -up evolution-3.12.11/mail/em-filter-rule.c.filter-rules-scroll evolution-3.12.11/mail/em-filter-rule.c
--- evolution-3.12.11/mail/em-filter-rule.c.filter-rules-scroll	2016-08-23 18:38:11.923859994 +0200
+++ evolution-3.12.11/mail/em-filter-rule.c	2016-08-23 18:38:17.667859747 +0200
@@ -466,6 +466,8 @@ do_grab_focus_cb (GtkWidget *widget,
 	}
 }
 
+static void ensure_scrolled_height (GtkScrolledWindow *scrolled_window);
+
 static void
 more_parts (GtkWidget *button,
             struct _rule_data *data)
@@ -507,14 +509,14 @@ more_parts (GtkWidget *button,
 				upper = gtk_adjustment_get_upper (adjustment);
 				gtk_adjustment_set_value (adjustment, upper);
 			}
+
+			ensure_scrolled_height (GTK_SCROLLED_WINDOW (w));
 		}
 	}
 }
 
 static void
-ensure_scrolled_height_cb (GtkAdjustment *adj,
-                           GParamSpec *param_spec,
-                           GtkScrolledWindow *scrolled_window)
+ensure_scrolled_height (GtkScrolledWindow *scrolled_window)
 {
 	GtkWidget *toplevel;
 	GdkScreen *screen;
@@ -564,6 +566,14 @@ ensure_scrolled_height_cb (GtkAdjustment
 	gtk_scrolled_window_set_min_content_height (scrolled_window, require_scw_height);
 }
 
+static void
+ensure_scrolled_height_cb (GtkAdjustment *adj,
+                           GParamSpec *param_spec,
+                           GtkScrolledWindow *scrolled_window)
+{
+	ensure_scrolled_height (scrolled_window);
+}
+
 static GtkWidget *
 get_widget (EFilterRule *fr,
             ERuleContext *rc)
@@ -663,6 +673,8 @@ get_widget (EFilterRule *fr,
 		vadj, "notify::upper",
 		G_CALLBACK (ensure_scrolled_height_cb), scrolledwindow);
 
+	g_signal_connect (scrolledwindow, "map", G_CALLBACK (ensure_scrolled_height), NULL);
+
 	gtk_widget_show_all (widget);
 
 	return widget;