Don't assume actions and results have equal height

This causes negative size requisitions when results are more than one
line tall.

* gtk/gtkentrycompletion.c: change the formula used to calculate
the size of the completion popup.

svn path=/trunk/; revision=22120
This commit is contained in:
Diego Escalante Urrelo
2009-01-15 09:51:07 +00:00
parent d00b5cd3ee
commit 649ac44dd9
2 changed files with 19 additions and 2 deletions

View File

@ -1,3 +1,15 @@
2009-01-15 Diego Escalante Urrelo <diegoe@gnome.org>
Bug 562701 GtkEntryCompletion popup sizes its rows wrong
when they span for more than one line.
Don't assume actions and results have equal height, this causes
negative size requisitions when results are more than one
line tall.
* gtk/gtkentrycompletion.c: change the formula used to calculate
the size of the completion popup.
2009-01-14 Federico Mena Quintero <federico@novell.com> 2009-01-14 Federico Mena Quintero <federico@novell.com>
Remember the file chooser's geometry across invocations. Remember the file chooser's geometry across invocations.

View File

@ -1375,6 +1375,8 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
GtkTreePath *path; GtkTreePath *path;
gboolean above; gboolean above;
gint width; gint width;
GtkTreeViewColumn *action_column;
gint action_height;
if (!completion->priv->entry->window) if (!completion->priv->entry->window)
return FALSE; return FALSE;
@ -1384,9 +1386,12 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
matches = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL); matches = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL);
actions = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->actions), NULL); 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);
gtk_tree_view_column_cell_get_size (completion->priv->column, NULL, gtk_tree_view_column_cell_get_size (completion->priv->column, NULL,
NULL, NULL, NULL, &height); NULL, NULL, NULL, &height);
gtk_tree_view_column_cell_get_size (action_column, NULL,
NULL, NULL, NULL, &action_height);
gtk_widget_style_get (GTK_WIDGET (completion->priv->tree_view), gtk_widget_style_get (GTK_WIDGET (completion->priv->tree_view),
"vertical-separator", &vertical_separator, "vertical-separator", &vertical_separator,
@ -1404,9 +1409,9 @@ _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion)
if (y > monitor.height / 2) if (y > monitor.height / 2)
items = MIN (matches, (monitor.y + y) / height - actions); items = MIN (matches, (((monitor.y + y) - (actions * action_height)) / height) - 1);
else else
items = MIN (matches, (monitor.height - y) / height - 1 - actions); items = MIN (matches, (((monitor.height - y) - (actions * action_height)) / height) - 1);
if (items <= 0) if (items <= 0)
gtk_widget_hide (completion->priv->scrolled_window); gtk_widget_hide (completion->priv->scrolled_window);