48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
From 6b984977b86a8dce89a3d5b4f51a5154f3795200 Mon Sep 17 00:00:00 2001
|
|
From: Matthijs Velsink <mvelsink@gnome.org>
|
|
Date: Tue, 2 Jul 2024 03:47:02 +0200
|
|
Subject: [PATCH 2/2] 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
|
|
---
|
|
gtk/gtkpopover.c | 10 +++++++---
|
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
|
|
index f93075d2a0..4d8b5d13f6 100644
|
|
--- a/gtk/gtkpopover.c
|
|
+++ b/gtk/gtkpopover.c
|
|
@@ -709,10 +709,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;
|
|
--
|
|
2.46.0
|
|
|