nautilus r13773 - in trunk: . src/file-manager
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: nautilus r13773 - in trunk: . src/file-manager
- Date: Tue, 19 Feb 2008 13:25:50 +0000 (GMT)
Author: alexl
Date: Tue Feb 19 13:25:50 2008
New Revision: 13773
URL: http://svn.gnome.org/viewvc/nautilus?rev=13773&view=rev
Log:
2008-02-19 Alexander Larsson <alexl redhat com>
* src/file-manager/fm-tree-model.[ch]:
Add fm_tree_model_iter_compare_roots to compare roots
Report dummy rows added before reporting has_child_toggled.
* src/file-manager/fm-tree-view.c:
(compare_rows):
Use fm_tree_model_iter_compare_roots when comparing roots
to force a stable sort, because GtkTreeModelSort isn't stable.
Modified:
trunk/ChangeLog
trunk/src/file-manager/fm-tree-model.c
trunk/src/file-manager/fm-tree-model.h
trunk/src/file-manager/fm-tree-view.c
Modified: trunk/src/file-manager/fm-tree-model.c
==============================================================================
--- trunk/src/file-manager/fm-tree-model.c (original)
+++ trunk/src/file-manager/fm-tree-model.c Tue Feb 19 13:25:50 2008
@@ -667,12 +667,13 @@
report_row_inserted (model, &iter);
node->inserted = TRUE;
+ if (tree_node_has_dummy_child (node)) {
+ report_dummy_row_inserted (model, node);
+ }
+
if (node->directory != NULL ||
node->parent == NULL) {
report_row_has_child_toggled (model, &iter);
- }
- if (tree_node_has_dummy_child (node)) {
- report_dummy_row_inserted (model, node);
}
}
@@ -1767,6 +1768,40 @@
return node == NULL ? NULL : nautilus_file_ref (node->file);
}
+/* This is used to work around some sort order stability problems
+ with gtktreemodelsort */
+int
+fm_tree_model_iter_compare_roots (FMTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b)
+{
+ TreeNode *a, *b, *n;
+
+ g_return_val_if_fail (FM_IS_TREE_MODEL (model), 0);
+ g_return_val_if_fail (iter_is_valid (model, iter_a), 0);
+ g_return_val_if_fail (iter_is_valid (model, iter_b), 0);
+
+ a = iter_a->user_data;
+ b = iter_b->user_data;
+
+ g_assert (a != NULL && a->parent == NULL);
+ g_assert (b != NULL && b->parent == NULL);
+
+ if (a == b) {
+ return 0;
+ }
+
+ for (n = model->details->root_node; n != NULL; n = n->next) {
+ if (n == a) {
+ return -1;
+ }
+ if (n == b) {
+ return 1;
+ }
+ }
+ g_assert_not_reached ();
+}
+
gboolean
fm_tree_model_iter_is_root (FMTreeModel *model, GtkTreeIter *iter)
{
Modified: trunk/src/file-manager/fm-tree-model.h
==============================================================================
--- trunk/src/file-manager/fm-tree-model.h (original)
+++ trunk/src/file-manager/fm-tree-model.h Tue Feb 19 13:25:50 2008
@@ -81,6 +81,9 @@
const char *root_uri);
gboolean fm_tree_model_iter_is_root (FMTreeModel *model,
GtkTreeIter *iter);
+int fm_tree_model_iter_compare_roots (FMTreeModel *model,
+ GtkTreeIter *iter_a,
+ GtkTreeIter *iter_b);
gboolean fm_tree_model_file_get_iter (FMTreeModel *model,
GtkTreeIter *iter,
NautilusFile *file,
Modified: trunk/src/file-manager/fm-tree-view.c
==============================================================================
--- trunk/src/file-manager/fm-tree-view.c (original)
+++ trunk/src/file-manager/fm-tree-view.c Tue Feb 19 13:25:50 2008
@@ -507,9 +507,9 @@
}
/* don't sort root nodes */
- if (fm_tree_model_iter_is_root (FM_TREE_MODEL (model), a)
- || fm_tree_model_iter_is_root (FM_TREE_MODEL (model), b)) {
- return 0;
+ if (fm_tree_model_iter_is_root (FM_TREE_MODEL (model), a) &&
+ fm_tree_model_iter_is_root (FM_TREE_MODEL (model), b)) {
+ return fm_tree_model_iter_compare_roots (FM_TREE_MODEL (model), a, b);
}
file_a = fm_tree_model_iter_get_file (FM_TREE_MODEL (model), a);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]