All pastes #758038 Raw Edit

Anonym

public text v1 · immutable
·published 2007-11-01 21:06 UTC
rendered paste body
Index: src/gnome-genius.c
===================================================================
--- src/gnome-genius.c  (Revision 587)
+++ src/gnome-genius.c  (Arbeitskopie)
@@ -53,9 +53,13 @@
 #ifdef HAVE_GTKSOURCEVIEW
 #include <gtksourceview/gtksourceview.h>
 #include <gtksourceview/gtksourcelanguage.h>
+#ifdef HAVE_GTKSOURCEVIEW2
+#include <gtksourceview/gtksourcelanguagemanager.h>
+#else
 #include <gtksourceview/gtksourcelanguagesmanager.h>
 #include <gtksourceview/gtksourceprintjob.h>
 #endif
+#endif
 
 #include <libgnomevfs/gnome-vfs-uri.h>
 #include <libgnomevfs/gnome-vfs-ops.h>
@@ -2337,6 +2341,38 @@
        g_free (s);
 }
 
+#ifdef HAVE_GTKSOURCEVIEW
+#ifdef HAVE_GTKSOURCEVIEW2
+static GtkSourceLanguageManager*
+get_source_language_manager ()
+{
+       static GtkSourceLanguageManager *lm = NULL;
+       gchar **lang_dirs;
+       const gchar * const *default_lang_dirs;
+       gint nlang_dirs, i;
+
+       if (lm == NULL) {
+               lm = gtk_source_language_manager_new ();
+
+               nlang_dirs = 0;
+               default_lang_dirs = gtk_source_language_manager_get_search_path (gtk_source_language_manager_get_default ());
+               for (nlang_dirs = 0; default_lang_dirs[nlang_dirs] != NULL; nlang_dirs++);
+
+               lang_dirs = g_new0 (gchar *, nlang_dirs + 2);
+               for (i = 0; i < nlang_dirs; i++) {
+                 lang_dirs[i] = (gchar *) default_lang_dirs[i];
+               }
+               lang_dirs[nlang_dirs] = DATADIR "/genius/gtksourceview/";
+
+               gtk_source_language_manager_set_search_path (lm, lang_dirs);
+       }
+
+       return lm;
+}
+#endif
+#endif
+
+
 static void
 new_program (const char *filename)
 {
@@ -2346,20 +2382,44 @@
        GtkTextBuffer *buffer;
        Program *p;
 #ifdef HAVE_GTKSOURCEVIEW
+#ifdef HAVE_GTKSOURCEVIEW2
        GtkSourceLanguage *lang;
+       GtkSourceLanguageManager *lm;
+#else
+       GtkSourceLanguage *lang;
        GtkSourceLanguagesManager *lm;
        GList lang_dirs;
 #endif
+#endif
 
        sw = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
                                        GTK_POLICY_AUTOMATIC,
                                        GTK_POLICY_AUTOMATIC);
 #ifdef HAVE_GTKSOURCEVIEW
+#ifdef HAVE_GTKSOURCEVIEW2
        tv = gtk_source_view_new ();
        gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW (tv), TRUE);
        gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW (tv), TRUE);
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
+       lm = get_source_language_manager ();
+
+       lang = gtk_source_language_manager_get_language (lm, "genius");
+       if (lang != NULL) {
+               gtk_source_buffer_set_highlight_syntax (GTK_SOURCE_BUFFER (buffer), TRUE);
+               gtk_source_buffer_set_language
+                       (GTK_SOURCE_BUFFER (buffer), lang);
+       }
+
+       g_signal_connect (G_OBJECT (buffer), "notify::can-undo",
+                         G_CALLBACK (setup_undo_redo), NULL);
+       g_signal_connect (G_OBJECT (buffer), "notify::can-redo",
+                         G_CALLBACK (setup_undo_redo), NULL);
+#else
+       tv = gtk_source_view_new ();
+       gtk_source_view_set_show_line_numbers (GTK_SOURCE_VIEW (tv), TRUE);
+       gtk_source_view_set_auto_indent (GTK_SOURCE_VIEW (tv), TRUE);
+       buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
        lang_dirs.data = DATADIR "/genius/gtksourceview/";
        lang_dirs.prev = NULL;
        lang_dirs.next = NULL;
@@ -2375,10 +2435,12 @@
                gtk_source_buffer_set_language
                        (GTK_SOURCE_BUFFER (buffer), lang);
        }
+
        g_signal_connect (G_OBJECT (buffer), "can-undo",
                          G_CALLBACK (setup_undo_redo), NULL);
        g_signal_connect (G_OBJECT (buffer), "can-redo",
                          G_CALLBACK (setup_undo_redo), NULL);
+#endif
 #else
        tv = gtk_text_view_new ();
        buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (tv));
@@ -2402,13 +2464,6 @@
        p->ignore_changes = 0;
        g_object_set_data (G_OBJECT (sw), "program", p);
 
-#ifdef HAVE_GTKSOURCEVIEW
-       g_signal_connect (G_OBJECT (buffer), "can-undo",
-                         G_CALLBACK (setup_undo_redo), NULL);
-       g_signal_connect (G_OBJECT (buffer), "can-redo",
-                         G_CALLBACK (setup_undo_redo), NULL);
-#endif
-
        g_signal_connect_after (G_OBJECT (p->buffer), "mark_set",
                                G_CALLBACK (move_cursor),
                                p);