]> Pileus Git - ~andy/gtk/commitdiff
Bug fix to make trees work again when not sorted.
authorJonathan Blandford <jrb@redhat.com>
Mon, 2 Apr 2001 23:38:54 +0000 (23:38 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Mon, 2 Apr 2001 23:38:54 +0000 (23:38 +0000)
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.

13 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkmarshal.list
gtk/gtkmarshalers.list
gtk/gtktreestore.c
gtk/gtktreeview.c
gtk/gtktreeview.h
tests/testtreecolumns.c

index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
--- 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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 0795916fba6c4066fa51475adb3414ad58c4d694..ff20a9db3ca3695da4120fbdc3b3b82752fd4b82 100644 (file)
@@ -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
index 909da41df54b8228b382430ac3a4ea1d5173480c..1746d351fa6a44821ffe1e6d8c217d6e26e923e5 100644 (file)
@@ -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
index 909da41df54b8228b382430ac3a4ea1d5173480c..1746d351fa6a44821ffe1e6d8c217d6e26e923e5 100644 (file)
@@ -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
index 710ba3d6d75bfe1eb350364c86b7aebb098a5598..6fc2d963e8896d01069313c179d263a36b2a5813 100644 (file)
@@ -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 *
index 74c7a559f487651aeedda009253899669144165d..e8a14ed3a6a1db7c7fbd7af8e104786e93c9b96c 100644 (file)
@@ -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);
index bcaf9e5b29ef3ef1d2f24fc326217a53ecd5a116..94d7d84aaf78c9268be844a8724aafbcbdfd9cd8 100644 (file)
@@ -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);
   
 };
 
index 93c6dab2e9594211bb9b8abc11eac6e191ba35be..e7e5e144fb2a9fe6a744bb5e05142b4e98ddae1c 100644 (file)
@@ -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);
 }