[nautilus-actions] Simplifies nact_tree_model_remove code by only checking status of parent
- From: Pierre Wieser <pwieser src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nautilus-actions] Simplifies nact_tree_model_remove code by only checking status of parent
- Date: Wed, 14 Oct 2009 17:31:17 +0000 (UTC)
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]