]> Pileus Git - ~andy/gtk/commitdiff
new "model" construct property for language bindings.
authorJonathan Blandford <jrb@redhat.com>
Wed, 14 Nov 2001 02:06:28 +0000 (02:06 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Wed, 14 Nov 2001 02:06:28 +0000 (02:06 +0000)
Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>

* gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
"model" construct property for language bindings.

* gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
function to let you set the column types of a GtkTreeStore for
language bindings.

* gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.

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/gtkliststore.c
gtk/gtkliststore.h
gtk/gtktreemodelsort.c
gtk/gtktreestore.c
gtk/gtktreestore.h
tests/testtreeflow.c

index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index fb718741dedd9f70fba7b19c78ead53e2892b425..16aad39b4d3aeb41a2a27bef0cebca7832be6f9f 100644 (file)
@@ -1,3 +1,14 @@
+Tue Nov 13 21:00:59 2001  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreemodelsort.c (gtk_tree_model_sort_class_init): new
+       "model" construct property for language bindings.
+
+       * gtk/gtktreestore.c (gtk_tree_store_set_column_types): New
+       function to let you set the column types of a GtkTreeStore for
+       language bindings.
+
+       * gtk/gtkliststore.c (gtk_list_store_set_column_types): ditto.
+
 2001-11-13  Havoc Pennington  <hp@redhat.com>
 
        * gtk/gtktextview.c (gtk_text_view_add_child_in_window): docs
index 5f8bfc335b58e7c015b96ec08f05f3d159f4a8a0..73cb020f917199d5f755514d71c14649a7f5a519 100644 (file)
@@ -252,6 +252,7 @@ gtk_list_store_init (GtkListStore *list_store)
   list_store->stamp = g_random_int ();
   list_store->length = 0;
   list_store->sort_column_id = -2;
+  list_store->columns_dirty = FALSE;
 }
 
 /**
@@ -336,6 +337,39 @@ gtk_list_store_newv (gint   n_columns,
   return retval;
 }
 
+/**
+ * gtk_list_store_set_column_types:
+ * @list_store: A #GtkListStore
+ * @n_columns: Number of columns for the list store
+ * @types: An array length n of @GTypes
+ * 
+ * This function is meant primarily for GObjects that inherit from GtkListStore,
+ * and should only be used when constructing a new @GtkListStore.  It will not
+ * function after a row has been added, or a method on the @GtkTreeModel
+ * interface is called.
+ **/
+void
+gtk_list_store_set_column_types (GtkListStore *list_store,
+                                gint          n_columns,
+                                GType        *types)
+{
+  gint i;
+
+  g_return_if_fail (GTK_IS_LIST_STORE (list_store));
+  g_return_if_fail (list_store->columns_dirty == 0);
+
+  gtk_list_store_set_n_columns (list_store, n_columns);
+   for (i = 0; i < n_columns; i++)
+    {
+      if (! _gtk_tree_data_list_check_type (types[i]))
+       {
+         g_warning ("%s: Invalid type %s passed to gtk_list_store_set_column_types\n", G_STRLOC, g_type_name (types[i]));
+         continue;
+       }
+      gtk_list_store_set_column_type (list_store, i, types[i]);
+    }
+}
+
 static void
 gtk_list_store_set_n_columns (GtkListStore *list_store,
                              gint          n_columns)
@@ -416,20 +450,28 @@ gtk_list_store_get_flags (GtkTreeModel *tree_model)
 static gint
 gtk_list_store_get_n_columns (GtkTreeModel *tree_model)
 {
+  GtkListStore *list_store = (GtkListStore *) tree_model;
+
   g_return_val_if_fail (GTK_IS_LIST_STORE (tree_model), 0);
 
-  return GTK_LIST_STORE (tree_model)->n_columns;
+  list_store->columns_dirty = TRUE;
+
+  return list_store->n_columns;
 }
 
 static GType
 gtk_list_store_get_column_type (GtkTreeModel *tree_model,
                                gint          index)
 {
+  GtkListStore *list_store = (GtkListStore *) tree_model;
+
   g_return_val_if_fail (GTK_IS_LIST_STORE (tree_model), G_TYPE_INVALID);
   g_return_val_if_fail (index < GTK_LIST_STORE (tree_model)->n_columns &&
                        index >= 0, G_TYPE_INVALID);
 
-  return GTK_LIST_STORE (tree_model)->column_headers[index];
+  list_store->columns_dirty = TRUE;
+
+  return list_store->column_headers[index];
 }
 
 static gboolean
