rendered paste bodyIndex: 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);