Index: libnautilus-private/nautilus-open-with-dialog.c
===================================================================
--- libnautilus-private/nautilus-open-with-dialog.c	(revisione 13758)
+++ libnautilus-private/nautilus-open-with-dialog.c	(copia locale)
@@ -890,17 +890,20 @@ set_uri_and_type (NautilusOpenWithDialog
 		  const char *mime_type)
 {
 	char *label;
-	char *name;
 	char *emname;
-	GFile *file;
-	char *extension;
+	char *name = NULL;
+	char *extension = NULL;
 	const char *description;
-		
-	file = g_file_new_for_uri (uri);
-	name = g_file_get_basename (file);
-	g_object_unref (file);
 	
-	extension = get_extension (name);
+	if (uri != NULL) {
+		GFile *file;
+
+		file = g_file_new_for_uri (uri);
+		name = g_file_get_basename (file);
+		g_object_unref (file);
+		extension = get_extension (name);
+	}
+
 	if (extension != NULL &&
 	    g_content_type_is_unknown (mime_type)) {
 		dialog->details->extension = g_strdup (extension);
@@ -919,9 +922,14 @@ set_uri_and_type (NautilusOpenWithDialog
 	}
 	g_free (extension);
 
-	emname = g_strdup_printf ("<i>%s</i>", name);
-	label = g_strdup_printf (_("Open %s and other files of type \"%s\" with:"), emname, dialog->details->type_description);
-	g_free (emname);
+	if (name != NULL) {
+		emname = g_strdup_printf ("<i>%s</i>", name);
+		label = g_strdup_printf (_("Open %s and other files of type \"%s\" with:"), emname, dialog->details->type_description);
+		g_free (emname);
+	} else {
+		label = g_strdup_printf (_("Open all files of type \"%s\" with:"),
+					 dialog->details->type_description);
+	}
 
 	gtk_label_set_markup (GTK_LABEL (dialog->details->label), label);
 
Index: libnautilus-private/nautilus-mime-application-chooser.c
===================================================================
--- libnautilus-private/nautilus-mime-application-chooser.c	(revisione 13758)
+++ libnautilus-private/nautilus-mime-application-chooser.c	(copia locale)
@@ -590,20 +590,24 @@ set_uri_and_type (NautilusMimeApplicatio
 		  const char *mime_type)
 {
 	char *label;
-	char *name;
 	char *emname;
-	char *extension;
-	GFile *file;
-
-	chooser->details->uri = g_strdup (uri);
+	char *name = NULL;
+	char *extension = NULL;
+	
+	chooser->details->orig_mime_type = g_strdup (mime_type);
 
-	file = g_file_new_for_uri (uri);
-	name = g_file_get_basename (file);
-	g_object_unref (file);
+	if (uri != NULL) {
+		GFile *file;
+		chooser->details->uri = g_strdup (uri);
+		
+		file = g_file_new_for_uri (uri);
+		name = g_file_get_basename (file);
+		g_object_unref (file);
+		extension = get_extension (name);
+	} else {
+		chooser->details->uri = NULL;
+	}
 
-	chooser->details->orig_mime_type = g_strdup (mime_type);
-	
-	extension = get_extension (name);
 	if (extension != NULL &&
 	    g_content_type_is_unknown (mime_type)) {
 		chooser->details->extension = g_strdup (extension);
@@ -625,11 +629,16 @@ set_uri_and_type (NautilusMimeApplicatio
 	}
 	g_free (extension);
 
-	/* first %s is filename, second %s is mime-type description */
-	emname = g_strdup_printf ("<i>%s</i>", name);
-	label = g_strdup_printf (_("Select an application to open %s and other files of type \"%s\""),
-				 emname, chooser->details->type_description);
-	g_free (emname);
+	if (name != NULL) {
+		/* first %s is filename, second %s is mime-type description */
+		emname = g_strdup_printf ("<i>%s</i>", name);
+		label = g_strdup_printf (_("Select an application to open %s and other files of type \"%s\""),
+					 emname, chooser->details->type_description);
+		g_free (emname);
+	} else {
+		label = g_strdup_printf (_("Select an application to open all the files of type \"%s\""),
+					 chooser->details->type_description);
+	}
 	
 	gtk_label_set_markup (GTK_LABEL (chooser->details->label), label);
 
Index: src/file-manager/fm-properties-window.c
===================================================================
--- src/file-manager/fm-properties-window.c	(revisione 13758)
+++ src/file-manager/fm-properties-window.c	(copia locale)
@@ -286,7 +286,7 @@ is_multi_file_window (FMPropertiesWindow
 	count = 0;
 	
 	for (l = window->details->original_files; l != NULL; l = l->next) {
-		if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data))) {
+		if (!nautilus_file_is_gone (NAUTILUS_FILE (l->data))) {			
 			count++;
 			if (count > 1) {
 				return TRUE;
@@ -4704,22 +4704,43 @@ file_changed_callback (NautilusFile *fil
 }
 
 static gboolean
+is_a_special_file (NautilusFile *file)
+{
+	if (file == NULL ||
+	    NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
+	    nautilus_file_is_nautilus_link (file)) {
+		return TRUE;
+	}
+	return FALSE;
+}
+
+static gboolean
 should_show_open_with (FMPropertiesWindow *window)
 {
 	NautilusFile *file;
 	
 	if (is_multi_file_window (window)) {
-		return FALSE;
-	}
-
-	/* Don't show open with tab for desktop special icons (trash, etc)
-	 * or desktop files. We don't get the open-with menu for these anyway.
-	 */
-	file = get_original_file (window);
-	if (file == NULL ||
-	    NAUTILUS_IS_DESKTOP_ICON_FILE (file) ||
-	    nautilus_file_is_nautilus_link (file)) {
-		return FALSE;
+		if (!file_list_attributes_identical (window->details->original_files,
+						     "mime_type")) {
+			return FALSE;
+		} else {
+			/* Don't show open with tab for desktop special icons (trash, etc)
+			* or desktop files. We don't get the open-with menu for these anyway.
+			*/
+			
+			GList *l;
+			
+			for (l = window->details->original_files; l; l = l->next) {
+				if (is_a_special_file (NAUTILUS_FILE (l->data))) {
+					return FALSE;
+				}
+			}
+		}		
+	} else {
+		file = get_original_file (window);
+		if (is_a_special_file (file)) {
+			return FALSE;
+		}
 	}
 	return TRUE;
 }
@@ -4728,20 +4749,21 @@ static void
 create_open_with_page (FMPropertiesWindow *window)
 {
 	GtkWidget *vbox;
-	char *uri;
+	char *uri = NULL;
 	char *mime_type;
-	
-	uri = nautilus_file_get_uri (get_target_file (window));
 
-	if (uri == NULL) {
-		return;
+	if (!is_multi_file_window (window)) {
+		uri = nautilus_file_get_uri (get_target_file (window));
+		if (uri == NULL) {
+			return;
+		}
 	}
-	
+
 	mime_type = nautilus_file_get_mime_type (get_target_file (window));
-	
+
 	vbox = nautilus_mime_application_chooser_new (uri, mime_type);
 	gtk_widget_show (vbox);
-	
+
 	g_free (uri);
 	g_free (mime_type);
 
