[gitg] Take advantage of gtk_source_language_manager_guess_language



commit a0f147d9131b1a76ff834ea38601200b6f16267a
Author: Paolo Borelli <porelli gnome org>
Date:   Sun Aug 2 13:11:35 2009 +0200

    Take advantage of gtk_source_language_manager_guess_language

 gitg/gitg-commit-view.c        |   18 ++++++++++++------
 gitg/gitg-revision-tree-view.c |   16 ++++++++++------
 gitg/gitg-utils.c              |   38 +++-----------------------------------
 gitg/gitg-utils.h              |    2 +-
 4 files changed, 26 insertions(+), 48 deletions(-)
---
diff --git a/gitg/gitg-commit-view.c b/gitg/gitg-commit-view.c
index 0ee44c3..301be06 100644
--- a/gitg/gitg-commit-view.c
+++ b/gitg/gitg-commit-view.c
@@ -231,8 +231,6 @@ on_changes_update(GitgRunner *runner, gchar **buffer, GitgCommitView *view)
 		gtk_text_buffer_insert(buf, &iter, "\n", -1);
 	}
 	
-	gitg_utils_guess_content_type(GTK_TEXT_BUFFER(buf));
-	
 	if (gtk_source_buffer_get_language(GTK_SOURCE_BUFFER(buf)) == NULL)
 	{
 		gchar *content_type = gitg_utils_guess_content_type(GTK_TEXT_BUFFER(buf));
@@ -244,7 +242,7 @@ on_changes_update(GitgRunner *runner, gchar **buffer, GitgCommitView *view)
 		}
 		else if (content_type)
 		{
-			GtkSourceLanguage *language = gitg_utils_get_language(content_type);
+			GtkSourceLanguage *language = gitg_utils_get_language(NULL, content_type);
 			set_language(view, language);
 			gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hscale_context), FALSE);
 		}
@@ -434,7 +432,10 @@ unstaged_selection_changed(GtkTreeSelection *selection, GitgCommitView *view)
 			}
 			else
 			{
-				GtkSourceLanguage *language = gitg_utils_get_language(content_type);
+				gchar *basename = g_file_get_basename(f);
+				GtkSourceLanguage *language = gitg_utils_get_language(basename, content_type);
+				g_free(basename);
+
 				set_language(view, language);
 				gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hscale_context), FALSE);
 				
@@ -445,6 +446,8 @@ unstaged_selection_changed(GtkTreeSelection *selection, GitgCommitView *view)
 				g_object_unref(stream);
 			}
 		}
+
+		g_free(content_type);
 	}
 	else
 	{
@@ -486,7 +489,6 @@ staged_selection_changed(GtkTreeSelection *selection, GitgCommitView *view)
 	
 	GFile *f = gitg_changed_file_get_file(file);
 	gchar *path = gitg_repository_relative(view->priv->repository, f);
-	g_object_unref(f);
 	
 	if (status == GITG_CHANGED_FILE_STATUS_NEW)
 	{
@@ -500,7 +502,10 @@ staged_selection_changed(GtkTreeSelection *selection, GitgCommitView *view)
 		}
 		else
 		{
-			set_language(view, gitg_utils_get_language(content_type));
+			gchar *basename = g_file_get_basename(f);
+			GtkSourceLanguage *language = gitg_utils_get_language(basename, content_type);
+			g_free(basename);
+
 			gtk_widget_set_sensitive(GTK_WIDGET(view->priv->hscale_context), FALSE);
 
 			connect_update(view);
@@ -526,6 +531,7 @@ staged_selection_changed(GtkTreeSelection *selection, GitgCommitView *view)
 		g_free(head);
 	}
 
+	g_object_unref(f);
 	g_free(path);	
 
 	set_current_file(view, file, GITG_CHANGED_FILE_CHANGES_CACHED);	
diff --git a/gitg/gitg-revision-tree-view.c b/gitg/gitg-revision-tree-view.c
index 30d4fd1..c37ce44 100644
--- a/gitg/gitg-revision-tree-view.c
+++ b/gitg/gitg-revision-tree-view.c
@@ -208,12 +208,15 @@ on_selection_changed(GtkTreeSelection *selection, GitgRevisionTreeView *tree)
 	
 	if (!path)
 		return;
-	
+
+	gchar *name;
 	gchar *content_type;
 	gtk_tree_model_get_iter(model, &iter, path);
 	gtk_tree_path_free(path);
-	gtk_tree_model_get(model, &iter, GITG_REVISION_TREE_STORE_CONTENT_TYPE_COLUMN, &content_type, -1);
-	
+	gtk_tree_model_get(model, &iter,
+			   GITG_REVISION_TREE_STORE_NAME_COLUMN, &name,
+			   GITG_REVISION_TREE_STORE_CONTENT_TYPE_COLUMN, &content_type, -1);
+
 	if (!content_type)
 		return;
 	
@@ -223,7 +226,7 @@ on_selection_changed(GtkTreeSelection *selection, GitgRevisionTreeView *tree)
 	}
 	else
 	{
-		GtkSourceLanguage *language = gitg_utils_get_language(content_type);
+		GtkSourceLanguage *language = gitg_utils_get_language(name, content_type);
 		gtk_source_buffer_set_language(GTK_SOURCE_BUFFER(buffer), language);
 		
 		gchar *id = node_identity(tree, &iter);
@@ -231,7 +234,8 @@ on_selection_changed(GtkTreeSelection *selection, GitgRevisionTreeView *tree)
 		
 		g_free(id);
 	}