@@ -437,24 +479,28 @@ gtk_list_store_get_iter (GtkTreeModel *tree_model,
                         GtkTreeIter  *iter,
                         GtkTreePath  *path)
 {
+  GtkListStore *list_store = (GtkListStore *) tree_model;
   GSList *list;
   gint i;
 
   g_return_val_if_fail (GTK_IS_LIST_STORE (tree_model), FALSE);
   g_return_val_if_fail (gtk_tree_path_get_depth (path) > 0, FALSE);
 
+  list_store->columns_dirty = TRUE;
+
   i = gtk_tree_path_get_indices (path)[0];
 
-  if (i >= GTK_LIST_STORE (tree_model)->length)
+  if (i >= list_store->length)
     return FALSE;
 
-  list = g_slist_nth (G_SLIST (GTK_LIST_STORE (tree_model)->root), i);
+  list = g_slist_nth (G_SLIST (list_store->root), i);
 
   /* If this fails, list_store->length has gotten mangled. */
   g_assert (list);
 
-  iter->stamp = GTK_LIST_STORE (tree_model)->stamp;
+  iter->stamp = list_store->stamp;
   iter->user_data = list;
+
   return TRUE;
 }
 
@@ -978,6 +1024,8 @@ gtk_list_store_insert (GtkListStore *list_store,
   g_return_if_fail (iter != NULL);
   g_return_if_fail (position >= 0);
 
+  list_store->columns_dirty = TRUE;
+
   if (position == 0 ||
       GTK_LIST_STORE_IS_SORTED (list_store))
     {
@@ -1034,6 +1082,7 @@ gtk_list_store_insert_before (GtkListStore *list_store,
   if (sibling)
     g_return_if_fail (VALID_ITER (sibling, list_store));
 
+  list_store->columns_dirty = TRUE;
 
   if (GTK_LIST_STORE_IS_SORTED (list_store))
     {
@@ -1122,6 +1171,8 @@ gtk_list_store_insert_after (GtkListStore *list_store,
   if (sibling)
     g_return_if_fail (VALID_ITER (sibling, list_store));
 
+  list_store->columns_dirty = TRUE;
+
   if (sibling == NULL ||
       GTK_LIST_STORE_IS_SORTED (list_store))
     {
@@ -1171,6 +1222,8 @@ gtk_list_store_prepend (GtkListStore *list_store,
   iter->stamp = list_store->stamp;
   iter->user_data = g_slist_alloc ();
 
+  list_store->columns_dirty = TRUE;
+
   if (list_store->root == NULL)
     list_store->tail = iter->user_data;
 
@@ -1206,6 +1259,8 @@ gtk_list_store_append (GtkListStore *list_store,
   g_return_if_fail (GTK_IS_LIST_STORE (list_store));
   g_return_if_fail (iter != NULL);
 
+  list_store->columns_dirty = TRUE;
+
   if (GTK_LIST_STORE_IS_SORTED (list_store))
     {
       gtk_list_store_prepend (list_store, iter);
index 10364ac2b15481c674e0efea28a86f3b36eb43e0..806220c9cc5a0c46b312b1cb6dd118bd3a0f7ca6 100644 (file)
@@ -54,6 +54,7 @@ struct _GtkListStore
   GtkTreeIterCompareFunc default_sort_func;
   gpointer default_sort_data;
   GtkDestroyNotify default_sort_destroy;
+  guint columns_dirty : 1;
 };
 
 struct _GtkListStoreClass
@@ -62,37 +63,40 @@ struct _GtkListStoreClass
 };
 
 
-GtkType       gtk_list_store_get_type        (void);
-GtkListStore *gtk_list_store_new             (gint          n_columns,
-                                             ...);
-GtkListStore *gtk_list_store_newv            (gint          n_columns,
-                                             GType        *types);
-void          gtk_list_store_set_value       (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             gint          column,
-                                             GValue       *value);
-void          gtk_list_store_set             (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             ...);
-void          gtk_list_store_set_valist      (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             va_list       var_args);
-void          gtk_list_store_remove          (GtkListStore *list_store,
-                                             GtkTreeIter  *iter);
-void          gtk_list_store_insert          (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             gint          position);
-void          gtk_list_store_insert_before   (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *sibling);
-void          gtk_list_store_insert_after    (GtkListStore *list_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *sibling);
-void          gtk_list_store_prepend         (GtkListStore *list_store,
-                                             GtkTreeIter  *iter);
-void          gtk_list_store_append          (GtkListStore *list_store,
-                                             GtkTreeIter  *iter);
-void          gtk_list_store_clear           (GtkListStore *list_store);
+GtkType       gtk_list_store_get_type         (void);
+GtkListStore *gtk_list_store_new              (gint          n_columns,
+                                              ...);
+GtkListStore *gtk_list_store_newv             (gint          n_columns,
+                                              GType        *types);
+void          gtk_list_store_set_column_types (GtkListStore *list_store,
+                                              gint          n_columns,
+                                              GType        *types);
+void          gtk_list_store_set_value        (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              gint          column,
+                                              GValue       *value);
+void          gtk_list_store_set              (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              ...);
+void          gtk_list_store_set_valist       (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              va_list       var_args);
+void          gtk_list_store_remove           (GtkListStore *list_store,
+                                              GtkTreeIter  *iter);
+void          gtk_list_store_insert           (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              gint          position);
+void          gtk_list_store_insert_before    (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *sibling);
+void          gtk_list_store_insert_after     (GtkListStore *list_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *sibling);
+void          gtk_list_store_prepend          (GtkListStore *list_store,
+                                              GtkTreeIter  *iter);
+void          gtk_list_store_append           (GtkListStore *list_store,
+                                              GtkTreeIter  *iter);
+void          gtk_list_store_clear            (GtkListStore *list_store);
 
 
 #ifdef __cplusplus
index cb1097e0c85246c54d95ee843f9e2a4d72c540ab..7cd66ad6f7f47c91ca71d79814fe7f32981aa512 100644 (file)
@@ -36,6 +36,7 @@
 #include "gtksignal.h"
 #include "gtktreedatalist.h"
 #include <string.h>
+#include "gtkintl.h"
 
 typedef struct _SortElt SortElt;
 typedef struct _SortLevel SortLevel;
@@ -75,6 +76,15 @@ struct _SortTuple
   gint       offset;  
 };
 
+/* Properties */
+enum {
+  PROP_0,
+  /* Construct args */
+  PROP_MODEL
+};
+
+
+
 #define GTK_TREE_MODEL_SORT_CACHE_CHILD_ITERS(tree_model_sort) \
        (((GtkTreeModelSort *)tree_model_sort)->child_flags&GTK_TREE_MODEL_ITERS_PERSIST)
 #define SORT_ELT(sort_elt) ((SortElt *)sort_elt)
@@ -87,6 +97,14 @@ static void gtk_tree_model_sort_class_init            (GtkTreeModelSortClass *tr
 static void gtk_tree_model_sort_tree_model_init       (GtkTreeModelIface     *iface);
 static void gtk_tree_model_sort_tree_sortable_init    (GtkTreeSortableIface  *iface);
 static void gtk_tree_model_sort_finalize              (GObject               *object);
+static void gtk_tree_model_sort_set_property          (GObject         *object,
+                                                      guint            prop_id,
+                                                      const GValue    *value,
+                                                      GParamSpec      *pspec);
+static void gtk_tree_model_sort_get_property          (GObject         *object,
+                                                      guint            prop_id,
+                                                      GValue          *value,
+                                                      GParamSpec      *pspec);
 static void gtk_tree_model_sort_row_changed           (GtkTreeModel          *model,
                                                       GtkTreePath           *start_path,
                                                       GtkTreeIter           *start_iter,
@@ -283,7 +301,19 @@ gtk_tree_model_sort_class_init (GtkTreeModelSortClass *class)
   object_class = (GObjectClass *) class;
   parent_class = g_type_class_peek_parent (class);
 
+  object_class->set_property = gtk_tree_model_sort_set_property;
+  object_class->get_property = gtk_tree_model_sort_get_property;
+
   object_class->finalize = gtk_tree_model_sort_finalize;
+
+  /* Properties */
+  g_object_class_install_property (object_class,
+                                   PROP_MODEL,
+                                   g_param_spec_object ("model",
+                                                       _("TreeModelSort Model"),
+                                                       _("The model for the TreeModelSort to sort"),
+                                                       GTK_TYPE_TREE_MODEL,
+                                                       G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
 }
 
 static void
@@ -358,6 +388,44 @@ gtk_tree_model_sort_finalize (GObject *object)
   parent_class->finalize (object);
 }
 
+static void
+gtk_tree_model_sort_set_property (GObject      *object,
+                                 guint         prop_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
+{
+  GtkTreeModelSort *tree_model_sort = GTK_TREE_MODEL_SORT (object);
+
+  switch (prop_id)
+    {
+    case PROP_MODEL:
+      gtk_tree_model_sort_set_model (tree_model_sort, g_value_get_object (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+static void
+gtk_tree_model_sort_get_property (GObject    *object,
+                                 guint       prop_id,
+                                 GValue     *value,
+                                 GParamSpec *pspec)
+{
+  GtkTreeModelSort *tree_model_sort = GTK_TREE_MODEL_SORT (object);
+
+  switch (prop_id)
+    {
+    case PROP_MODEL:
+      g_value_set_object (value, gtk_tree_model_sort_get_model(tree_model_sort));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
 static void
 gtk_tree_model_sort_row_changed (GtkTreeModel *s_model,
                                 GtkTreePath  *start_s_path,
index 90e5a27cd3ca99c60ee04b2ceba85abfdfd1f67f..7c6d8c59ecf467aca5bebff563ff7519ddcdca7b 100644 (file)
@@ -250,13 +250,17 @@ static void
 gtk_tree_store_init (GtkTreeStore *tree_store)
 {
   tree_store->root = g_node_new (NULL);
+  /* While the odds are against us getting 0...
+   */
   do
     {
       tree_store->stamp = g_random_int ();
     }
   while (tree_store->stamp == 0);
+
   tree_store->sort_list = NULL;
   tree_store->sort_column_id = -2;
+  tree_store->columns_dirty = FALSE;
 }
 
 /**
@@ -336,6 +340,40 @@ gtk_tree_store_newv (gint   n_columns,
   return retval;
 }
 
+
+/**
+ * gtk_tree_store_set_column_types:
+ * @tree_store: A #GtkTreeStore
+ * @n_columns: Number of columns for the tree store
+ * @types: An array length n of @GTypes
+ * 
+ * This function is meant primarily for GObjects that inherit from GtkTreeStore,
+ * and should only be used when constructing a new @GtkTreeStore.  It will not
+ * function after a row has been added, or a method on the @GtkTreeModel
+ * interface is called.
+ **/
+void
+gtk_tree_store_set_column_types (GtkTreeStore *tree_store,
+                                gint          n_columns,
+                                GType        *types)
+{
+  gint i;
+
+  g_return_if_fail (GTK_IS_TREE_STORE (tree_store));
+  g_return_if_fail (tree_store->columns_dirty == 0);
+
+  gtk_tree_store_set_n_columns (tree_store, n_columns);
+   for (i = 0; i < n_columns; i++)
+    {
+      if (! _gtk_tree_data_list_check_type (types[i]))
+       {
+         g_warning ("%s: Invalid type %s passed to gtk_tree_store_set_column_types\n", G_STRLOC, g_type_name (types[i]));
+         continue;
+       }
+      gtk_tree_store_set_column_type (tree_store, i, types[i]);
+    }
+}
+
 static void
 gtk_tree_store_set_n_columns (GtkTreeStore *tree_store,
                              gint          n_columns)
@@ -438,20 +476,28 @@ gtk_tree_store_get_flags (GtkTreeModel *tree_model)
 static gint
 gtk_tree_store_get_n_columns (GtkTreeModel *tree_model)
 {
+  GtkTreeStore *tree_store = (GtkTreeStore *) tree_model;
+
   g_return_val_if_fail (GTK_IS_TREE_STORE (tree_model), 0);
 
-  return GTK_TREE_STORE (tree_model)->n_columns;
+  tree_store->columns_dirty = TRUE;
+
+  return tree_store->n_columns;
 }
 
 static GType
 gtk_tree_store_get_column_type (GtkTreeModel *tree_model,
                                gint          index)
 {
+  GtkTreeStore *tree_store = (GtkTreeStore *) tree_model;
+
   g_return_val_if_fail (GTK_IS_TREE_STORE (tree_model), G_TYPE_INVALID);
   g_return_val_if_fail (index < GTK_TREE_STORE (tree_model)->n_columns &&
                        index >= 0, G_TYPE_INVALID);
 
-  return GTK_TREE_STORE (tree_model)->column_headers[index];
+  tree_store->columns_dirty = TRUE;
+
+  return tree_store->column_headers[index];
 }
 
 static gboolean
@@ -465,7 +511,9 @@ gtk_tree_store_get_iter (GtkTreeModel *tree_model,
   gint depth, i;
 
   g_return_val_if_fail (GTK_IS_TREE_STORE (tree_store), FALSE);
-  
+
+  tree_store->columns_dirty = TRUE;
+
   indices = gtk_tree_path_get_indices (path);
   depth = gtk_tree_path_get_depth (path);
 
@@ -1030,6 +1078,8 @@ gtk_tree_store_insert (GtkTreeStore *tree_store,
   else
     parent_node = tree_store->root;
 
+  tree_store->columns_dirty = TRUE;
+
   iter->stamp = tree_store->stamp;
   iter->user_data = g_node_new (NULL);
   g_node_insert (parent_node, position, G_NODE (iter->user_data));
@@ -1077,6 +1127,8 @@ gtk_tree_store_insert_before (GtkTreeStore *tree_store,
   if (sibling != NULL)
     g_return_if_fail (VALID_ITER (sibling, tree_store));
 
+  tree_store->columns_dirty = TRUE;
+
   new_node = g_node_new (NULL);
 
   if (parent == NULL && sibling == NULL)
@@ -1141,6 +1193,8 @@ gtk_tree_store_insert_after (GtkTreeStore *tree_store,
   if (sibling != NULL)
     g_return_if_fail (VALID_ITER (sibling, tree_store));
 
+  tree_store->columns_dirty = TRUE;
+
   new_node = g_node_new (NULL);
 
   if (parent == NULL && sibling == NULL)
@@ -1196,6 +1250,8 @@ gtk_tree_store_prepend (GtkTreeStore *tree_store,
   if (parent != NULL)
     g_return_if_fail (VALID_ITER (parent, tree_store));
 
+  tree_store->columns_dirty = TRUE;
+
   if (parent == NULL)
     parent_node = tree_store->root;
   else
@@ -1258,6 +1314,8 @@ gtk_tree_store_append (GtkTreeStore *tree_store,
   else
     parent_node = parent->user_data;
 
+  tree_store->columns_dirty = TRUE;
+
   if (parent_node->children == NULL)
     {
       GtkTreePath *path;
index 508a4c286718dc2a39c74a34f11d9f30e7effdf4..4b517f21e36a43f82f41bc9e9af4545ac67a1786 100644 (file)
@@ -53,6 +53,7 @@ struct _GtkTreeStore
   GtkTreeIterCompareFunc default_sort_func;
   gpointer default_sort_data;
   GtkDestroyNotify default_sort_destroy;
+  guint columns_dirty : 1;
 };
 
 struct _GtkTreeStoreClass
@@ -61,47 +62,51 @@ struct _GtkTreeStoreClass
 };
 
 
-GtkType       gtk_tree_store_get_type        (void);
-GtkTreeStore *gtk_tree_store_new             (gint          n_columns,
-                                             ...);
-GtkTreeStore *gtk_tree_store_newv            (gint          n_columns,
-                                             GType        *types);
-void          gtk_tree_store_set_value       (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             gint          column,
-                                             GValue       *value);
-void          gtk_tree_store_set             (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             ...);
-void          gtk_tree_store_set_valist      (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             va_list       var_args);
-void          gtk_tree_store_remove          (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter);
-void          gtk_tree_store_insert          (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *parent,
-                                             gint          position);
-void          gtk_tree_store_insert_before   (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *parent,
-                                             GtkTreeIter  *sibling);
-void          gtk_tree_store_insert_after    (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *parent,
-                                             GtkTreeIter  *sibling);
-void          gtk_tree_store_prepend         (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *parent);
-void          gtk_tree_store_append          (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *parent);
-gboolean      gtk_tree_store_is_ancestor     (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter,
-                                             GtkTreeIter  *descendant);
-gint          gtk_tree_store_iter_depth      (GtkTreeStore *tree_store,
-                                             GtkTreeIter  *iter);
-void          gtk_tree_store_clear           (GtkTreeStore *tree_store);
+GtkType       gtk_tree_store_get_type         (void);
+GtkTreeStore *gtk_tree_store_new              (gint          n_columns,
+                                              ...);
+GtkTreeStore *gtk_tree_store_newv             (gint          n_columns,
+                                              GType        *types);
+void          gtk_tree_store_set_column_types (GtkTreeStore *tree_store,
+                                              gint          n_columns,
+                                              GType        *types);
+void          gtk_tree_store_set_value        (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              gint          column,
+                                              GValue       *value);
+void          gtk_tree_store_set              (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              ...);
+void          gtk_tree_store_set_valist       (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              va_list       var_args);
+void          gtk_tree_store_remove           (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter);
+void          gtk_tree_store_insert           (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *parent,
+                                              gint          position);
+void          gtk_tree_store_insert_before    (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *parent,
+                                              GtkTreeIter  *sibling);
+void          gtk_tree_store_insert_after     (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *parent,
+                                              GtkTreeIter  *sibling);
+void          gtk_tree_store_prepend          (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *parent);
+void          gtk_tree_store_append           (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *parent);
+gboolean      gtk_tree_store_is_ancestor      (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter,
+                                              GtkTreeIter  *descendant);
+gint          gtk_tree_store_iter_depth       (GtkTreeStore *tree_store,
+                                              GtkTreeIter  *iter);
+void          gtk_tree_store_clear            (GtkTreeStore *tree_store);
+
 
 #ifdef __cplusplus
 }
index b9558cf0e9133306b73e70c6e071087aba63e040..d036f8cced56afb8471a3190dd4f5267b0996bc9 100644 (file)
@@ -121,6 +121,7 @@ main (int argc, char *argv[])
   
   initialize_model ();
   tree_view = gtk_tree_view_new_with_model (model);
+  gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (tree_view), TRUE);
   gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree_view), FALSE);
   gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW (tree_view),
                                               -1,