[nautilus-actions] Only display valid items in Nautilus context menu



commit 08923c403c45ee556185f4643f669d11393313a7
Author: pierre <pierre vfedora10 virtuals pwi>
Date:   Mon Oct 12 16:54:19 2009 +0200

    Only display valid items in Nautilus context menu

 ChangeLog                     |   26 +++++++++++++++++
 src/common/na-object-api.h    |    2 -
 src/common/na-object-fn.h     |    3 --
 src/common/na-object.c        |   63 -----------------------------------------
 src/plugin/nautilus-actions.c |    5 ++-
 src/runtime/na-iio-provider.c |    6 +++-
 src/runtime/na-object-api.h   |    2 +
 src/runtime/na-object-fn.h    |    2 +
 src/runtime/na-object.c       |   63 +++++++++++++++++++++++++++++++++++++++++
 9 files changed, 101 insertions(+), 71 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index cc3b482..486bfc9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,34 @@
 2009-10-12 Pierre Wieser <pwieser trychlos org>
 
+	* src/common/na-object-api.h
+	(na_object_check_edition_status, na_object_is_valid):
+	Moved to src/runtime/na-object-api.h.
+
+	* src/common/na-object-fn.h:
+	* src/common/na-object.c
+	(na_object_iduplicable_check_edition_status,
+	na_object_iduplicable_is_valid): 
+	Moved to src/runtime/na-object-fn.h, src/runtime/na-object.c.
+
 	* src/nact/nact-tree-model.c (drop_inside):
 	Adjust the dest when moving items down.
 
+	* src/plugin/nautilus-actions.c (build_nautilus_menus):
+	Only display valid items.
+
+	* src/runtime/na-iio-provider.c (na_iio_provider_get_items_tree):
+	Check validity status at load time.
+
+	* src/runtime/na-object-api.h
+	(na_object_check_edition_status, na_object_is_valid):
+	Moved from src/common/na-object-api.h.
+
+	* src/runtime/na-object-fn.h:
+	* src/runtime/na-object.c
+	(na_object_iduplicable_check_edition_status,
+        na_object_iduplicable_is_valid):
+	Moved from  src/common/na-object-fn.h, src/common/na-object.c.
+
 	* src/runtime/na-object-menu.c (object_is_valid):
 	A valid menu has at least one valid subitem.
 
diff --git a/src/common/na-object-api.h b/src/common/na-object-api.h
index fe4bf46..fb6eab0 100644
--- a/src/common/na-object-api.h
+++ b/src/common/na-object-api.h
@@ -58,8 +58,6 @@ G_BEGIN_DECLS
 
 /* NAIDuplicable
  */
-#define na_object_check_edition_status( object )	na_object_iduplicable_check_edition_status( NA_OBJECT( object ))
-#define na_object_is_valid( object )				na_object_iduplicable_is_valid( NA_OBJECT( object ))
 #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 ))
 
diff --git a/src/common/na-object-fn.h b/src/common/na-object-fn.h
index 6721ec2..32020ad 100644
--- a/src/common/na-object-fn.h
+++ b/src/common/na-object-fn.h
@@ -49,9 +49,6 @@ G_BEGIN_DECLS
 
 /* NAIDuplicable
  */
-void      na_object_iduplicable_check_edition_status( const NAObject *object );
-
-gboolean  na_object_iduplicable_is_valid( const NAObject *object );
 NAObject *na_object_iduplicable_get_origin( const NAObject *object );
 void      na_object_iduplicable_set_origin( NAObject *object, const NAObject *origin );
 
