[nautilus-actions] Simplifies nact_tree_model_remove code by only checking status of parent



commit 5ae6dfc09e6eb312537580165f8c3c0c1b37ac9f
Author: Pierre Wieser <pwieser trychlos org>
Date:   Tue Oct 13 23:00:32 2009 +0200

    Simplifies nact_tree_model_remove code by only checking status of parent

 ChangeLog                    |    8 ++++++
 src/common/na-object-api.h   |    9 ++++---
 src/common/na-object-id-fn.h |    1 +
 src/common/na-object-id.c    |   22 ++++++++++++++++++
 src/nact/nact-tree-model.c   |   51 ++++++-----------------------------------
 5 files changed, 44 insertions(+), 47 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index d803be4..1000e97 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
 2009-10-13 Pierre Wieser <pwieser trychlos org>
 
+	* src/common/na-object-api.h:
+	* src/common/na-object-id-fn.h:
+	* src/common/na-object-id.c (na_object_check_status_up):
+	New function.
+
+	* src/nact/nact-tree-model.c (nact_tree_model_remove):
+	Simplifies the code by only checking the status of the parent.
+
 	* src/nact/nact-iactions-list.c:
 	* src/nact/nact-main-menubar.c:
 	* src/nact/nact-tree-model.c:
diff --git a/src/common/na-object-api.h b/src/common/na-object-api.h
index 92f8d4d..41aec80 100644
--- a/src/common/na-object-api.h
+++ b/src/common/na-object-api.h
@@ -52,17 +52,18 @@
 
 G_BEGIN_DECLS
 
-/* NAObject
- */
-#define na_object_reset_origin( object, origin )	na_object_object_reset_origin( NA_OBJECT( object ), ( NAObject * ) origin )
-
 /* NAIDuplicable
  */
 #define na_object_get_origin( object )				na_object_iduplicable_get_origin( NA_OBJECT( object ))
 #define na_object_set_origin( object, origin )		na_object_iduplicable_set_origin( NA_OBJECT( object ), NA_OBJECT( origin ))
 
+/* NAObject
+ */
+#define na_object_reset_origin( object, origin )	na_object_object_reset_origin( NA_OBJECT( object ), ( NAObject * ) origin )
+
 /* NAObjectId
  */
+#define na_object_check_status_up( object )			na_object_id_check_status_up( NA_OBJECT_ID( object ))
 #define na_object_get_topmost_parent( object )		na_object_id_get_topmost_parent( NA_OBJECT_ID( object ))
 #define na_object_prepare_for_paste( object, pivot, renumber, action ) \
 													na_object_id_prepare_for_paste( NA_OBJECT_ID( object ), pivot, renumber, ( NAObjectAction * ) action )
diff --git a/src/common/na-object-id-fn.h b/src/common/na-object-id-fn.h
index 9127f74..175dc97 100644
--- a/src/common/na-object-id-fn.h
+++ b/src/common/na-object-id-fn.h
@@ -48,6 +48,7 @@
 
 G_BEGIN_DECLS
 
+void        na_object_id_check_status_up( NAObjectId *object );
 NAObjectId *na_object_id_get_topmost_parent( NAObjectId *object );
 void        na_object_id_prepare_for_paste( NAObjectId *object, NAPivot *pivot, gboolean renumber, NAObjectAction *action );
 void        na_object_id_set_copy_of_label( NAObjectId *object );
