diff -NurpP --minimal nautilus-2.22.3.orig/libnautilus-extension/nautilus-file-info.c nautilus-2.22.3/libnautilus-extension/nautilus-file-info.c --- nautilus-2.22.3.orig/libnautilus-extension/nautilus-file-info.c 2008-04-04 19:04:07.000000000 +0200 +++ nautilus-2.22.3/libnautilus-extension/nautilus-file-info.c 2008-09-16 22:12:26.000000000 +0200 @@ -188,6 +188,18 @@ nautilus_file_info_get_mime_type (Nautil return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mime_type (file); } +void +nautilus_file_info_set_mime_type (NautilusFileInfo *file, + const char *mime_type) +{ + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE); + g_return_val_if_fail (mime_type != NULL, FALSE); + g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->set_mime_type != NULL, FALSE); + + return NAUTILUS_FILE_INFO_GET_IFACE (file)->set_mime_type (file, + mime_type); +} + gboolean nautilus_file_info_is_mime_type (NautilusFileInfo *file, const char *mime_type) diff -NurpP --minimal nautilus-2.22.3.orig/libnautilus-extension/nautilus-file-info.h nautilus-2.22.3/libnautilus-extension/nautilus-file-info.h --- nautilus-2.22.3.orig/libnautilus-extension/nautilus-file-info.h 2008-04-04 19:04:07.000000000 +0200 +++ nautilus-2.22.3/libnautilus-extension/nautilus-file-info.h 2008-09-16 22:13:47.000000000 +0200 @@ -60,8 +60,10 @@ struct _NautilusFileInfoIface char * (*get_uri_scheme) (NautilusFileInfo *file); char * (*get_mime_type) (NautilusFileInfo *file); + void (*set_mime_type) (NautilusFileInfo *file, + const char *mime_type); gboolean (*is_mime_type) (NautilusFileInfo *file, - const char *mime_Type); + const char *mime_type); gboolean (*is_directory) (NautilusFileInfo *file); void (*add_emblem) (NautilusFileInfo *file, @@ -108,6 +110,8 @@ NautilusFileInfo* nautilus_file_info_get /* File Type */ char * nautilus_file_info_get_mime_type (NautilusFileInfo *file); +void nautilus_file_info_set_mime_type (NautilusFileInfo *file, + const char *mime_type); gboolean nautilus_file_info_is_mime_type (NautilusFileInfo *file, const char *mime_type); gboolean nautilus_file_info_is_directory (NautilusFileInfo *file); diff -NurpP --minimal nautilus-2.22.3.orig/libnautilus-private/nautilus-file.c nautilus-2.22.3/libnautilus-private/nautilus-file.c --- nautilus-2.22.3.orig/libnautilus-private/nautilus-file.c 2008-05-22 19:35:12.000000000 +0200 +++ nautilus-2.22.3/libnautilus-private/nautilus-file.c 2008-09-17 00:34:48.000000000 +0200 @@ -5477,6 +5477,26 @@ nautilus_file_get_mime_type (NautilusFil } /** + * nautilus_file_set_mime_type + * + * Set this file's default mime type. + * @file: NautilusFile representing the file in question. + * @mime_type: The MIME-type string to test (e.g. "text/plain") + * + **/ + +void +nautilus_file_set_mime_type (NautilusFile *file, const char *mime_type) +{ + if (file != NULL) { + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + if (file->details->mime_type != NULL) + eel_ref_str_unref (file->details->mime_type); + file->details->mime_type = eel_ref_str_get_unique (mime_type); + } +} + +/** * nautilus_file_is_mime_type * * Check whether a file is of a particular MIME type, or inherited @@ -5910,6 +5930,21 @@ nautilus_file_is_directory (NautilusFile } /** + * nautilus_file_has_directory_mime_type + * + * Check if this file has a nondir mime + * @file: NautilusFile representing the file in question. + * + * Returns: TRUE if @file has a nondir mime + * + **/ +gboolean +nautilus_file_has_directory_mime_type (NautilusFile *file) +{ + return nautilus_file_is_mime_type (file, "inode/directory"); +} + +/** * nautilus_file_is_in_trash * * Check if this file is a file in trash. @@ -7044,6 +7079,7 @@ nautilus_file_info_iface_init (NautilusF iface->get_uri_scheme = nautilus_file_get_uri_scheme; iface->get_activation_uri = nautilus_file_get_activation_uri; iface->get_mime_type = nautilus_file_get_mime_type; + iface->set_mime_type = nautilus_file_set_mime_type; iface->is_mime_type = nautilus_file_is_mime_type; iface->is_directory = nautilus_file_is_directory; iface->can_write = nautilus_file_can_write; diff -NurpP --minimal nautilus-2.22.3.orig/libnautilus-private/nautilus-file.h nautilus-2.22.3/libnautilus-private/nautilus-file.h --- nautilus-2.22.3.orig/libnautilus-private/nautilus-file.h 2008-03-29 10:40:43.000000000 +0100 +++ nautilus-2.22.3/libnautilus-private/nautilus-file.h 2008-09-16 23:07:57.000000000 +0200 @@ -166,6 +166,9 @@ goffset nautilus_file_ge time_t nautilus_file_get_mtime (NautilusFile *file); GFileType nautilus_file_get_file_type (NautilusFile *file); char * nautilus_file_get_mime_type (NautilusFile *file); +void nautilus_file_set_mime_type (NautilusFile *file, + const char *mime_type); +gboolean nautilus_file_has_directory_mime_type (NautilusFile *file); gboolean nautilus_file_is_mime_type (NautilusFile *file, const char *mime_type); gboolean nautilus_file_is_launchable (NautilusFile *file); diff -NurpP --minimal nautilus-2.22.3.orig/libnautilus-private/nautilus-mime-actions.c nautilus-2.22.3/libnautilus-private/nautilus-mime-actions.c --- nautilus-2.22.3.orig/libnautilus-private/nautilus-mime-actions.c 2008-05-13 12:48:26.000000000 +0200 +++ nautilus-2.22.3/libnautilus-private/nautilus-mime-actions.c 2008-09-16 23:42:00.000000000 +0200 @@ -725,7 +725,8 @@ get_default_executable_text_file_action gboolean nautilus_mime_file_opens_in_view (NautilusFile *file) { - return (nautilus_file_is_directory (file) || + return ((nautilus_file_is_directory (file) && + nautilus_file_has_directory_mime_type (file)) || NAUTILUS_IS_DESKTOP_ICON_FILE (file) || nautilus_file_is_nautilus_link (file)); } @@ -1393,6 +1394,7 @@ activate_activation_uris_ready_callback * about the attributes for that, not for the original file. */ uri = nautilus_file_get_activation_uri (file); + g_print ("activation uri: »%s«\n", uri); if (uri != NULL) { NautilusFile *actual_file;