[gnome-builder] modelines: change parser to support IdeFileSettings



commit 5f1bc0da9c2ede6f4378874e336b794d64e908f0
Author: Christian Hergert <christian hergert me>
Date:   Wed May 6 16:18:32 2015 -0700

    modelines: change parser to support IdeFileSettings
    
    Also, remove the use of GtkSourceView. We don't need access to it
    anymore (plus it complicates things greatly).

 libide/modelines/modeline-parser.c |  132 ++++++------------------------------
 libide/modelines/modeline-parser.h |    9 ++-
 2 files changed, 26 insertions(+), 115 deletions(-)
---
diff --git a/libide/modelines/modeline-parser.c b/libide/modelines/modeline-parser.c
index db8e2e1..8b074bf 100644
--- a/libide/modelines/modeline-parser.c
+++ b/libide/modelines/modeline-parser.c
@@ -606,62 +606,6 @@ parse_modeline (gchar           *s,
        }
 }
 
-static gboolean
-check_previous (GtkSourceView   *view,
-                ModelineOptions *previous,
-                ModelineSet      set)
-{
-       GtkSourceBuffer *buffer = GTK_SOURCE_BUFFER (gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)));
-
-       /* Do not restore default when this is the first time */
-       if (!previous)
-               return FALSE;
-
-       /* Do not restore default when previous was not set */
-       if (!(previous->set & set))
-               return FALSE;
-
-       /* Only restore default when setting has not changed */
-       switch (set)
-       {
-               case MODELINE_SET_INSERT_SPACES:
-                       return gtk_source_view_get_insert_spaces_instead_of_tabs (view) ==
-                              previous->insert_spaces;
-               break;
-               case MODELINE_SET_TAB_WIDTH:
-                       return gtk_source_view_get_tab_width (view) == previous->tab_width;
-               break;
-               case MODELINE_SET_INDENT_WIDTH:
-                       return gtk_source_view_get_indent_width (view) == previous->indent_width;
-               break;
-               case MODELINE_SET_WRAP_MODE:
-                       return gtk_text_view_get_wrap_mode (GTK_TEXT_VIEW (view)) ==
-                              previous->wrap_mode;
-               break;
-               case MODELINE_SET_RIGHT_MARGIN_POSITION:
-                       return gtk_source_view_get_right_margin_position (view) ==
-                              previous->right_margin_position;
-               break;
-               case MODELINE_SET_SHOW_RIGHT_MARGIN:
-                       return gtk_source_view_get_show_right_margin (view) ==
-                              previous->display_right_margin;
-               break;
-               case MODELINE_SET_LANGUAGE:
-               {
-                       GtkSourceLanguage *language = gtk_source_buffer_get_language (buffer);
-
-                       return (language == NULL && previous->language_id == NULL) ||
-                              (language != NULL && g_strcmp0 (gtk_source_language_get_id (language),
-                                                              previous->language_id) == 0);
-               }
-               break;
-                case MODELINE_SET_NONE:
-               default:
-                       return FALSE;
-               break;
-       }
-}
-
 static void
 free_modeline_options (ModelineOptions *options)
 {
@@ -670,21 +614,17 @@ free_modeline_options (ModelineOptions *options)
 }
 
 void
