summaryrefslogtreecommitdiff
path: root/gtk/gtkentrycompletion.c
diff options
context:
space:
mode:
authorMatt Watson <mattdangerw@gmail.com>2014-12-03 00:24:43 -0800
committerCosimo Cecchi <cosimoc@gnome.org>2014-12-10 13:29:32 -0800
commitf50d1b2584b2d925d2e0f5dc7dba4460c058bd68 (patch)
tree6f8c92035d7aa469e82fe3ba0797bff06f0da3f1 /gtk/gtkentrycompletion.c
parenta083809b937e6714ff9259e53ff28d659fb427e2 (diff)
downloadgtk+-f50d1b2584b2d925d2e0f5dc7dba4460c058bd68.tar.gz
GtkEntryCompletion: fix sizing bug with multiple cells
When using a completion with some custom cells in the cell layout, if would often size wrong when first presented on screen. The entry completion is the only place in the entire gtk code base that calls gtk_tree_view_column_cell_get_size outside of gtktreeview itself. It calls into the function before the tree view has done some important validation on its cell state, the net result of which is only the first element in the gtkcellareabox the entry completion uses well actually have its size respected. We now call gtk_widget_get_preferred_size on the tree view before calling into the individual cell size routines, to guarantee that the tree view has run its validate_rows routine and cell state is valid. https://bugzilla.gnome.org/show_bug.cgi?id=741130
Diffstat (limited to 'gtk/gtkentrycompletion.c')
-rw-r--r--gtk/gtkentrycompletion.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c
index 3969e614bb..cba7ce50d2 100644
--- a/gtk/gtkentrycompletion.c
+++ b/gtk/gtkentrycompletion.c
@@ -1499,6 +1499,7 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
GdkWindow *window;
GtkRequisition popup_req;
GtkRequisition entry_req;
+ GtkRequisition tree_req;
GtkTreePath *path;
gboolean above;
gint width;
@@ -1525,6 +1526,11 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
actions = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->actions), NULL);
action_column = gtk_tree_view_get_column (GTK_TREE_VIEW (completion->priv->action_view), 0);
+ /* Call get preferred size on the on the tree view to force it to validate its
+ * cells before calling into the cell size functions.
+ */
+ gtk_widget_get_preferred_size (completion->priv->tree_view,
+ &tree_req, NULL);
gtk_tree_view_column_cell_get_size (completion->priv->column, NULL,
NULL, NULL, NULL, &height);
gtk_tree_view_column_cell_get_size (action_column, NULL,