diff --git a/src/common/na-object.c b/src/common/na-object.c
index 74c86e6..1332011 100644
--- a/src/common/na-object.c
+++ b/src/common/na-object.c
@@ -42,69 +42,6 @@
 static GList *v_get_childs( const NAObject *object );
 
 /**
- * na_object_iduplicable_check_edition_status:
- * @object: the #NAObject object to be checked.
- *
- * Recursively checks for the edition status of @object and its childs
- * (if any).
- *
- * Internally set some properties which may be requested later. This
- * two-steps check-request let us optimize some work in the UI.
- *
- * na_object_check_edition_status( object )
- *  +- na_iduplicable_check_edition_status( object )
- *      +- get_origin( object )
- *      +- modified_status = v_are_equal( origin, object ) -> interface are_equal()
- *      +- valid_status = v_is_valid( object )             -> interface is_valid()
- *
- * Note that the recursivity is managed here, so that we can be sure
- * that edition status of childs is actually checked.
- */
-void
-na_object_iduplicable_check_edition_status( const NAObject *object )
-{
-	GList *childs, *ic;
-
-#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
-	g_debug( "na_object_iduplicable_check_edition_status: object=%p (%s)",
-			( void * ) object, G_OBJECT_TYPE_NAME( object ));
-#endif
-	g_return_if_fail( NA_IS_OBJECT( object ));
-
-	if( !object->private->dispose_has_run ){
-
-		childs = v_get_childs( object );
-		for( ic = childs ; ic ; ic = ic->next ){
-			na_object_iduplicable_check_edition_status( NA_OBJECT( ic->data ));
-		}
-
-		na_iduplicable_check_edition_status( NA_IDUPLICABLE( object ));
-	}
-}
-
-/**
- * na_object_iduplicable_is_valid:
- * @object: the #NAObject object whose validity is to be checked.
- *
- * Gets the validity status of @object.
- *
- * Returns: %TRUE is @object is valid, %FALSE else.
- */
-gboolean
-na_object_iduplicable_is_valid( const NAObject *object )
-{
-	gboolean is_valid = FALSE;
-
-	g_return_val_if_fail( NA_IS_OBJECT( object ), FALSE );
-
-	if( !object->private->dispose_has_run ){
-		is_valid = na_iduplicable_is_valid( NA_IDUPLICABLE( object ));
-	}
-
-	return( is_valid );
-}
-
-/**
  * na_object_iduplicable_get_origin:
  * @object: the #NAObject object whose status is requested.
  *
diff --git a/src/plugin/nautilus-actions.c b/src/plugin/nautilus-actions.c
index 4a3a896..583bdb4 100644
--- a/src/plugin/nautilus-actions.c
+++ b/src/plugin/nautilus-actions.c
@@ -353,8 +353,9 @@ build_nautilus_menus( NautilusActions *plugin, GList *tree, GList *files )
 
 		g_return_val_if_fail( NA_IS_OBJECT_ITEM( it->data ), NULL );
 
-		if( !na_object_is_enabled( it->data )){
-			continue;
+		if( !na_object_is_enabled( it->data ) ||
+			!na_object_is_valid( it->data )){
+				continue;
 		}
 
 		label = na_object_get_label( it->data );
diff --git a/src/runtime/na-iio-provider.c b/src/runtime/na-iio-provider.c
index 1f1cbb5..9350eaf 100644
--- a/src/runtime/na-iio-provider.c
+++ b/src/runtime/na-iio-provider.c
@@ -156,7 +156,7 @@ na_iio_provider_get_items_tree( const NAPivot *pivot )
 {
 	static const gchar *thisfn = "na_iio_provider_get_items_tree";
 	GList *providers;
-	GList *merged, *hierarchy;
+	GList *merged, *hierarchy, *it;
 	GSList *level_zero;
 	gint order_mode;
 
@@ -209,6 +209,10 @@ na_iio_provider_get_items_tree( const NAPivot *pivot )
 			default:
 				break;
 		}
+
+		for( it = hierarchy ; it ; it = it->next ){
+			na_object_check_edition_status( it->data );
+		}
 	}
 
 	return( hierarchy );
diff --git a/src/runtime/na-object-api.h b/src/runtime/na-object-api.h
index 6944c09..d30e9ae 100644
--- a/src/runtime/na-object-api.h
+++ b/src/runtime/na-object-api.h
@@ -64,9 +64,11 @@ G_BEGIN_DECLS
 
 /* NAIDuplicable
  */
