summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Blandford <jrb@redhat.com>2001-04-02 23:38:54 +0000
committerJonathan Blandford <jrb@src.gnome.org>2001-04-02 23:38:54 +0000
commit461216d45b52280b5d578b1b4c441ff8ba08c53c (patch)
tree380c0304879861ec603fbbace31c77e53a7f8f51
parentb52b326d5f34b09af70e9f277a43b48c5bf3be2d (diff)
downloadgdk-pixbuf-461216d45b52280b5d578b1b4c441ff8ba08c53c.tar.gz
Bug fix to make trees work again when not sorted.
Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com> * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees work again when not sorted. * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row" and "expand_row" signal, closing bug 52578. * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal support. * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal support.
-rw-r--r--ChangeLog14
-rw-r--r--ChangeLog.pre-2-014
-rw-r--r--ChangeLog.pre-2-1014
-rw-r--r--ChangeLog.pre-2-214
-rw-r--r--ChangeLog.pre-2-414
-rw-r--r--ChangeLog.pre-2-614
-rw-r--r--ChangeLog.pre-2-814
-rw-r--r--gtk/gtkmarshal.list1
-rw-r--r--gtk/gtkmarshalers.list1
-rw-r--r--gtk/gtktreestore.c1
-rw-r--r--gtk/gtktreeview.c123
-rw-r--r--gtk/gtktreeview.h16
-rw-r--r--tests/testtreecolumns.c2
13 files changed, 200 insertions, 42 deletions
diff --git a/ChangeLog b/ChangeLog
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 0795916fb..ff20a9db3 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,17 @@
+Mon Apr 2 19:36:57 2001 Jonathan Blandford <jrb@redhat.com>
+
+ * gtk/gtktreestore.c (gtk_tree_store_init): Bug fix to make trees
+ work again when not sorted.
+
+ * gtk/gtktreeview.c (gtk_tree_view_class_init): Add "collapse_row"
+ and "expand_row" signal, closing bug 52578.
+
+ * gtk/gtktreeview.c (gtk_tree_view_expand_row): Add signal
+ support.
+
+ * gtk/gtktreeview.c (gtk_tree_view_collapse_row): Add signal
+ support.
+
Mon Apr 2 18:18:07 2001 Owen Taylor <otaylor@redhat.com>
* gdk/gdkevents.h: Add GdkEventSetting event for notification
diff --git a/gtk/gtkmarshal.list b/gtk/gtkmarshal.list
index 909da41df..1746d351f 100644
--- a/gtk/gtkmarshal.list
+++ b/gtk/gtkmarshal.list
@@ -22,6 +22,7 @@
# BOOL deprecated alias for BOOLEAN
BOOLEAN:BOXED
+BOOLEAN:BOXED,BOXED
BOOLEAN:OBJECT,INT,INT,UINT
BOOLEAN:OBJECT,STRING,STRING,BOXED
BOOLEAN:OBJECT,BOXED,BOXED
diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list
index 909da41df..1746d351f 100644
--- a/gtk/gtkmarshalers.list
+++ b/gtk/gtkmarshalers.list
@@ -22,6 +22,7 @@
# BOOL deprecated alias for BOOLEAN
BOOLEAN:BOXED
+BOOLEAN:BOXED,BOXED
BOOLEAN:OBJECT,INT,INT,UINT
BOOLEAN:OBJECT,STRING,STRING,BOXED
BOOLEAN:OBJECT,BOXED,BOXED
diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c
index 710ba3d6d..6fc2d963e 100644
--- a/gtk/gtktreestore.c
+++ b/gtk/gtktreestore.c
@@ -228,6 +228,7 @@ gtk_tree_store_init (GtkTreeStore *tree_store)
tree_store->root = g_node_new (NULL);
tree_store->stamp = g_random_int ();
tree_store->sort_list = NULL;
+ tree_store->sort_column_id = -1;
}
GtkTreeStore *
diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c
index 74c7a559f..e8a14ed3a 100644
--- a/gtk/gtktreeview.c
+++ b/gtk/gtktreeview.c
@@ -62,6 +62,8 @@ struct _GtkTreeViewChild
enum
{
ROW_ACTIVATED,
+ EXPAND_ROW,
+ COLLAPSE_ROW,
LAST_SIGNAL
};
@@ -401,15 +403,35 @@ gtk_tree_view_class_init (GtkTreeViewClass *class)
GTK_TYPE_NONE, 2,
GTK_TYPE_ADJUSTMENT, GTK_TYPE_ADJUSTMENT);
- tree_view_signals[ROW_ACTIVATED] = gtk_signal_new ("row_activated",
- GTK_RUN_LAST | GTK_RUN_ACTION,
- GTK_CLASS_TYPE (object_class),
- GTK_SIGNAL_OFFSET (GtkTreeViewClass, row_activated),
- gtk_marshal_VOID__BOXED_OBJECT,
- GTK_TYPE_NONE, 2,
- GTK_TYPE_TREE_PATH,
- GTK_TYPE_TREE_VIEW_COLUMN);
-
+ tree_view_signals[ROW_ACTIVATED] =
+ gtk_signal_new ("row_activated",
+ GTK_RUN_LAST | GTK_RUN_ACTION,
+ GTK_CLASS_TYPE (object_class),
+ GTK_SIGNAL_OFFSET (GtkTreeViewClass, row_activated),
+ gtk_marshal_VOID__BOXED_OBJECT,
+ GTK_TYPE_NONE, 2,
+ GTK_TYPE_TREE_PATH,
+ GTK_TYPE_TREE_VIEW_COLUMN);
+ tree_view_signals[EXPAND_ROW] =
+ g_signal_newc ("expand_row",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkTreeViewClass, expand_row),
+ _gtk_boolean_handled_accumulator, NULL,
+ gtk_marshal_BOOLEAN__BOXED_BOXED,
+ G_TYPE_BOOLEAN, 2,
+ GTK_TYPE_TREE_ITER,
+ GTK_TYPE_TREE_PATH);
+ tree_view_signals[COLLAPSE_ROW] =
+ g_signal_newc ("collapse_row",
+ G_TYPE_FROM_CLASS (object_class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (GtkTreeViewClass, collapse_row),
+ _gtk_boolean_handled_accumulator, NULL,
+ gtk_marshal_BOOLEAN__BOXED_BOXED,
+ G_TYPE_BOOLEAN, 2,
+ GTK_TYPE_TREE_ITER,
+ GTK_TYPE_TREE_PATH);
}
static void
@@ -1992,47 +2014,67 @@ gtk_tree_view_button_release (GtkWidget *widget,
if (tree_view->priv->button_pressed_node == tree_view->priv->prelight_node &&
GTK_TREE_VIEW_FLAG_SET (tree_view, GTK_TREE_VIEW_ARROW_PRELIT))
{
- GtkTreePath *path;
+ GtkTreePath *path = NULL;
GtkTreeIter iter;
/* Actually activate the node */
if (tree_view->priv->button_pressed_node->children == NULL)
{
GtkTreeIter child;
- path = _gtk_tree_view_find_path (GTK_TREE_VIEW (widget),
+ path = _gtk_tree_view_find_path (tree_view,
tree_view->priv->button_pressed_tree,
tree_view->priv->button_pressed_node);
- tree_view->priv->button_pressed_node->children = _gtk_rbtree_new ();
- tree_view->priv->button_pressed_node->children->parent_tree = tree_view->priv->button_pressed_tree;
- tree_view->priv->button_pressed_node->children->parent_node = tree_view->priv->button_pressed_node;
gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
if (gtk_tree_model_iter_children (tree_view->priv->model, &child, &iter))
- gtk_tree_view_build_tree (tree_view,
- tree_view->priv->button_pressed_node->children,
- &child,
- gtk_tree_path_get_depth (path) + 1,
- FALSE,
- GTK_WIDGET_REALIZED (widget));
+ {
+ gboolean expand;
+ g_signal_emit (G_OBJECT (tree_view), tree_view_signals[EXPAND_ROW], 0, &iter, path, &expand);
+ if (! expand)
+ {
+ tree_view->priv->button_pressed_node->children = _gtk_rbtree_new ();
+ tree_view->priv->button_pressed_node->children->parent_tree = tree_view->priv->button_pressed_tree;
+ tree_view->priv->button_pressed_node->children->parent_node = tree_view->priv->button_pressed_node;
+ gtk_tree_view_build_tree (tree_view,
+ tree_view->priv->button_pressed_node->children,
+ &child,
+ gtk_tree_path_get_depth (path) + 1,
+ FALSE,
+ GTK_WIDGET_REALIZED (widget));
+
+ }
+ }
}
else
{
+ gboolean collapse;
+
path = _gtk_tree_view_find_path (GTK_TREE_VIEW (widget),
- tree_view->priv->button_pressed_node->children,
- tree_view->priv->button_pressed_node->children->root);
+ tree_view->priv->button_pressed_tree,
+ tree_view->priv->button_pressed_node);
gtk_tree_model_get_iter (tree_view->priv->model,
&iter,
path);
+ g_signal_emit (G_OBJECT (tree_view), tree_view_signals[COLLAPSE_ROW], 0, &iter, path, &collapse);
- gtk_tree_view_discover_dirty (GTK_TREE_VIEW (widget),
- tree_view->priv->button_pressed_node->children,
- &iter,
- gtk_tree_path_get_depth (path));
- gtk_tree_view_unref_tree (GTK_TREE_VIEW (widget),
- tree_view->priv->button_pressed_node->children);
- _gtk_rbtree_remove (tree_view->priv->button_pressed_node->children);
+ if (! collapse)
+ {
+ GtkTreeIter child_iter;
+ gtk_tree_path_append_index (path, 0);
+ gtk_tree_model_iter_children (tree_view->priv->model,
+ &child_iter,
+ &iter);
+ gtk_tree_view_discover_dirty (GTK_TREE_VIEW (widget),
+ tree_view->priv->button_pressed_node->children,
+ &child_iter,
+ gtk_tree_path_get_depth (path));
+ gtk_tree_view_unref_tree (GTK_TREE_VIEW (widget),
+ tree_view->priv->button_pressed_node->children);
+ _gtk_rbtree_remove (tree_view->priv->button_pressed_node->children);
+ }
}
- gtk_tree_path_free (path);
+ if (path)
+ gtk_tree_path_free (path);
_gtk_tree_view_update_size (GTK_TREE_VIEW (widget));
}
@@ -5181,6 +5223,7 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view,
GtkTreeIter child;
GtkRBTree *tree;
GtkRBNode *node;
+ gboolean expand;
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
g_return_val_if_fail (tree_view->priv->model != NULL, FALSE);
@@ -5199,6 +5242,11 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view,
if (! gtk_tree_model_iter_has_child (tree_view->priv->model, &iter))
return FALSE;
+ g_signal_emit (G_OBJECT (tree_view), tree_view_signals[EXPAND_ROW], 0, &iter, path, &expand);
+
+ if (expand)
+ return FALSE;
+
node->children = _gtk_rbtree_new ();
node->children->parent_tree = tree;
node->children->parent_node = node;
@@ -5222,9 +5270,9 @@ gtk_tree_view_expand_row (GtkTreeView *tree_view,
* @tree_view: a #GtkTreeView
* @path: path to a row in the @tree_view
*
- * Collapses a row (hides its child rows).
+ * Collapses a row (hides its child rows, if they exist.)
*
- * Return value: %TRUE if the row was expanded
+ * Return value: %TRUE if the row was collapsed.
**/
gboolean
gtk_tree_view_collapse_row (GtkTreeView *tree_view,
@@ -5233,6 +5281,7 @@ gtk_tree_view_collapse_row (GtkTreeView *tree_view,
GtkRBTree *tree;
GtkRBNode *node;
GtkTreeIter iter;
+ gboolean collapse;
g_return_val_if_fail (GTK_IS_TREE_VIEW (tree_view), FALSE);
g_return_val_if_fail (tree_view->priv->tree != NULL, FALSE);
@@ -5248,6 +5297,12 @@ gtk_tree_view_collapse_row (GtkTreeView *tree_view,
return FALSE;
gtk_tree_model_get_iter (tree_view->priv->model, &iter, path);
+
+ g_signal_emit (G_OBJECT (tree_view), tree_view_signals[COLLAPSE_ROW], 0, &iter, path, &collapse);
+
+ if (collapse)
+ return FALSE;
+
gtk_tree_view_discover_dirty (tree_view,
node->children,
&iter,
@@ -6133,9 +6188,7 @@ open_row_timeout (gpointer data)
(pos == GTK_TREE_VIEW_DROP_INTO_OR_AFTER ||
pos == GTK_TREE_VIEW_DROP_INTO_OR_BEFORE))
{
- gtk_tree_view_expand_row (tree_view,
- dest_path,
- FALSE);
+ gtk_tree_view_expand_row (tree_view, dest_path, FALSE);
tree_view->priv->open_dest_timeout = 0;
gtk_tree_path_free (dest_path);
diff --git a/gtk/gtktreeview.h b/gtk/gtktreeview.h
index bcaf9e5b2..94d7d84aa 100644
--- a/gtk/gtktreeview.h
+++ b/gtk/gtktreeview.h
@@ -65,13 +65,17 @@ struct _GtkTreeViewClass
{
GtkContainerClass parent_class;
- void (* set_scroll_adjustments) (GtkTreeView *tree_view,
- GtkAdjustment *hadjustment,
- GtkAdjustment *vadjustment);
- void (* row_activated) (GtkTreeView *tree_view,
+ void (* set_scroll_adjustments) (GtkTreeView *tree_view,
+ GtkAdjustment *hadjustment,
+ GtkAdjustment *vadjustment);
+ void (* row_activated) (GtkTreeView *tree_view,
GtkTreeViewColumn *column);
- gint (* expand_row) (GtkTreeView *tree_view,
- GtkTreeIter *iter);
+ gint (* expand_row) (GtkTreeView *tree_view,
+ GtkTreeIter *iter,
+ GtkTreePath *path);
+ gint (* collapse_row) (GtkTreeView *tree_view,
+ GtkTreeIter *iter,
+ GtkTreePath *path);
};
diff --git a/tests/testtreecolumns.c b/tests/testtreecolumns.c
index 93c6dab2e..e7e5e144f 100644
--- a/tests/testtreecolumns.c
+++ b/tests/testtreecolumns.c
@@ -64,7 +64,7 @@ set_visible (GtkCellRendererToggle *cell,
if (column)
{
gtk_tree_view_column_set_visible (column, ! gtk_tree_view_column_get_visible (column));
- gtk_tree_model_changed (model, path, &iter);
+ gtk_tree_model_range_changed (model, path, &iter, path, &iter);
}
gtk_tree_path_free (path);
}