diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 766d07ea4e..d33564e9ed 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -662,9 +662,6 @@ static GtkSizeRequestMode gtk_widget_real_get_request_mode (GtkWidget static void gtk_widget_queue_tooltip_query (GtkWidget *widget); -static void gtk_widget_adjust_baseline_allocation (GtkWidget *widget, - gint *baseline); - static void template_data_free (GtkWidgetTemplate*template_data); static void gtk_widget_set_usize_internal (GtkWidget *widget, @@ -4263,10 +4260,7 @@ gtk_widget_size_allocate_transformed (GtkWidget *widget, &GRAPHENE_POINT3D_INIT (allocated_offset_x, allocated_offset_y, 0)); if (baseline >= 0) - { - gtk_widget_adjust_baseline_allocation (widget, &baseline); - baseline -= margin.top + border.top + padding.top; - } + baseline -= priv->margin.top; if (adjusted_width < 0 || adjusted_height < 0) { @@ -4324,6 +4318,9 @@ gtk_widget_size_allocate_transformed (GtkWidget *widget, adjusted_height -= margin.top + border.top + padding.top + margin.bottom + border.bottom + padding.bottom; + if (baseline >= 0) + baseline -= margin.top + border.top + padding.top; + if (g_signal_has_handler_pending (widget, widget_signals[SIZE_ALLOCATE], 0, FALSE)) g_signal_emit (widget, widget_signals[SIZE_ALLOCATE], 0, adjusted_width, @@ -4617,15 +4614,6 @@ gtk_widget_real_size_allocate (GtkWidget *widget, } } -static void -gtk_widget_adjust_baseline_allocation (GtkWidget *widget, - gint *baseline) -{ - GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); - - *baseline -= priv->margin.top; -} - static gboolean gtk_widget_real_can_activate_accel (GtkWidget *widget, guint signal_id) @@ -11489,10 +11477,20 @@ int gtk_widget_get_allocated_baseline (GtkWidget *widget) { GtkWidgetPrivate *priv = gtk_widget_get_instance_private (widget); + GtkCssStyle *style; + GtkBorder margin, border, padding; g_return_val_if_fail (GTK_IS_WIDGET (widget), 0); - return priv->allocated_baseline; + if (priv->allocated_baseline == -1) + return -1; + + style = gtk_css_node_get_style (priv->cssnode); + get_box_margin (style, &margin); + get_box_border (style, &border); + get_box_padding (style, &padding); + + return priv->allocated_baseline - margin.top - border.top - padding.top; } /**