combobox: Avoid extra queue_resize()
authorIvan Molodetskikh <yalterz@gmail.com>
Tue, 7 Mar 2023 17:51:32 +0000 (09:51 -0800)
committerIvan Molodetskikh <yalterz@gmail.com>
Tue, 7 Mar 2023 17:55:30 +0000 (09:55 -0800)
width-request already ensures it's above the minimum width, so avoid an
extra queue_resize() when setting size request to (-1, -1).

This is the same way as GtkDropDown works. This also unbreaks
GtkComboBox after the recent allocation fix in
75a417e33708dab2bdb2f784a8952e085a12bf03.

Incidentally, this also makes GtkComboBox actually resize its popup as
intended (that was broken before).

I don't think this is ultimately the final fix, sometimes I still get
allocation warnings. But the proper fix will probably involve changing
some more allocation machinery around popovers. This is good enough for
now.

gtk/deprecated/gtkcombobox.c

index 618f0780b71baa643da88e0165a7de818ad924e3..1e76b38f417f251d6f631ab2035154614c3dc9d8 100644 (file)
@@ -366,7 +366,6 @@ gtk_combo_box_size_allocate (GtkWidget *widget,
 {
   GtkComboBox *combo_box = GTK_COMBO_BOX (widget);
   GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box);
-  int menu_width;
 
   gtk_widget_size_allocate (priv->box,
                             &(GtkAllocation) {
@@ -374,17 +373,8 @@ gtk_combo_box_size_allocate (GtkWidget *widget,
                               width, height
                             }, baseline);
 
-  gtk_widget_set_size_request (priv->popup_widget, -1, -1);
-
-  if (priv->popup_fixed_width)
-    gtk_widget_measure (priv->popup_widget, GTK_ORIENTATION_HORIZONTAL, -1,
-                        &menu_width, NULL, NULL, NULL);
-  else
-    gtk_widget_measure (priv->popup_widget, GTK_ORIENTATION_HORIZONTAL, -1,
-                        NULL, &menu_width, NULL, NULL);
-
-  gtk_widget_set_size_request (priv->popup_widget,
-                               MAX (width, menu_width), -1);
+  gtk_widget_set_size_request (priv->popup_widget, width, -1);
+  gtk_widget_queue_resize (priv->popup_widget);
 
   gtk_popover_present (GTK_POPOVER (priv->popup_widget));
 }