-modeline_parser_apply_modeline (GtkSourceView *view)
+modeline_parser_apply_modeline (GtkTextBuffer   *buffer,
+                                IdeFileSettings *file_settings)
 {
        ModelineOptions options;
-       GtkTextBuffer *buffer;
        GtkTextIter iter, liter;
        gint line_count;
-#if 0
-       GSettings *settings;
-#endif
        ModelineOptions *previous;
 
        options.language_id = NULL;
        options.set = MODELINE_SET_NONE;
 
-       buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
        gtk_text_buffer_get_start_iter (buffer, &iter);
 
        line_count = gtk_text_buffer_get_line_count (buffer);
@@ -778,96 +718,67 @@ modeline_parser_apply_modeline (GtkSourceView *view)
        previous = g_object_get_data (G_OBJECT (buffer),
                                      MODELINE_OPTIONS_DATA_KEY);
 
-#if 0
-       settings = g_settings_new ("org.gnome.gedit.preferences.editor");
-#endif
-
        /* Apply the options we got from modelines and restore defaults if
           we set them before */
        if (has_option (&options, MODELINE_SET_INSERT_SPACES))
        {
-               gtk_source_view_set_insert_spaces_instead_of_tabs
-                                                       (view, options.insert_spaces);
+               ide_file_settings_set_indent_style (file_settings, IDE_INDENT_STYLE_SPACES);
        }
-       else if (check_previous (view, previous, MODELINE_SET_INSERT_SPACES))
+        else
        {
-#if 0
-               gboolean insert_spaces;
-
-               insert_spaces = g_settings_get_boolean (settings, GEDIT_SETTINGS_INSERT_SPACES);
-
-               gtk_source_view_set_insert_spaces_instead_of_tabs (view, insert_spaces);
-#endif
+               ide_file_settings_set_indent_style_set (file_settings, FALSE);
        }
 
        if (has_option (&options, MODELINE_SET_TAB_WIDTH))
        {
-               gtk_source_view_set_tab_width (view, options.tab_width);
+               ide_file_settings_set_tab_width (file_settings, options.tab_width);
        }
-       else if (check_previous (view, previous, MODELINE_SET_TAB_WIDTH))
+        else
        {
-#if 0
-               guint tab_width;
-
-               g_settings_get (settings, GEDIT_SETTINGS_TABS_SIZE, "u", &tab_width);
-
-               gtk_source_view_set_tab_width (view, tab_width);
-#endif
+               ide_file_settings_set_tab_width_set (file_settings, FALSE);
        }
 
        if (has_option (&options, MODELINE_SET_INDENT_WIDTH))
        {
-               gtk_source_view_set_indent_width (view, options.indent_width);
+               ide_file_settings_set_indent_width (file_settings, options.indent_width);
        }
-       else if (check_previous (view, previous, MODELINE_SET_INDENT_WIDTH))
+        else
        {
-               gtk_source_view_set_indent_width (view, -1);
+               ide_file_settings_set_indent_width_set (file_settings, FALSE);
        }
 
+       /* XXX: no wrap mode support in IdeFileSettings yet */
+#if 0
        if (has_option (&options, MODELINE_SET_WRAP_MODE))
        {
                gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), options.wrap_mode);
        }
        else if (check_previous (view, previous, MODELINE_SET_WRAP_MODE))
        {
-#if 0
                GtkWrapMode mode;
 
                mode = g_settings_get_enum (settings,
                                            GEDIT_SETTINGS_WRAP_MODE);
                gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), mode);
-#endif
        }
+#endif
 
        if (has_option (&options, MODELINE_SET_RIGHT_MARGIN_POSITION))
        {
-               gtk_source_view_set_right_margin_position (view, options.right_margin_position);
+               ide_file_settings_set_right_margin_position (file_settings, options.right_margin_position);
        }
-       else if (check_previous (view, previous, MODELINE_SET_RIGHT_MARGIN_POSITION))
+        else
        {
-#if 0
-               guint right_margin_pos;
-
-               g_settings_get (settings, GEDIT_SETTINGS_RIGHT_MARGIN_POSITION, "u",
-                               &right_margin_pos);
-               gtk_source_view_set_right_margin_position (view,
-                                                          right_margin_pos);
-#endif
+               ide_file_settings_set_right_margin_position_set (file_settings, FALSE);
        }
 
        if (has_option (&options, MODELINE_SET_SHOW_RIGHT_MARGIN))
        {
-               gtk_source_view_set_show_right_margin (view, options.display_right_margin);
+               ide_file_settings_set_show_right_margin (file_settings, options.display_right_margin);
        }
-       else if (check_previous (view, previous, MODELINE_SET_SHOW_RIGHT_MARGIN))
+        else
        {
-#if 0
-               gboolean display_right_margin;
-
-               display_right_margin = g_settings_get_boolean (settings,
-                                                              GEDIT_SETTINGS_DISPLAY_RIGHT_MARGIN);
-               gtk_source_view_set_show_right_margin (view, display_right_margin);
-#endif
+               ide_file_settings_set_show_right_margin_set (file_settings, FALSE);
        }
 
        if (previous)
@@ -888,9 +799,6 @@ modeline_parser_apply_modeline (GtkSourceView *view)
                                        (GDestroyNotify)free_modeline_options);
        }
 
-#if 0
-       g_object_unref (settings);
-#endif
        g_free (options.language_id);
 }
 
diff --git a/libide/modelines/modeline-parser.h b/libide/modelines/modeline-parser.h
index bb55e18..1b80b6b 100644
--- a/libide/modelines/modeline-parser.h
+++ b/libide/modelines/modeline-parser.h
@@ -24,11 +24,14 @@
 #include <glib.h>
 #include <gtksourceview/gtksource.h>
 
+#include "ide-file-settings.h"
+
 G_BEGIN_DECLS
 
-void   modeline_parser_init            (void);
-void   modeline_parser_shutdown        (void);
-void   modeline_parser_apply_modeline  (GtkSourceView *view);
+void modeline_parser_init           (void);
+void modeline_parser_shutdown       (void);
+void modeline_parser_apply_modeline (GtkTextBuffer   *buffer,
+                                     IdeFileSettings *file_settings);
 
 G_END_DECLS
 


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