+#define na_object_check_edition_status( object )	na_object_iduplicable_check_edition_status( NA_OBJECT( object ))
 #define na_object_duplicate( object )				na_object_iduplicable_duplicate( NA_OBJECT( object ))
 #define na_object_are_equal( a, b )					na_object_iduplicable_are_equal( NA_OBJECT( a ), NA_OBJECT( b ))
 #define na_object_is_modified( object )				na_object_iduplicable_is_modified( NA_OBJECT( object ))
+#define na_object_is_valid( object )				na_object_iduplicable_is_valid( NA_OBJECT( object ))
 
 /* NAObjectId
  */
diff --git a/src/runtime/na-object-fn.h b/src/runtime/na-object-fn.h
index 51341fc..a96160d 100644
--- a/src/runtime/na-object-fn.h
+++ b/src/runtime/na-object-fn.h
@@ -48,9 +48,11 @@ G_BEGIN_DECLS
 
 /* NAIDuplicable
  */
+void      na_object_iduplicable_check_edition_status( const NAObject *object );
 NAObject *na_object_iduplicable_duplicate( const NAObject *object );
 gboolean  na_object_iduplicable_are_equal( const NAObject *a, const NAObject *b );
 gboolean  na_object_iduplicable_is_modified( const NAObject *object );
+gboolean  na_object_iduplicable_is_valid( const NAObject *object );
 
 /* NAObject
  */
diff --git a/src/runtime/na-object.c b/src/runtime/na-object.c
index 898795e..40195ff 100644
--- a/src/runtime/na-object.c
+++ b/src/runtime/na-object.c
@@ -231,6 +231,47 @@ instance_finalize( GObject *object )
 }
 
 /**
+ * na_object_iduplicable_check_edition_status:
+ * @object: the #NAObject object to be checked.
+ *
+ * Recursively checks for the edition status of @object and its childs
+ * (if any).
+ *
+ * Internally set some properties which may be requested later. This
+ * two-steps check-request let us optimize some work in the UI.
+ *
+ * na_object_check_edition_status( object )
+ *  +- na_iduplicable_check_edition_status( object )
+ *      +- get_origin( object )
+ *      +- modified_status = v_are_equal( origin, object ) -> interface are_equal()
+ *      +- valid_status = v_is_valid( object )             -> interface is_valid()
+ *
+ * Note that the recursivity is managed here, so that we can be sure
+ * that edition status of childs is actually checked.
+ */
+void
+na_object_iduplicable_check_edition_status( const NAObject *object )
+{
+	GList *childs, *ic;
+
+#if NA_IDUPLICABLE_EDITION_STATUS_DEBUG
+	g_debug( "na_object_iduplicable_check_edition_status: object=%p (%s)",
+			( void * ) object, G_OBJECT_TYPE_NAME( object ));
+#endif
+	g_return_if_fail( NA_IS_OBJECT( object ));
+
+	if( !object->private->dispose_has_run ){
+
+		childs = v_get_childs( object );
+		for( ic = childs ; ic ; ic = ic->next ){
+			na_object_iduplicable_check_edition_status( NA_OBJECT( ic->data ));
+		}
+
+		na_iduplicable_check_edition_status( NA_IDUPLICABLE( object ));
+	}
+}
+
+/**
  * na_object_iduplicable_duplicate:
  * @object: the #NAObject object to be dumped.
  *
@@ -338,6 +379,28 @@ na_object_iduplicable_is_modified( const NAObject *object )
 }
 
 /**
+ * na_object_iduplicable_is_valid:
+ * @object: the #NAObject object whose validity is to be checked.
+ *
+ * Gets the validity status of @object.
+ *
+ * Returns: %TRUE is @object is valid, %FALSE else.
+ */
+gboolean
+na_object_iduplicable_is_valid( const NAObject *object )
+{
+	gboolean is_valid = FALSE;
+
+	g_return_val_if_fail( NA_IS_OBJECT( object ), FALSE );
+
+	if( !object->private->dispose_has_run ){
+		is_valid = na_iduplicable_is_valid( NA_IDUPLICABLE( object ));
+	}
+
+	return( is_valid );
+}
+
+/**
  * na_object_object_dump:
  * @object: the #NAObject-derived object to be dumped.
  *



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