diff --git a/ChangeLog b/ChangeLog index da18bc60af..e46c27ac34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,14 @@ -2003-11-17 Noah Levitt +Mon Nov 17 22:56:09 2003 Kristian Rietveld - * configure.in: Check for freetype headers the way freetype - wants us to. + * gtk/gtkentryprivate.h: add _gtk_entry_completion_resize_popup. + + * gtk/gtkentry.c (gtk_entry_completion_timeout): popup when not + mapped, else resize_popup. + + * gtk/gtkentrycompletion.c (_gtk_entry_completion_resize_popup), + (_gtk_entry_completion_popup): moved all popup resizing code to + _gtk_entry_completion_resize_popup, and show the window when there + are more than zero items in the completion list again (sigh). 2003-11-17 Mark McLoughlin diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index da18bc60af..e46c27ac34 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,7 +1,14 @@ -2003-11-17 Noah Levitt +Mon Nov 17 22:56:09 2003 Kristian Rietveld - * configure.in: Check for freetype headers the way freetype - wants us to. + * gtk/gtkentryprivate.h: add _gtk_entry_completion_resize_popup. + + * gtk/gtkentry.c (gtk_entry_completion_timeout): popup when not + mapped, else resize_popup. + + * gtk/gtkentrycompletion.c (_gtk_entry_completion_resize_popup), + (_gtk_entry_completion_popup): moved all popup resizing code to + _gtk_entry_completion_resize_popup, and show the window when there + are more than zero items in the completion list again (sigh). 2003-11-17 Mark McLoughlin diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index da18bc60af..e46c27ac34 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,7 +1,14 @@ -2003-11-17 Noah Levitt +Mon Nov 17 22:56:09 2003 Kristian Rietveld - * configure.in: Check for freetype headers the way freetype - wants us to. + * gtk/gtkentryprivate.h: add _gtk_entry_completion_resize_popup. + + * gtk/gtkentry.c (gtk_entry_completion_timeout): popup when not + mapped, else resize_popup. + + * gtk/gtkentrycompletion.c (_gtk_entry_completion_resize_popup), + (_gtk_entry_completion_popup): moved all popup resizing code to + _gtk_entry_completion_resize_popup, and show the window when there + are more than zero items in the completion list again (sigh). 2003-11-17 Mark McLoughlin diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index da18bc60af..e46c27ac34 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,7 +1,14 @@ -2003-11-17 Noah Levitt +Mon Nov 17 22:56:09 2003 Kristian Rietveld - * configure.in: Check for freetype headers the way freetype - wants us to. + * gtk/gtkentryprivate.h: add _gtk_entry_completion_resize_popup. + + * gtk/gtkentry.c (gtk_entry_completion_timeout): popup when not + mapped, else resize_popup. + + * gtk/gtkentrycompletion.c (_gtk_entry_completion_resize_popup), + (_gtk_entry_completion_popup): moved all popup resizing code to + _gtk_entry_completion_resize_popup, and show the window when there + are more than zero items in the completion list again (sigh). 2003-11-17 Mark McLoughlin diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index da18bc60af..e46c27ac34 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,7 +1,14 @@ -2003-11-17 Noah Levitt +Mon Nov 17 22:56:09 2003 Kristian Rietveld - * configure.in: Check for freetype headers the way freetype - wants us to. + * gtk/gtkentryprivate.h: add _gtk_entry_completion_resize_popup. + + * gtk/gtkentry.c (gtk_entry_completion_timeout): popup when not + mapped, else resize_popup. + + * gtk/gtkentrycompletion.c (_gtk_entry_completion_resize_popup), + (_gtk_entry_completion_popup): moved all popup resizing code to + _gtk_entry_completion_resize_popup, and show the window when there + are more than zero items in the completion list again (sigh). 2003-11-17 Mark McLoughlin diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 3e97af9f82..e9af219373 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -4515,7 +4515,12 @@ gtk_entry_completion_timeout (gpointer data) actions = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->actions), NULL); if (matches > 0 || actions > 0) - _gtk_entry_completion_popup (completion); + { + if (! GTK_WIDGET_MAPPED (completion->priv->popup_window)) + _gtk_entry_completion_popup (completion); + else + _gtk_entry_completion_resize_popup (completion); + } } GDK_THREADS_LEAVE (); diff --git a/gtk/gtkentrycompletion.c b/gtk/gtkentrycompletion.c index a63277fb28..e131081ab7 100644 --- a/gtk/gtkentrycompletion.c +++ b/gtk/gtkentrycompletion.c @@ -1029,20 +1029,12 @@ get_borders (GtkEntry *entry, } } -/* this function is a bit nasty */ -void -_gtk_entry_completion_popup (GtkEntryCompletion *completion) +/* some nasty size requisition */ +gint +_gtk_entry_completion_resize_popup (GtkEntryCompletion *completion) { - gint x, y, x_border, y_border; - gint items; - gint height; + gint items, height, x_border, y_border; - if (GTK_WIDGET_MAPPED (completion->priv->popup_window)) - return; - - gtk_widget_show_all (completion->priv->vbox); - - gdk_window_get_origin (completion->priv->entry->window, &x, &y); get_borders (GTK_ENTRY (completion->priv->entry), &x_border, &y_border); items = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (completion->priv->filter_model), NULL); @@ -1052,13 +1044,15 @@ _gtk_entry_completion_popup (GtkEntryCompletion *completion) gtk_tree_view_column_cell_get_size (completion->priv->column, NULL, NULL, NULL, NULL, &height); + if (items <= 0) + gtk_widget_hide (completion->priv->scrolled_window); + else + gtk_widget_show (completion->priv->scrolled_window); + gtk_widget_set_size_request (completion->priv->tree_view, completion->priv->entry->allocation.width - 2 * x_border, items * height); - if (items <= 0) - gtk_widget_hide (completion->priv->scrolled_window); - /* default on no match */ completion->priv->current_selected = -1; @@ -1075,9 +1069,28 @@ _gtk_entry_completion_popup (GtkEntryCompletion *completion) items * height); } + return height; +} + +void +_gtk_entry_completion_popup (GtkEntryCompletion *completion) +{ + gint x, y, x_border, y_border; + gint height; + + if (GTK_WIDGET_MAPPED (completion->priv->popup_window)) + return; + + gtk_widget_show_all (completion->priv->vbox); + + gdk_window_get_origin (completion->priv->entry->window, &x, &y); + get_borders (GTK_ENTRY (completion->priv->entry), &x_border, &y_border); + x += x_border; y += 2 * y_border; + height = _gtk_entry_completion_resize_popup (completion); + gtk_window_move (GTK_WINDOW (completion->priv->popup_window), x, y + height); gtk_widget_show (completion->priv->popup_window); diff --git a/gtk/gtkentryprivate.h b/gtk/gtkentryprivate.h index 657595e5a8..a4dd011551 100644 --- a/gtk/gtkentryprivate.h +++ b/gtk/gtkentryprivate.h @@ -58,6 +58,7 @@ struct _GtkEntryCompletionPrivate gulong key_press_id; }; +gint _gtk_entry_completion_resize_popup (GtkEntryCompletion *completion); void _gtk_entry_completion_popup (GtkEntryCompletion *completion); void _gtk_entry_completion_popdown (GtkEntryCompletion *completion);