summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorKristian Rietveld <kris@gtk.org>2002-11-20 18:15:28 +0000
committerKristian Rietveld <kristian@src.gnome.org>2002-11-20 18:15:28 +0000
commit83e9cd53209b4d0636d01920afbb48458ef75739 (patch)
treebf8fa01d26fe8f313a3b34767586d7a4d39e3989 /gtk
parentbc035915e9406896c83a7cd6a132eb722229a876 (diff)
downloadgtk+-83e9cd53209b4d0636d01920afbb48458ef75739.tar.gz
return a value in the range of [-1, 1] instead [0, 1],
Wed Nov 20 19:29:50 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtkrbtree.c (gtk_rbtree_reorder_sort_func): return a value in the range of [-1, 1] instead [0, 1], (gtk_rbtree_reorder_invert_func): ditto, This makes treeview reordering working on platforms as FreeBSD and solaris, thanks go to Heiner Eichmann for finding this out and sending in a patch (#98251). Wed Nov 20 19:27:07 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtktreestore.c (node_free): only free the data list if node->data is not NULL, (gtk_tree_store_remove): free the data list from the node if needed. (#94728, pointed out by Peter Bloomfield). Wed Nov 20 19:23:13 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtktreeview.c (gtk_tree_view_remove_column): stop editing and set the edited_column to NULL if edited_column is set. (#91288, modified patch from Josh Parsons). Wed Nov 20 19:20:34 2002 Kristian Rietveld <kris@gtk.org> * gtk/gtktreeview.c (gtk_tree_view_size_allocate): do a full redraw if vadjustment->value is bigger than tree_view->priv->height, (gtk_tree_view_row_deleted): free the row ref if it isn't valid anymore. (#83726, reported by Robert Kinsella).
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkrbtree.c4
-rw-r--r--gtk/gtktreestore.c9
-rw-r--r--gtk/gtktreeview.c36
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--;