* 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"
{
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);
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);
}
}
+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
add_or_delete,
add_or_delete,
expand,
- collapse
+ collapse,
+ select_,
+ unselect,
+ reset_model
};
guint i;
check_sanity (treeview);
- return TRUE;
+ return G_SOURCE_CONTINUE;
}
static void