popover: Correctly substract arrow height when measuring popover widget
authorYubao Liu <yubao.liu@gmail.com>
Sat, 16 Jul 2022 16:12:39 +0000 (00:12 +0800)
committerYubao Liu <yubao.liu@gmail.com>
Sat, 16 Jul 2022 16:29:42 +0000 (00:29 +0800)
For default popover arrow position and default height-for-width layout mode,
natural_width is calculated first with for_size=-1 and orientation=HORIZONTAL,
at the end of gtk_popover_measure() natural_width  won't be added with tail_height.

Then to measure with for_size=natural_width and orientation=VERTICAL, obviously
for_size shouldn't be substract with tail_height.

The wrong logic will force content in popover gets less width and then text labels
in popover may get wrapped unnecessarily.

gtk/gtkpopover.c

index d6f976daa7bda8400d3e9b97f5c9afa23ac1f235..8ac30372b7765de3af2d809cdfbb626bdc616896 100644 (file)
@@ -1451,7 +1451,7 @@ gtk_popover_measure (GtkWidget      *widget,
   GtkCssStyle *style;
   GtkBorder shadow_width;
 
-  if (for_size >= 0)
+  if (for_size >= 0 && (POS_IS_VERTICAL (priv->position) == (orientation == GTK_ORIENTATION_HORIZONTAL)))
     for_size -= tail_height;
 
   style = gtk_css_node_get_style (gtk_widget_get_css_node (GTK_WIDGET (priv->contents_widget)));