gtk/entrycompletion: Ensure to show first row when shown, not allocated

This code was here in gtk3 to cater for the completion window being
positioned. That was only to meant once as long as the completion window
was shown.

This doesn't work as well for gtk4, ::size-allocate gets propagated from
the toplevel, so happens much more often for the completion window, this
ends up with the completion position being reset to the first row
frequently.

Do this simply once when popping up the completion, instead.

Fixes: https://gitlab.gnome.org/GNOME/gtk/-/issues/3083
This commit is contained in:
Carlos Garnacho 2020-12-11 23:13:00 +01:00
parent 3d84a38867
commit 79090f1755

View File

@ -1099,7 +1099,6 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
GdkSurface *surface;
GtkRequisition entry_req;
GtkRequisition tree_req;
GtkTreePath *path;
int width;
surface = gtk_native_get_surface (gtk_widget_get_native (completion->entry));
@ -1143,14 +1142,6 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
gtk_widget_set_size_request (completion->popup_window, width, -1);
gtk_scrolled_window_set_min_content_height (GTK_SCROLLED_WINDOW (completion->scrolled_window), items * height);
if (matches > 0)
{
path = gtk_tree_path_new_from_indices (0, -1);
gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (completion->tree_view), path,
NULL, FALSE, 0.0, 0.0);
gtk_tree_path_free (path);
}
gtk_popover_present (GTK_POPOVER (completion->popup_window));
}
@ -1175,6 +1166,16 @@ gtk_entry_completion_popup (GtkEntryCompletion *completion)
_gtk_entry_completion_resize_popup (completion);
if (completion->filter_model)
{
GtkTreePath *path;
path = gtk_tree_path_new_from_indices (0, -1);
gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (completion->tree_view), path,
NULL, FALSE, 0.0, 0.0);
gtk_tree_path_free (path);
}
gtk_popover_popup (GTK_POPOVER (completion->popup_window));
}