Commit cf6eb477 authored by Havoc Pennington's avatar Havoc Pennington
Browse files

default impls of width_for_height,hfw should chain directly not use wrapper API

In GtkBin and GtkWidget we tried to provide handy defaults that
call get_width if there's no get_width_for_height and
get_height for get_height_for_width.

However, they used the wrapper API on GtkSizeRequest instead of
chaining directly to the other method implementation.

This could result in all kinds of surprising behavior, for example,
get_width_for_height() would now already include the effects of set_size_request().

If nothing else it's inefficient. But it's just conceptually wrong,
because to chain to another implementation, we should call the other
implementation, not call a wrapper around the other implementation
(when we're already inside a previous invocation of the wrapper,
i.e. compute_size_for_orientation() ends up reinvoking itself
in the same orientation on the same object which it pretty
likely isn't intending to do)

https://bugzilla.gnome.org/show_bug.cgi?id=628829
parent b3079c0d
...@@ -214,10 +214,15 @@ get_child_padding_delta (GtkBin *bin, ...@@ -214,10 +214,15 @@ get_child_padding_delta (GtkBin *bin,
gint *delta_v) gint *delta_v)
{ {
GtkBinPrivate *priv = bin->priv; GtkBinPrivate *priv = bin->priv;
gint hmin, vmin, child_hmin, child_vmin; gint hmin, vmin, hnat, vnat, child_hmin, child_vmin;
gtk_size_request_get_width (GTK_SIZE_REQUEST (bin), &hmin, NULL); /* we can't use gtk_size_request_get_width() wrapper because we want
gtk_size_request_get_height (GTK_SIZE_REQUEST (bin), &vmin, NULL); * our "original" request, not any external adjustments from
* set_size_request() or whatever. we have to ask for natural also
* because NULL isn't allowed for the direct vfuncs
*/
GTK_SIZE_REQUEST_GET_IFACE (bin)->get_width(GTK_SIZE_REQUEST (bin), &hmin, &hnat);
GTK_SIZE_REQUEST_GET_IFACE (bin)->get_height (GTK_SIZE_REQUEST (bin), &vmin, &vnat);
gtk_size_request_get_width (GTK_SIZE_REQUEST (priv->child), &child_hmin, NULL); gtk_size_request_get_width (GTK_SIZE_REQUEST (priv->child), &child_hmin, NULL);
gtk_size_request_get_height (GTK_SIZE_REQUEST (priv->child), &child_vmin, NULL); gtk_size_request_get_height (GTK_SIZE_REQUEST (priv->child), &child_vmin, NULL);
......
...@@ -11040,7 +11040,7 @@ gtk_widget_real_get_height_for_width (GtkSizeRequest *layout, ...@@ -11040,7 +11040,7 @@ gtk_widget_real_get_height_for_width (GtkSizeRequest *layout,
gint *minimum_height, gint *minimum_height,
gint *natural_height) gint *natural_height)
{ {
gtk_size_request_get_height (layout, minimum_height, natural_height); GTK_SIZE_REQUEST_GET_IFACE (layout)->get_height(layout, minimum_height, natural_height);
} }
static void static void
...@@ -11048,8 +11048,8 @@ gtk_widget_real_get_width_for_height (GtkSizeRequest *layout, ...@@ -11048,8 +11048,8 @@ gtk_widget_real_get_width_for_height (GtkSizeRequest *layout,
gint height, gint height,
gint *minimum_width, gint *minimum_width,
gint *natural_width) gint *natural_width)
{ {
gtk_size_request_get_width (layout, minimum_width, natural_width); GTK_SIZE_REQUEST_GET_IFACE (layout)->get_width(layout, minimum_width, natural_width);
} }
static void static void
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment