[evolution] I#799 - EAlertBar: Text part doesn't work well for long text ]I[
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] I#799 - EAlertBar: Text part doesn't work well for long text ]I[
- Date: Wed, 11 Mar 2020 14:38:40 +0000 (UTC)
commit a10886bab6611b3f69fb23f1979a1634bfdfe8ce
Author: Milan Crha <mcrha redhat com>
Date: Wed Mar 11 15:38:11 2020 +0100
I#799 - EAlertBar: Text part doesn't work well for long text ]I[
Implement proper height-for-width size requisition for the EScrolledWindow.
The previous code didn't work correctly in some cases, like when showing
read-receipt notification in the EMailBrowser.
Related to https://gitlab.gnome.org/GNOME/evolution/issues/799
src/e-util/e-alert-bar.c | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
---
diff --git a/src/e-util/e-alert-bar.c b/src/e-util/e-alert-bar.c
index aa511e95ad..c0beb1ebde 100644
--- a/src/e-util/e-alert-bar.c
+++ b/src/e-util/e-alert-bar.c
@@ -39,15 +39,17 @@ GType e_scrolled_window_get_type (void) G_GNUC_CONST;
G_DEFINE_TYPE (EScrolledWindow, e_scrolled_window, GTK_TYPE_SCROLLED_WINDOW)
static void
-e_scrolled_window_get_preferred_height (GtkWidget *widget,
- gint *minimum_size,
- gint *natural_size)
+e_scrolled_window_get_preferred_height_for_width (GtkWidget *widget,
+ gint width,
+ gint *minimum_size,
+ gint *natural_size)
{
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
+ GtkWidget *child;
gint min_height, max_height;
/* Chain up to parent's method. */
- GTK_WIDGET_CLASS (e_scrolled_window_parent_class)->get_preferred_height (widget, minimum_size,
natural_size);
+ GTK_WIDGET_CLASS (e_scrolled_window_parent_class)->get_preferred_height_for_width (widget, width,
minimum_size, natural_size);
min_height = gtk_scrolled_window_get_min_content_height (scrolled_window);
max_height = gtk_scrolled_window_get_max_content_height (scrolled_window);
@@ -57,6 +59,26 @@ e_scrolled_window_get_preferred_height (GtkWidget *widget,
if (max_height > 0 && max_height < *natural_size)
*natural_size = max_height + 2;
+
+ child = gtk_bin_get_child (GTK_BIN (widget));
+
+ if (child && width > 1) {
+ gint child_min_height = -1, child_natural_height = -1;
+
+ gtk_widget_get_preferred_height_for_width (child, width, &child_min_height,
&child_natural_height);
+
+ if (*minimum_size > child_min_height && child_min_height > 0)
+ *minimum_size = child_min_height + 2;
+
+ if (*natural_size > child_natural_height && child_natural_height > 0)
+ *natural_size = child_natural_height + 2;
+ }
+}
+
+static GtkSizeRequestMode
+e_scrolled_window_get_request_mode (GtkWidget *widget)
+{
+ return GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH;
}
static void
@@ -65,7 +87,8 @@ e_scrolled_window_class_init (EScrolledWindowClass *class)
GtkWidgetClass *widget_class;
widget_class = GTK_WIDGET_CLASS (class);
- widget_class->get_preferred_height = e_scrolled_window_get_preferred_height;
+ widget_class->get_preferred_height_for_width = e_scrolled_window_get_preferred_height_for_width;
+ widget_class->get_request_mode = e_scrolled_window_get_request_mode;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]