]> Pileus Git - ~andy/gtk/blobdiff - tests/testtreechanging.c
css: Add opacity reftest
[~andy/gtk] / tests / testtreechanging.c
index bd688ff01f3a2317d218920f961832f510163f09..804505cf28e1f8b755ae1237af04e610040886a6 100644 (file)
@@ -13,9 +13,7 @@
  * Library General Public License for more details.
  *
  * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 #include "prop-editor.h"
@@ -63,7 +61,7 @@ log_operation_for_path (GtkTreePath *path,
 {
   char *path_string;
 
-  path_string = gtk_tree_path_to_string (path);
+  path_string = path ? gtk_tree_path_to_string (path) : g_strdup ("");
 
   g_printerr ("%10s %s\n", operation_name, path_string);
 
@@ -110,28 +108,43 @@ tree_model_iter_step (GtkTreeModel *model,
   return FALSE;
 }
 
+/* NB: may include invisible iters (because they are collapsed) */
 static void
-delete (GtkTreeView *treeview)
+tree_view_random_iter (GtkTreeView *treeview,
+                       GtkTreeIter *iter)
 {
   guint n_rows = get_rows (treeview);
   guint i = g_random_int_range (0, n_rows);
   GtkTreeModel *model;
-  GtkTreeIter iter;
 
   model = gtk_tree_view_get_model (treeview);
   
-  if (!gtk_tree_model_get_iter_first (model, &iter))
+  if (!gtk_tree_model_get_iter_first (model, iter))
     return;
 
   while (i-- > 0)
     {
-      if (!tree_model_iter_step (model, &iter))
+      if (!tree_model_iter_step (model, iter))
         {
           g_assert_not_reached ();
           return;
         }
     }
 
+  return;
+}
+
+static void
+delete (GtkTreeView *treeview)
+{
+  guint n_rows = get_rows (treeview);
+  GtkTreeModel *model;
+  GtkTreeIter iter;
+
+  model = gtk_tree_view_get_model (treeview);
+  
+  tree_view_random_iter (treeview, &iter);
+
   n_rows -= count_children (model, &iter) + 1;
   log_operation (model, &iter, "remove");
   gtk_tree_store_remove (GTK_TREE_STORE (model), &iter);
@@ -249,6 +262,63 @@ collapse (GtkTreeView *treeview)
     }
 }
 
+static void
+select_ (GtkTreeView *treeview)
+{
+  GtkTreeIter iter;
+
+  tree_view_random_iter (treeview, &iter);
+
+  log_operation (gtk_tree_view_get_model (treeview), &iter, "select");
+  gtk_tree_selection_select_iter (gtk_tree_view_get_selection (treeview),
+                                  &iter);
+}
+
+static void
+unselect (GtkTreeView *treeview)
+{
+  GtkTreeIter iter;
+
+  tree_view_random_iter (treeview, &iter);
+
+  log_operation (gtk_tree_view_get_model (treeview), &iter, "unselect");
+  gtk_tree_selection_unselect_iter (gtk_tree_view_get_selection (treeview),
+                                    &iter);
+}
+
+static void
+reset_model (GtkTreeView *treeview)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GList *list, *selected;
+  GtkTreePath *cursor;
+  
+  selection = gtk_tree_view_get_selection (treeview);
+  model = g_object_ref (gtk_tree_view_get_model (treeview));
+
+  log_operation_for_path (NULL, "reset");
+
+  selected = gtk_tree_selection_get_selected_rows (selection, NULL);
+  gtk_tree_view_get_cursor (treeview, &cursor, NULL);
+
+  gtk_tree_view_set_model (treeview, NULL);
+  gtk_tree_view_set_model (treeview, model);
+
+  if (cursor)
+    {
+      gtk_tree_view_set_cursor (treeview, cursor, NULL, FALSE);
+      gtk_tree_path_free (cursor);
+    }
+  for (list = selected; list; list = list->next)
+    {
+      gtk_tree_selection_select_path (selection, list->data);
+    }
+  g_list_free_full (selected, (GDestroyNotify) gtk_tree_path_free);
+
+  g_object_unref (model);
+}
+
 /* sanity checks */
 
 static void
@@ -322,7 +392,10 @@ dance (gpointer treeview)
     add_or_delete,
     add_or_delete,
     expand,
-    collapse
+    collapse,
+    select_,
+    unselect,
+    reset_model
   };
   guint i;
 
@@ -332,7 +405,7 @@ dance (gpointer treeview)
 
   check_sanity (treeview);
 
-  return TRUE;
+  return G_SOURCE_CONTINUE;
 }
 
 static void