diff --git a/src/common/na-object-id.c b/src/common/na-object-id.c
index 701e1ff..7350dfd 100644
--- a/src/common/na-object-id.c
+++ b/src/common/na-object-id.c
@@ -42,6 +42,28 @@
 #include "na-iprefs.h"
 
 /**
+ * na_object_id_check_status_up:
+ * @object: the object at the start of the hierarchy.
+ *
+ * Checks for modification and validity status of the @object, its
+ * parent, the parent of its parent, etc. up to the top of the hierarchy.
+ */
+void
+na_object_id_check_status_up( NAObjectId *object )
+{
+	g_return_if_fail( NA_OBJECT_ID( object ));
+
+	if( !object->private->dispose_has_run ){
+
+		na_iduplicable_check_status( NA_IDUPLICABLE( object ));
+
+		if( object->private->parent ){
+			na_object_id_check_status_up( NA_OBJECT_ID( object->private->parent ));
+		}
+	}
+}
+
+/**
  * na_object_id_get_topmost_parent:
  * @object: the #NAObject whose parent is searched.
  *
diff --git a/src/nact/nact-tree-model.c b/src/nact/nact-tree-model.c
index e7847f3..76afab7 100644
--- a/src/nact/nact-tree-model.c
+++ b/src/nact/nact-tree-model.c
@@ -170,7 +170,7 @@ static NactTreeModel *tree_model_new( BaseWindow *window, GtkTreeView *treeview
 static void           fill_tree_store( GtkTreeStore *model, GtkTreeView *treeview, NAObject *object, gboolean only_actions, GtkTreeIter *parent );
 static void           remove_if_exists( NactTreeModel *model, GtkTreeModel *store, const NAObject *object );
 
-static GList         *add_parent( GList *parents, GtkTreeModel *store, GtkTreeIter *obj_iter );
+/*static GList         *add_parent( GList *parents, GtkTreeModel *store, GtkTreeIter *obj_iter );*/
 static void           append_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *parent, GtkTreeIter *iter, const NAObject *object );
 static void           display_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *iter, const NAObject *object );
 static gboolean       dump_store( NactTreeModel *model, GtkTreePath *path, NAObject *object, ntmDumpStruct *ntm );
@@ -952,8 +952,7 @@ nact_tree_model_remove( NactTreeModel *model, NAObject *object )
 	static const gchar *thisfn = "nact_tree_model_remove";
 	GtkTreeIter iter;
 	GtkTreeStore *store;
-	GList *parents = NULL;
-	GList *it;
+	NAObjectItem *parent;
 	GtkTreePath *path = NULL;
 
 	g_debug( "%s: model=%p, object=%p (%s)",
@@ -965,54 +964,20 @@ nact_tree_model_remove( NactTreeModel *model, NAObject *object )
 		store = GTK_TREE_STORE( gtk_tree_model_filter_get_model( GTK_TREE_MODEL_FILTER( model )));
 
 		if( search_for_object( model, GTK_TREE_MODEL( store ), object, &iter )){
-			parents = add_parent( parents, GTK_TREE_MODEL( store ), &iter );
+			/*parents = add_parent( parents, GTK_TREE_MODEL( store ), &iter );*/
+			parent = na_object_get_parent( object );
+			if( parent ){
+				na_object_remove_item( parent, object );
+				na_object_check_status_up( parent );
+			}
 			path = gtk_tree_model_get_path( GTK_TREE_MODEL( store ), &iter );
 			remove_items( store, &iter );
 		}
-
-		for( it = parents ; it ; it = it->next ){
-			na_object_check_status( it->data );
-		}
 	}
 
 	return( path );
 }
 
-/*
- * iter is positionned on the row which is going to be deleted
- * remove the object from the subitems list of parent (if any)
- * add parent to the list to check its status after remove will be done
- */
-static GList *
-add_parent( GList *parents, GtkTreeModel *store, GtkTreeIter *obj_iter )
-{
-	NAObject *object;
-	GtkTreePath *path;
-	GtkTreeIter iter;
-	NAObject *parent;
-
-	gtk_tree_model_get( store, obj_iter, IACTIONS_LIST_NAOBJECT_COLUMN, &object, -1 );
-	path = gtk_tree_model_get_path( store, obj_iter );
-
-	if( gtk_tree_path_get_depth( path ) > 1 ){
-		gtk_tree_path_up( path );
-		gtk_tree_model_get_iter( store, &iter, path );
-		gtk_tree_model_get( store, &iter, IACTIONS_LIST_NAOBJECT_COLUMN, &parent, -1 );
-
-		if( !g_list_find( parents, parent )){
-			parents = g_list_prepend( parents, parent );
-			na_object_remove_item( parent, object );
-		}
-
-		g_object_unref( parent );
-	}
-
-	gtk_tree_path_free( path );
-	g_object_unref( object );
-
-	return( parents );
-}
-
 static void
 append_item( GtkTreeStore *model, GtkTreeView *treeview, GtkTreeIter *parent, GtkTreeIter *iter, const NAObject *object )
 {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]