diff --git a/ChangeLog b/ChangeLog index f562686f73..bf6a590c1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index f562686f73..bf6a590c1c 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index f562686f73..bf6a590c1c 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index f562686f73..bf6a590c1c 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index f562686f73..bf6a590c1c 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index f562686f73..bf6a590c1c 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,29 @@ +Sat Apr 20 01:54:59 2002 Kristian Rietveld + + Merge TreeView fixes from HEAD up to Apr 20 2002: + + (All from Apr 19): + * gtk/gtktreeview.c (gtk_tree_view_size_allocate): subtract + TREE_VIEW_HEADER_HEIGHT from allocation->height to get the real + size for the tree (fixes #72729), + (gtk_tree_view_real_start_editing): correct cell_area->y for + scrolling due to gtk_tree_view_real_set_cursor (fixes #75687) + + * gtk/gtktreeview.c (gtk_tree_view_row_changed): cancel editing + if tree_view->priv->edited_column != NULL (fixes #76066) + + (This patch fixes #50310): + * gtk/gtktreeprivate.h: add _gtk_tree_view_column_autosize + + * gtk/gtktreeview.c: privately export _gtk_tree_view_column_autosize, + and add a small note about that function, + (gtk_tree_view_button_press): check for double click and + "not having an autosize" column before autosizing the column, + + * gtk/gtktreeviewcolumn.c (gtk_tree_view_column_set_min_width): + call _gtk_tree_view_column_autosize to update autosized column width + (gtk_tree_view_column_set_max_width): ditto + Fri Apr 19 16:49:01 2002 Kristian Rietveld Merge TreeView fixes from HEAD up to Apr 19 2002: diff --git a/gtk/gtktreeprivate.h b/gtk/gtktreeprivate.h index 7f50f9fd2a..230b5378f8 100644 --- a/gtk/gtktreeprivate.h +++ b/gtk/gtktreeprivate.h @@ -311,7 +311,10 @@ gboolean _gtk_tree_view_column_cell_event (GtkTreeViewColumn *tree_column, void _gtk_tree_view_column_start_editing (GtkTreeViewColumn *tree_column, GtkCellEditable *editable_widget); void _gtk_tree_view_column_stop_editing (GtkTreeViewColumn *tree_column); -void _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view); +void _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view); +void _gtk_tree_view_column_autosize (GtkTreeView *tree_view, + GtkTreeViewColumn *column); + gboolean _gtk_tree_view_column_has_editable_cell (GtkTreeViewColumn *column); GtkCellRenderer *_gtk_tree_view_column_get_editable_cell (GtkTreeViewColumn *column); diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index f748c78ed6..b2ed620110 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -347,8 +347,6 @@ static void gtk_tree_view_real_set_cursor (GtkTreeView GtkTreePath *path, gboolean clear_and_select, gboolean clamp_node); -static void gtk_tree_view_column_autosize (GtkTreeView *tree_view, - GtkTreeViewColumn *tree_column); /* interactive search */ static void gtk_tree_view_search_dialog_destroy (GtkWidget *search_dialog, @@ -1650,7 +1648,7 @@ gtk_tree_view_size_allocate (GtkWidget *widget, tree_view->priv->vadjustment->lower = 0; tree_view->priv->vadjustment->upper = MAX (tree_view->priv->vadjustment->page_size, tree_view->priv->height); - if (tree_view->priv->vadjustment->value + allocation->height > tree_view->priv->height) + if (tree_view->priv->vadjustment->value + allocation->height - TREE_VIEW_HEADER_HEIGHT (tree_view) > tree_view->priv->height) gtk_adjustment_set_value (tree_view->priv->vadjustment, MAX (tree_view->priv->height - tree_view->priv->vadjustment->page_size, 0)); gtk_adjustment_changed (tree_view->priv->vadjustment); @@ -1947,9 +1945,10 @@ gtk_tree_view_button_press (GtkWidget *widget, { gpointer drag_data; - if (event->type == GDK_2BUTTON_PRESS) + if (event->type == GDK_2BUTTON_PRESS && + gtk_tree_view_column_get_sizing (column) != GTK_TREE_VIEW_COLUMN_AUTOSIZE) { - gtk_tree_view_column_autosize (tree_view, column); + _gtk_tree_view_column_autosize (tree_view, column); break; } @@ -4225,6 +4224,28 @@ _gtk_tree_view_install_mark_rows_col_dirty (GtkTreeView *tree_view) install_presize_handler (tree_view); } +/** + * This function works synchronously (due to the while (do_validate_rows...) + * loop). + * + * There was a check for column_type != GTK_TREE_VIEW_COLUMN_AUTOSIZE + * here. You now need to check that yourself. + */ +void +_gtk_tree_view_column_autosize (GtkTreeView *tree_view, + GtkTreeViewColumn *column) +{ + g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); + g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column)); + + _gtk_tree_view_column_cell_set_dirty (column, FALSE); + + do_presize_handler (tree_view); + while (do_validate_rows (tree_view)); + + gtk_widget_queue_resize (GTK_WIDGET (tree_view)); +} + /* Drag-and-drop */ static void @@ -5655,6 +5676,9 @@ gtk_tree_view_row_changed (GtkTreeModel *model, */ return; + if (tree_view->priv->edited_column) + gtk_tree_view_stop_editing (tree_view, TRUE); + gtk_widget_style_get (GTK_WIDGET (data), "vertical_separator", &vertical_separator, NULL); if (path == NULL) @@ -7800,24 +7824,6 @@ gtk_tree_view_set_headers_visible (GtkTreeView *tree_view, g_object_notify (G_OBJECT (tree_view), "headers_visible"); } -static void -gtk_tree_view_column_autosize (GtkTreeView *tree_view, - GtkTreeViewColumn *column) -{ - g_return_if_fail (GTK_IS_TREE_VIEW (tree_view)); - g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column)); - - if (column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE) - return; - - _gtk_tree_view_column_cell_set_dirty (column, FALSE); - - do_presize_handler (tree_view); - while (do_validate_rows (tree_view)); - - gtk_widget_queue_resize (GTK_WIDGET (tree_view)); -} - /** * gtk_tree_view_columns_autosize: * @tree_view: A #GtkTreeView. @@ -10647,9 +10653,15 @@ gtk_tree_view_real_start_editing (GtkTreeView *tree_view, GdkEvent *event, guint flags) { + gint pre_val = tree_view->priv->vadjustment->value; + tree_view->priv->edited_column = column; _gtk_tree_view_column_start_editing (column, GTK_CELL_EDITABLE (cell_editable)); + gtk_tree_view_real_set_cursor (tree_view, path, FALSE, TRUE); + + cell_area->y += pre_val - tree_view->priv->vadjustment->value; + GTK_TREE_VIEW_SET_FLAG (tree_view, GTK_TREE_VIEW_DRAW_KEYFOCUS); gtk_tree_view_put (tree_view, GTK_WIDGET (cell_editable), diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c index c2e5b2e0f4..8858b7d7a9 100644 --- a/gtk/gtktreeviewcolumn.c +++ b/gtk/gtktreeviewcolumn.c @@ -1711,6 +1711,10 @@ gtk_tree_view_column_set_min_width (GtkTreeViewColumn *tree_column, } g_object_notify (G_OBJECT (tree_column), "min_width"); g_object_thaw_notify (G_OBJECT (tree_column)); + + if (tree_column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE) + _gtk_tree_view_column_autosize (GTK_TREE_VIEW (tree_column->tree_view), + tree_column); } /** @@ -1767,6 +1771,10 @@ gtk_tree_view_column_set_max_width (GtkTreeViewColumn *tree_column, } g_object_notify (G_OBJECT (tree_column), "max_width"); g_object_thaw_notify (G_OBJECT (tree_column)); + + if (tree_column->column_type == GTK_TREE_VIEW_COLUMN_AUTOSIZE) + _gtk_tree_view_column_autosize (GTK_TREE_VIEW (tree_column->tree_view), + tree_column); } /**