diff options
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkrbtree.c | 4 | ||||
-rw-r--r-- | gtk/gtktreestore.c | 9 | ||||
-rw-r--r-- | gtk/gtktreeview.c | 36 |
3 files changed, 38 insertions, 11 deletions
diff --git a/gtk/gtkrbtree.c b/gtk/gtkrbtree.c index 3a4841e9a4..13e0dd569e 100644 --- a/gtk/gtkrbtree.c +++ b/gtk/gtkrbtree.c @@ -931,14 +931,14 @@ static int gtk_rbtree_reorder_sort_func (gconstpointer a, gconstpointer b) { - return ((GtkRBReorder *) a)->order > ((GtkRBReorder *) b)->order; + return ((GtkRBReorder *) a)->order - ((GtkRBReorder *) b)->order; } static int gtk_rbtree_reorder_invert_func (gconstpointer a, gconstpointer b) { - return ((GtkRBReorder *) a)->invert_order > ((GtkRBReorder *) b)->invert_order; + return ((GtkRBReorder *) a)->invert_order - ((GtkRBReorder *) b)->invert_order; } static void diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c index a3f56cd64f..d2bc74246f 100644 --- a/gtk/gtktreestore.c +++ b/gtk/gtktreestore.c @@ -444,7 +444,10 @@ gtk_tree_store_set_column_type (GtkTreeStore *tree_store, static gboolean node_free (GNode *node, gpointer data) { - _gtk_tree_data_list_free (node->data, (GType*)data); + if (node->data) + _gtk_tree_data_list_free (node->data, (GType*)data); + node->data = NULL; + return FALSE; } @@ -1065,8 +1068,8 @@ gtk_tree_store_remove (GtkTreeStore *tree_store, next_node = G_NODE (iter->user_data)->next; if (G_NODE (iter->user_data)->data) - _gtk_tree_data_list_free ((GtkTreeDataList *) G_NODE (iter->user_data)->data, - tree_store->column_headers); + g_node_traverse (G_NODE (iter->user_data), G_POST_ORDER, G_TRAVERSE_ALL, + -1, node_free, tree_store->column_headers); path = gtk_tree_store_get_path (GTK_TREE_MODEL (tree_store), iter); g_node_destroy (G_NODE (iter->user_data)); diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 8ebf772f19..5fe798daed 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -1670,6 +1670,7 @@ gtk_tree_view_size_allocate (GtkWidget *widget, GList *tmp_list; GtkTreeView *tree_view; gboolean width_changed = FALSE; + gboolean dy_changed = FALSE; g_return_if_fail (GTK_IS_TREE_VIEW (widget)); @@ -1715,8 +1716,12 @@ gtk_tree_view_size_allocate (GtkWidget *widget, 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_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)); + { + dy_changed = TRUE; + 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); if (GTK_WIDGET_REALIZED (widget)) @@ -1738,8 +1743,13 @@ gtk_tree_view_size_allocate (GtkWidget *widget, gtk_tree_view_size_allocate_columns (widget); - if (GTK_WIDGET_REALIZED (widget) && width_changed) - invalidate_last_column (tree_view); + if (GTK_WIDGET_REALIZED (widget)) + { + if (width_changed) + invalidate_last_column (tree_view); + if (dy_changed) + gtk_widget_queue_draw (widget); + } } static gboolean @@ -6175,6 +6185,12 @@ gtk_tree_view_row_deleted (GtkTreeModel *model, _gtk_rbtree_remove_node (tree, node); } + if (! gtk_tree_row_reference_valid (tree_view->priv->top_row)) + { + gtk_tree_row_reference_free (tree_view->priv->top_row); + tree_view->priv->top_row = NULL; + } + install_scroll_sync_handler (tree_view); gtk_widget_queue_resize (GTK_WIDGET (tree_view)); @@ -8209,11 +8225,19 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (column), -1); g_return_val_if_fail (column->tree_view == GTK_WIDGET (tree_view), -1); - _gtk_tree_view_column_unset_tree_view (column); - if (tree_view->priv->focus_column == column) tree_view->priv->focus_column = NULL; + if (tree_view->priv->edited_column == column) + { + gtk_tree_view_stop_editing (tree_view, TRUE); + + /* no need to, but just to be sure ... */ + tree_view->priv->edited_column = NULL; + } + + _gtk_tree_view_column_unset_tree_view (column); + tree_view->priv->columns = g_list_remove (tree_view->priv->columns, column); tree_view->priv->n_columns--; |