[nautilus-actions] Do not try to build a menu when no info is available



commit 6a6e9a069666b8d1763f277e6fbfbdd9d2675660
Author: Pierre Wieser <pwieser trychlos org>
Date:   Mon Aug 23 21:19:39 2010 +0200

    Do not try to build a menu when no info is available

 ChangeLog                          |    9 +++++++
 src/core/na-selected-info.c        |   13 ++++++++--
 src/plugin-menu/nautilus-actions.c |   45 ++++++++++++++++++++---------------
 3 files changed, 45 insertions(+), 22 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 287237e..3020b21 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2010-08-23 Pierre Wieser <pwieser trychlos org>
 
+	* src/core/na-selected-info.c
+	(na_selected_info_get_list_from_item, na_selected_info_get_list_from_list):
+	Returns a null list when NASelectedInfo object is null.
+
+	* src/plugin-menu/nautilus-actions.c
+	(menu_provider_get_background_items, menu_provider_get_file_items,
+	menu_provider_get_toolbar_items):
+	Do not try to build a menu for Nautilus when NASelectedInfo list is empty.
+
 	* configure.ac: Bump version number after unstable release.
 
 	* NEWS: Update NEWS before unstable release.
diff --git a/src/core/na-selected-info.c b/src/core/na-selected-info.c
index 0a62ea9..001a55d 100644
--- a/src/core/na-selected-info.c
+++ b/src/core/na-selected-info.c
@@ -205,8 +205,12 @@ na_selected_info_get_list_from_item( NautilusFileInfo *item )
 {
 	GList *selected;
 
+	selected = NULL;
 	NASelectedInfo *info = new_from_nautilus_file_info( item );
-	selected = g_list_prepend( NULL, info );
+
+	if( info ){
+		selected = g_list_prepend( NULL, info );
+	}
 
 	return( selected );
 }
@@ -228,10 +232,13 @@ na_selected_info_get_list_from_list( GList *nautilus_selection )
 
 	for( it = nautilus_selection ; it ; it = it->next ){
 		NASelectedInfo *info = new_from_nautilus_file_info( NAUTILUS_FILE_INFO( it->data ));
-		selected = g_list_prepend( selected, info );
+
+		if( info ){
+			selected = g_list_prepend( selected, info );
+		}
 	}
 
-	return( g_list_reverse( selected ));
+	return( selected ? g_list_reverse( selected ) : NULL );
 }
 
 /**
diff --git a/src/plugin-menu/nautilus-actions.c b/src/plugin-menu/nautilus-actions.c
index 722f488..6005633 100644
--- a/src/plugin-menu/nautilus-actions.c
+++ b/src/plugin-menu/nautilus-actions.c
@@ -410,6 +410,10 @@ menu_provider_iface_init( NautilusMenuProviderIface *iface )
  * - either there is zero item selected - current_folder should so be the
  *   folder currently displayed in the file manager view
  * - or when there is only one selected directory
+ *
+ * Note that 'x-nautilus-desktop:///' cannot be interpreted by
+ * #NASelectedInfo::query_file_attributes() function. It so never participate
+ * to the display of actions.
  */
 static GList *
 menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *window, NautilusFileInfo *current_folder )
@@ -423,16 +427,17 @@ menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *w
 
 	if( !NAUTILUS_ACTIONS( provider )->private->dispose_has_run ){
 
-		uri = nautilus_file_info_get_uri( current_folder );
-		g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
-				thisfn, ( void * ) provider, ( void * ) window, ( void * ) current_folder, uri );
-		g_free( uri );
-
 		selected = na_selected_info_get_list_from_item( current_folder );
 
-		nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_LOCATION, selected );
+		if( selected ){
+			uri = nautilus_file_info_get_uri( current_folder );
+			g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
+					thisfn, ( void * ) provider, ( void * ) window, ( void * ) current_folder, uri );
+			g_free( uri );
 
-		na_selected_info_free_list( selected );
+			nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_LOCATION, selected );
+			na_selected_info_free_list( selected );
+		}
 	}
 
 	return( nautilus_menus_list );
@@ -460,14 +465,15 @@ menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window,
 
 	if( !NAUTILUS_ACTIONS( provider )->private->dispose_has_run ){
 
-		g_debug( "%s: provider=%p, window=%p, files=%p, count=%d",
-				thisfn, ( void * ) provider, ( void * ) window, ( void * ) files, g_list_length( files ));
-
 		selected = na_selected_info_get_list_from_list(( GList * ) files );
 
-		nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_SELECTION, selected );
+		if( selected ){
+			g_debug( "%s: provider=%p, window=%p, files=%p, count=%d",
+					thisfn, ( void * ) provider, ( void * ) window, ( void * ) files, g_list_length( files ));
 
-		na_selected_info_free_list( selected );
+			nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_SELECTION, selected );
+			na_selected_info_free_list( selected );
+		}
 	}
 
 	return( nautilus_menus_list );
@@ -490,16 +496,17 @@ menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *wind
 
 	if( !NAUTILUS_ACTIONS( provider )->private->dispose_has_run ){
 
-		uri = nautilus_file_info_get_uri( current_folder );
-		g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
-				thisfn, ( void * ) provider, ( void * ) window, ( void * ) current_folder, uri );
-		g_free( uri );
-
 		selected = na_selected_info_get_list_from_item( current_folder );
 
-		nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_TOOLBAR, selected );
+		if( selected ){
+			uri = nautilus_file_info_get_uri( current_folder );
+			g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
+					thisfn, ( void * ) provider, ( void * ) window, ( void * ) current_folder, uri );
+			g_free( uri );
 
-		na_selected_info_free_list( selected );
+			nautilus_menus_list = get_menus_items( NAUTILUS_ACTIONS( provider ), ITEM_TARGET_TOOLBAR, selected );
+			na_selected_info_free_list( selected );
+		}
 	}
 
 	return( nautilus_menus_list );



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