[gtk+] GtkWindow: don't increase the preferred size for empty windows if there is a size request set.
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkWindow: don't increase the preferred size for empty windows if there is a size request set.
- Date: Wed, 1 Jul 2015 16:34:16 +0000 (UTC)
commit 5d17b0af54acea03c697ead28c2f178f5564db11
Author: Christoph Reiter <creiter src gnome org>
Date: Mon Jun 29 13:46:36 2015 +0200
GtkWindow: don't increase the preferred size for empty windows if there is a size request set.
This fixes a reftest broken by commit 84e99b20ac806ee5f
https://bugzilla.gnome.org/show_bug.cgi?id=751341
gtk/gtkwidget.c | 17 +++++++++++++++++
gtk/gtkwidgetprivate.h | 2 ++
gtk/gtkwindow.c | 24 ++++++++++++++++--------
3 files changed, 35 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c
index c1fd68a..7a3ee28 100644
--- a/gtk/gtkwidget.c
+++ b/gtk/gtkwidget.c
@@ -11152,6 +11152,23 @@ gtk_widget_get_size_request (GtkWidget *widget,
*height = aux_info->height;
}
+/*< private >
+ * gtk_widget_has_size_request:
+ * @widget: a #GtkWidget
+ *
+ * Returns if the widget has a size request set (anything besides -1 for height
+ * or width)
+ */
+gboolean
+gtk_widget_has_size_request (GtkWidget *widget)
+{
+ const GtkWidgetAuxInfo *aux_info;
+
+ aux_info = _gtk_widget_get_aux_info_or_defaults (widget);
+
+ return !(aux_info->width == -1 && aux_info->height == -1);
+}
+
/**
* _gtk_widget_override_size_request:
* @widget: a #GtkWidget
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 95b7bb1..387195e 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -171,6 +171,8 @@ gboolean gtk_widget_has_tick_callback (GtkWidget *widget);
void gtk_widget_set_csd_input_shape (GtkWidget *widget,
const cairo_region_t *region);
+gboolean gtk_widget_has_size_request (GtkWidget *widget);
+
G_END_DECLS
#endif /* __GTK_WIDGET_PRIVATE_H__ */
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index add6b79..9c42d23 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -8371,10 +8371,12 @@ gtk_window_get_preferred_width (GtkWidget *widget,
gint title_min = 0, title_nat = 0;
gint child_min = 0, child_nat = 0;
GtkBorder window_border = { 0 };
+ gboolean has_size_request;
window = GTK_WINDOW (widget);
priv = window->priv;
child = gtk_bin_get_child (GTK_BIN (window));
+ has_size_request = gtk_widget_has_size_request (widget);
border_width = gtk_container_get_border_width (GTK_CONTAINER (window));
@@ -8397,14 +8399,14 @@ gtk_window_get_preferred_width (GtkWidget *widget,
{
gtk_widget_get_preferred_width (child, &child_min, &child_nat);
- if (child_nat == 0)
+ if (child_nat == 0 && !has_size_request)
child_nat = NO_CONTENT_CHILD_NAT;
child_min += border_width * 2 +
window_border.left + window_border.right;
child_nat += border_width * 2 +
window_border.left + window_border.right;
}
- else
+ else if (!has_size_request)
{
child_nat = NO_CONTENT_CHILD_NAT;
}
@@ -8428,10 +8430,12 @@ gtk_window_get_preferred_width_for_height (GtkWidget *widget,
gint child_min = 0, child_nat = 0;
gint title_height = 0;
GtkBorder window_border = { 0 };
+ gboolean has_size_request;
window = GTK_WINDOW (widget);
priv = window->priv;
child = gtk_bin_get_child (GTK_BIN (window));
+ has_size_request = gtk_widget_has_size_request (widget);
border_width = gtk_container_get_border_width (GTK_CONTAINER (window));
@@ -8466,14 +8470,14 @@ gtk_window_get_preferred_width_for_height (GtkWidget *widget,
MAX (height, 0),
&child_min, &child_nat);
- if (child_nat == 0 && height == 0)
+ if (child_nat == 0 && height == 0 && !has_size_request)
child_nat = NO_CONTENT_CHILD_NAT;
child_min += border_width * 2 +
window_border.left + window_border.right;
child_nat += border_width * 2 +
window_border.left + window_border.right;
}
- else
+ else if (!has_size_request)
{
child_nat = NO_CONTENT_CHILD_NAT;
}
@@ -8494,10 +8498,12 @@ gtk_window_get_preferred_height (GtkWidget *widget,
int title_min = 0;
int title_height = 0;
GtkBorder window_border = { 0 };
+ gboolean has_size_request;
window = GTK_WINDOW (widget);
priv = window->priv;
child = gtk_bin_get_child (GTK_BIN (window));
+ has_size_request = gtk_widget_has_size_request (widget);
*minimum_size = 0;
*natural_size = 0;
@@ -8528,12 +8534,12 @@ gtk_window_get_preferred_height (GtkWidget *widget,
gint child_min, child_nat;
gtk_widget_get_preferred_height (child, &child_min, &child_nat);
- if (child_nat == 0)
+ if (child_nat == 0 && !has_size_request)
child_nat = NO_CONTENT_CHILD_NAT;
*minimum_size += child_min + 2 * border_width;
*natural_size += child_nat + 2 * border_width;
}
- else
+ else if (!has_size_request)
{
*natural_size += NO_CONTENT_CHILD_NAT;
}
@@ -8553,10 +8559,12 @@ gtk_window_get_preferred_height_for_width (GtkWidget *widget,
int title_min = 0;
int title_height = 0;
GtkBorder window_border = { 0 };
+ gboolean has_size_request;
window = GTK_WINDOW (widget);
priv = window->priv;
child = gtk_bin_get_child (GTK_BIN (window));
+ has_size_request = gtk_widget_has_size_request (widget);
*minimum_size = 0;
*natural_size = 0;
@@ -8593,12 +8601,12 @@ gtk_window_get_preferred_height_for_width (GtkWidget *widget,
gtk_widget_get_preferred_height_for_width (child, MAX (width, 0),
&child_min, &child_nat);
- if (child_nat == 0 && width == 0)
+ if (child_nat == 0 && width == 0 && !has_size_request)
child_nat = NO_CONTENT_CHILD_NAT;
*minimum_size += child_min + 2 * border_width;
*natural_size += child_nat + 2 * border_width;
}
- else
+ else if (!has_size_request)
{
*natural_size += NO_CONTENT_CHILD_NAT;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]