diff options
Diffstat (limited to 'pluma/pluma-view.c')
-rw-r--r-- | pluma/pluma-view.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/pluma/pluma-view.c b/pluma/pluma-view.c index 891abb59..ed146b21 100644 --- a/pluma/pluma-view.c +++ b/pluma/pluma-view.c @@ -372,6 +372,87 @@ on_notify_buffer_cb (PlumaView *view, view); } +#ifdef GTK_SOURCE_VERSION_3_24 +void +pluma_set_source_space_drawer_by_level (GtkSourceView *view, + gint level, + GtkSourceSpaceTypeFlags type) +{ + GtkSourceSpaceLocationFlags locs[] = {GTK_SOURCE_SPACE_LOCATION_LEADING, + GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT, + GTK_SOURCE_SPACE_LOCATION_TRAILING}; + /* this array links the level to the location */ + GtkSourceSpaceLocationFlags levels[] = { + 0, + GTK_SOURCE_SPACE_LOCATION_TRAILING, + GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT | + GTK_SOURCE_SPACE_LOCATION_TRAILING | + GTK_SOURCE_SPACE_LOCATION_LEADING + }; + + gint i; + + GtkSourceSpaceDrawer *drawer = gtk_source_view_get_space_drawer (view); + + if (level >= G_N_ELEMENTS(levels) || level < 0) + level = 0; + + for (i = 0 ; i < G_N_ELEMENTS(locs) ; i++ ) { + GtkSourceSpaceTypeFlags f; + f = gtk_source_space_drawer_get_types_for_locations (drawer, + locs[i]); + if (locs[i] & levels[level]) + f |= type; + else + f &= ~type; + gtk_source_space_drawer_set_types_for_locations (drawer, locs[i], f); + } +} +#endif + +#ifdef GTK_SOURCE_VERSION_3_24 +static void +pluma_set_source_space_drawer (GtkSourceView *view) +{ + pluma_set_source_space_drawer_by_level (view, + pluma_prefs_manager_get_draw_spaces (), + GTK_SOURCE_SPACE_TYPE_SPACE); + pluma_set_source_space_drawer_by_level (view, + pluma_prefs_manager_get_draw_tabs (), + GTK_SOURCE_SPACE_TYPE_TAB); + pluma_set_source_space_drawer_by_level (view, + pluma_prefs_manager_get_draw_newlines () ? 2 : 0, + GTK_SOURCE_SPACE_TYPE_NEWLINE); + pluma_set_source_space_drawer_by_level (view, + pluma_prefs_manager_get_draw_nbsp (), + GTK_SOURCE_SPACE_TYPE_NBSP); + gtk_source_space_drawer_set_enable_matrix (gtk_source_view_get_space_drawer (view), + TRUE); + +} +#else +static void +pluma_set_source_space_drawer (GtkSourceView *view) +{ + GtkSourceSpaceTypeFlags flags = 0; + + if (pluma_prefs_manager_get_draw_spaces () > 0) + flags |= GTK_SOURCE_DRAW_SPACES_SPACE; + if (pluma_prefs_manager_get_draw_tabs () > 0) + flags |= GTK_SOURCE_DRAW_SPACES_TAB; + if (pluma_prefs_manager_get_draw_newlines ()) + flags |= GTK_SOURCE_DRAW_SPACES_NEWLINE; + if (pluma_prefs_manager_get_draw_nbsp () > 0) + flags |= GTK_SOURCE_DRAW_SPACES_NBSP; + + flags |= GTK_SOURCE_DRAW_SPACES_TRAILING | + GTK_SOURCE_DRAW_SPACES_TEXT | + GTK_SOURCE_DRAW_SPACES_LEADING; + + gtk_source_view_set_draw_spaces (view, flags); +} +#endif + static void pluma_view_init (PlumaView *view) { @@ -413,6 +494,8 @@ pluma_view_init (PlumaView *view) "indent_on_tab", TRUE, NULL); + pluma_set_source_space_drawer(GTK_SOURCE_VIEW (view)); + view->priv->typeselect_flush_timeout = 0; view->priv->wrap_around = TRUE; |