-	
+
+	g_free(name);
 	g_free(content_type);
 }
 
@@ -634,7 +638,7 @@ on_contents_update(GitgRunner *runner, gchar **buffer, GitgRevisionTreeView *tre
 		}
 		else
 		{
-			GtkSourceLanguage *language = gitg_utils_get_language(content_type);
+			GtkSourceLanguage *language = gitg_utils_get_language(NULL, content_type);
 			gtk_source_buffer_set_language(GTK_SOURCE_BUFFER(buf), language);
 		}
 		
diff --git a/gitg/gitg-utils.c b/gitg/gitg-utils.c
index 59e0e70..8341e15 100644
--- a/gitg/gitg-utils.c
+++ b/gitg/gitg-utils.c
@@ -286,45 +286,13 @@ gitg_utils_can_display_content_type(gchar const *content_type)
 }
 
 GtkSourceLanguage *
-gitg_utils_get_language(gchar const *content_type)
+gitg_utils_get_language(gchar const *filename, gchar const *content_type)
 {
 	if (!gitg_utils_can_display_content_type(content_type))
 		return NULL;
-	
-	gchar *mime = g_content_type_get_mime_type(content_type);
-	GtkSourceLanguageManager *manager = gtk_source_language_manager_get_default();
-	
-	gchar const * const *ids = gtk_source_language_manager_get_language_ids(manager);
-	gchar const *ptr;
-	GtkSourceLanguage *ret;
-	
-	while ((ptr = *ids++))
-	{
-		ret = gtk_source_language_manager_get_language(manager, ptr);
-		gchar **mime_types = gtk_source_language_get_mime_types(ret);
-		gchar **types = mime_types;
-		gchar *m;
-		
-		if (types)
-		{
-			while ((m = *types++))
-			{
-				if (strcmp(mime, m) == 0)
-				{
-					g_free(mime);
-					g_strfreev(mime_types);
-					return ret;
-				}
-			}
-		
-			g_strfreev(mime_types);
-		}
 
-		ret = NULL;
-	}
-	
-	g_free(mime);
-	return NULL;
+	GtkSourceLanguageManager *manager = gtk_source_language_manager_get_default();
+	return gtk_source_language_manager_guess_language(manager, filename, content_type);
 }
 
 gint 
diff --git a/gitg/gitg-utils.h b/gitg/gitg-utils.h
index 1dd2ad8..4cb2d16 100644
--- a/gitg/gitg-utils.h
+++ b/gitg/gitg-utils.h
@@ -49,7 +49,7 @@ gboolean gitg_utils_hash_equal(gconstpointer a, gconstpointer b);
 gint gitg_utils_null_length(gconstpointer *ptr);
 
 gchar *gitg_utils_get_content_type(GFile *file);
-GtkSourceLanguage *gitg_utils_get_language(gchar const *content_type);
+GtkSourceLanguage *gitg_utils_get_language(gchar const *filename, gchar const *content_type);
 gboolean gitg_utils_can_display_content_type(gchar const *content_type);
 gchar *gitg_utils_guess_content_type(GtkTextBuffer *buffer);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]