GtkWindow: don't increase the preferred size for empty windows if there is a size request set.
This fixes a reftest broken by commit 84e99b20ac
https://bugzilla.gnome.org/show_bug.cgi?id=751341
			
			
This commit is contained in:
		
				
					committed by
					
						
						Cosimo Cecchi
					
				
			
			
				
	
			
			
			
						parent
						
							0f3995a446
						
					
				
				
					commit
					5d17b0af54
				
			@ -11152,6 +11152,23 @@ gtk_widget_get_size_request (GtkWidget *widget,
 | 
				
			|||||||
    *height = aux_info->height;
 | 
					    *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:
 | 
					 * _gtk_widget_override_size_request:
 | 
				
			||||||
 * @widget: a #GtkWidget
 | 
					 * @widget: a #GtkWidget
 | 
				
			||||||
 | 
				
			|||||||
@ -171,6 +171,8 @@ gboolean          gtk_widget_has_tick_callback             (GtkWidget *widget);
 | 
				
			|||||||
void              gtk_widget_set_csd_input_shape           (GtkWidget            *widget,
 | 
					void              gtk_widget_set_csd_input_shape           (GtkWidget            *widget,
 | 
				
			||||||
                                                            const cairo_region_t *region);
 | 
					                                                            const cairo_region_t *region);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					gboolean          gtk_widget_has_size_request              (GtkWidget *widget);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
G_END_DECLS
 | 
					G_END_DECLS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __GTK_WIDGET_PRIVATE_H__ */
 | 
					#endif /* __GTK_WIDGET_PRIVATE_H__ */
 | 
				
			||||||
 | 
				
			|||||||
@ -8371,10 +8371,12 @@ gtk_window_get_preferred_width (GtkWidget *widget,
 | 
				
			|||||||
  gint title_min = 0, title_nat = 0;
 | 
					  gint title_min = 0, title_nat = 0;
 | 
				
			||||||
  gint child_min = 0, child_nat = 0;
 | 
					  gint child_min = 0, child_nat = 0;
 | 
				
			||||||
  GtkBorder window_border = { 0 };
 | 
					  GtkBorder window_border = { 0 };
 | 
				
			||||||
 | 
					  gboolean has_size_request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  window = GTK_WINDOW (widget);
 | 
					  window = GTK_WINDOW (widget);
 | 
				
			||||||
  priv = window->priv;
 | 
					  priv = window->priv;
 | 
				
			||||||
  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
					  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));
 | 
					  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);
 | 
					      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_nat = NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
      child_min += border_width * 2 +
 | 
					      child_min += border_width * 2 +
 | 
				
			||||||
                   window_border.left + window_border.right;
 | 
					                   window_border.left + window_border.right;
 | 
				
			||||||
      child_nat += border_width * 2 +
 | 
					      child_nat += border_width * 2 +
 | 
				
			||||||
                   window_border.left + window_border.right;
 | 
					                   window_border.left + window_border.right;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  else
 | 
					  else if (!has_size_request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      child_nat = NO_CONTENT_CHILD_NAT;
 | 
					      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 child_min = 0, child_nat = 0;
 | 
				
			||||||
  gint title_height = 0;
 | 
					  gint title_height = 0;
 | 
				
			||||||
  GtkBorder window_border = { 0 };
 | 
					  GtkBorder window_border = { 0 };
 | 
				
			||||||
 | 
					  gboolean has_size_request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  window = GTK_WINDOW (widget);
 | 
					  window = GTK_WINDOW (widget);
 | 
				
			||||||
  priv = window->priv;
 | 
					  priv = window->priv;
 | 
				
			||||||
  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
					  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));
 | 
					  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),
 | 
					                                                 MAX (height, 0),
 | 
				
			||||||
                                                 &child_min, &child_nat);
 | 
					                                                 &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_nat = NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
      child_min += border_width * 2 +
 | 
					      child_min += border_width * 2 +
 | 
				
			||||||
                   window_border.left + window_border.right;
 | 
					                   window_border.left + window_border.right;
 | 
				
			||||||
      child_nat += border_width * 2 +
 | 
					      child_nat += border_width * 2 +
 | 
				
			||||||
                   window_border.left + window_border.right;
 | 
					                   window_border.left + window_border.right;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  else
 | 
					  else if (!has_size_request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      child_nat = NO_CONTENT_CHILD_NAT;
 | 
					      child_nat = NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -8494,10 +8498,12 @@ gtk_window_get_preferred_height (GtkWidget *widget,
 | 
				
			|||||||
  int title_min = 0;
 | 
					  int title_min = 0;
 | 
				
			||||||
  int title_height = 0;
 | 
					  int title_height = 0;
 | 
				
			||||||
  GtkBorder window_border = { 0 };
 | 
					  GtkBorder window_border = { 0 };
 | 
				
			||||||
 | 
					  gboolean has_size_request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  window = GTK_WINDOW (widget);
 | 
					  window = GTK_WINDOW (widget);
 | 
				
			||||||
  priv = window->priv;
 | 
					  priv = window->priv;
 | 
				
			||||||
  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
					  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
				
			||||||
 | 
					  has_size_request = gtk_widget_has_size_request (widget);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  *minimum_size = 0;
 | 
					  *minimum_size = 0;
 | 
				
			||||||
  *natural_size = 0;
 | 
					  *natural_size = 0;
 | 
				
			||||||
@ -8528,12 +8534,12 @@ gtk_window_get_preferred_height (GtkWidget *widget,
 | 
				
			|||||||
      gint child_min, child_nat;
 | 
					      gint child_min, child_nat;
 | 
				
			||||||
      gtk_widget_get_preferred_height (child, &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;
 | 
					        child_nat = NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
      *minimum_size += child_min + 2 * border_width;
 | 
					      *minimum_size += child_min + 2 * border_width;
 | 
				
			||||||
      *natural_size += child_nat + 2 * border_width;
 | 
					      *natural_size += child_nat + 2 * border_width;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  else
 | 
					  else if (!has_size_request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      *natural_size += NO_CONTENT_CHILD_NAT;
 | 
					      *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_min = 0;
 | 
				
			||||||
  int title_height = 0;
 | 
					  int title_height = 0;
 | 
				
			||||||
  GtkBorder window_border = { 0 };
 | 
					  GtkBorder window_border = { 0 };
 | 
				
			||||||
 | 
					  gboolean has_size_request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  window = GTK_WINDOW (widget);
 | 
					  window = GTK_WINDOW (widget);
 | 
				
			||||||
  priv = window->priv;
 | 
					  priv = window->priv;
 | 
				
			||||||
  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
					  child  = gtk_bin_get_child (GTK_BIN (window));
 | 
				
			||||||
 | 
					  has_size_request = gtk_widget_has_size_request (widget);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  *minimum_size = 0;
 | 
					  *minimum_size = 0;
 | 
				
			||||||
  *natural_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),
 | 
					      gtk_widget_get_preferred_height_for_width (child, MAX (width, 0),
 | 
				
			||||||
                                                 &child_min, &child_nat);
 | 
					                                                 &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;
 | 
					        child_nat = NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
      *minimum_size += child_min + 2 * border_width;
 | 
					      *minimum_size += child_min + 2 * border_width;
 | 
				
			||||||
      *natural_size += child_nat + 2 * border_width;
 | 
					      *natural_size += child_nat + 2 * border_width;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  else
 | 
					  else if (!has_size_request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      *natural_size += NO_CONTENT_CHILD_NAT;
 | 
					      *natural_size += NO_CONTENT_CHILD_NAT;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user