[gedit] Listen into content-type property.
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gedit] Listen into content-type property.
- Date: Mon, 23 Nov 2009 12:27:11 +0000 (UTC)
commit ac74d0e326887818ad0a4f3ad4835383c078c8c8
Author: Ignacio Casal Quinteiro <icq gnome org>
Date: Mon Nov 23 13:24:08 2009 +0100
Listen into content-type property.
Now to set the language we listen to the content-type property instead
of setting the language directly on set_content_type.
gedit/gedit-document.c | 127 ++++++++++++++++++++++++++----------------------
1 files changed, 69 insertions(+), 58 deletions(-)
---
diff --git a/gedit/gedit-document.c b/gedit/gedit-document.c
index 5558564..8507f97 100644
--- a/gedit/gedit-document.c
+++ b/gedit/gedit-document.c
@@ -689,6 +689,69 @@ get_default_style_scheme (void)
return def_style;
}
+static GtkSourceLanguage *
+guess_language (const gchar *uri,
+ const gchar *content_type)
+
+{
+ gchar *data;
+ GtkSourceLanguage *language = NULL;
+
+ data = gedit_metadata_manager_get (uri, "language");
+
+ if (data != NULL)
+ {
+ gedit_debug_message (DEBUG_DOCUMENT, "Language from metadata: %s", data);
+
+ if (strcmp (data, "_NORMAL_") != 0)
+ {
+ language = gtk_source_language_manager_get_language (
+ gedit_get_language_manager (),
+ data);
+ }
+
+ g_free (data);
+ }
+ else
+ {
+ GFile *file;
+ gchar *basename;
+
+ gedit_debug_message (DEBUG_DOCUMENT, "Sniffing Language");
+
+ file = g_file_new_for_uri (uri);
+ basename = g_file_get_basename (file);
+
+ language = gtk_source_language_manager_guess_language (
+ gedit_get_language_manager (),
+ basename,
+ content_type);
+
+ g_free (basename);
+ g_object_unref (file);
+ }
+
+ return language;
+}
+
+static void
+on_content_type_changed (GeditDocument *doc,
+ GParamSpec *pspec,
+ gpointer useless)
+{
+ if (!doc->priv->language_set_by_user)
+ {
+ GtkSourceLanguage *language;
+
+ language = guess_language (doc->priv->uri, doc->priv->content_type);
+
+ gedit_debug_message (DEBUG_DOCUMENT, "Language: %s",
+ language != NULL ? gtk_source_language_get_name (language) : "None");
+
+ set_language (doc, language, FALSE);
+ }
+}
+
static void
gedit_document_init (GeditDocument *doc)
{
@@ -740,7 +803,12 @@ gedit_document_init (GeditDocument *doc)
g_signal_connect_after (doc,
"delete-range",
G_CALLBACK (delete_range_cb),
- NULL);
+ NULL);
+
+ g_signal_connect (doc,
+ "notify::content-type",
+ G_CALLBACK (on_content_type_changed),
+ NULL);
}
GeditDocument *
@@ -751,51 +819,6 @@ gedit_document_new (void)
return GEDIT_DOCUMENT (g_object_new (GEDIT_TYPE_DOCUMENT, NULL));
}
-static GtkSourceLanguage *
-guess_language (const gchar *uri,
- const gchar *content_type)
-
-{
- gchar *data;
- GtkSourceLanguage *language = NULL;
-
- data = gedit_metadata_manager_get (uri, "language");
-
- if (data != NULL)
- {
- gedit_debug_message (DEBUG_DOCUMENT, "Language from metadata: %s", data);
-
- if (strcmp (data, "_NORMAL_") != 0)
- {
- language = gtk_source_language_manager_get_language (
- gedit_get_language_manager (),
- data);
- }
-
- g_free (data);
- }
- else
- {
- GFile *file;
- gchar *basename;
-
- gedit_debug_message (DEBUG_DOCUMENT, "Sniffing Language");
-
- file = g_file_new_for_uri (uri);
- basename = g_file_get_basename (file);
-
- language = gtk_source_language_manager_guess_language (
- gedit_get_language_manager (),
- basename,
- content_type);
-
- g_free (basename);
- g_object_unref (file);
- }
-
- return language;
-}
-
/* If content type is null, we guess from the filename */
/* If uri is null, we only set the content-type */
static void
@@ -822,18 +845,6 @@ set_content_type (GeditDocument *doc,
}
}
- if (!doc->priv->language_set_by_user)
- {
- GtkSourceLanguage *language;
-
- language = guess_language (doc->priv->uri, doc->priv->content_type);
-
- gedit_debug_message (DEBUG_DOCUMENT, "Language: %s",
- language != NULL ? gtk_source_language_get_name (language) : "None");
-
- set_language (doc, language, FALSE);
- }
-
g_object_notify (G_OBJECT (doc), "content-type");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]