popover: Fix invalid width/height check in layout

Commit a4cc95b2 introduced a check in layout() that closes the popover
if the width or height is smaller than the minimum width or height,
respectively. However, that was using gtk_widget_get_preferred_size(),
which finds out the minimum height for the minimum width and vice versa,
but not the minimum height for the layout width and vice versa. So,
certain popovers were not showing, even though they would not have
generated a critical to begin with.

To fix this, we copy the logic from gtk_widget_allocate() that generates
the criticals, and use that to check if we have a good width/height for
the popover native or not.

Closes #6826
This commit is contained in:
Matthijs Velsink
2024-07-02 03:47:02 +02:00
committed by Mat
parent 0e13ef1f00
commit 90803c52e3

View File

@@ -698,10 +698,14 @@ gtk_popover_native_layout (GtkNative *native,
GtkPopover *popover = GTK_POPOVER (native);
GtkPopoverPrivate *priv = gtk_popover_get_instance_private (popover);
GtkWidget *widget = GTK_WIDGET (popover);
GtkRequisition min, nat;
int min_height_for_width, min_width_for_height;
gtk_widget_get_preferred_size (widget, &min, &nat);
if (width < min.width || height < min.height)
gtk_widget_measure (widget, GTK_ORIENTATION_VERTICAL, width,
&min_height_for_width, NULL, NULL, NULL);
gtk_widget_measure (widget, GTK_ORIENTATION_HORIZONTAL, height,
&min_width_for_height, NULL, NULL, NULL);
if (width < min_width_for_height || height < min_height_for_width)
{
gtk_popover_popdown (popover);
return;