Index: gedit/gedit-document-loader.c =================================================================== --- gedit/gedit-document-loader.c (revision 5509) +++ gedit/gedit-document-loader.c (working copy) @@ -87,6 +87,7 @@ gchar *buffer; + const GeditEncoding *metadata_encoding; const GeditEncoding *auto_detected_encoding; GError *error; @@ -249,6 +250,24 @@ return dl; } +static const GeditEncoding * +get_metadata_encoding (const gchar *uri) +{ + const GeditEncoding *enc; + gchar *charset; + + charset = gedit_metadata_manager_get (uri, "encoding"); + + if (charset == NULL) + return NULL; + + enc = gedit_encoding_get_from_charset (charset); + + g_free (charset); + + return enc; +} + static void insert_text_in_document (GeditDocumentLoader *loader, const gchar *text, @@ -316,29 +335,17 @@ /* Autodetecting the encoding: first try with the encoding stored in the metadata, if any */ - const GeditEncoding *enc; - gchar *charset; - - charset = gedit_metadata_manager_get (loader->priv->uri, "encoding"); - - if (charset != NULL) + if (loader->priv->metadata_encoding != NULL) { - enc = gedit_encoding_get_from_charset (charset); + converted_text = gedit_convert_to_utf8 ( + file_contents, + file_size, + &loader->priv->metadata_encoding, + &new_len, + NULL); - if (enc != NULL) - { - converted_text = gedit_convert_to_utf8 ( - file_contents, - file_size, - &enc, - &new_len, - NULL); - - if (converted_text != NULL) - loader->priv->auto_detected_encoding = enc; - } - - g_free (charset); + if (converted_text != NULL) + loader->priv->auto_detected_encoding = loader->priv->metadata_encoding; } } @@ -566,7 +573,7 @@ MAP_PRIVATE, /* flags */ loader->priv->fd, 0 /* offset */); - + if (mapped_file == MAP_FAILED) { gedit_debug_message (DEBUG_LOADER, "mmap failed"); @@ -970,6 +977,11 @@ loader->priv->encoding = encoding; + if (encoding == NULL) + { + loader->priv->metadata_encoding = get_metadata_encoding (uri); + } + loader->priv->uri = g_strdup (uri); local_path = gnome_vfs_get_local_path_from_uri (uri);