diff options
Diffstat (limited to 'pluma/pluma-view.c')
-rw-r--r-- | pluma/pluma-view.c | 171 |
1 files changed, 105 insertions, 66 deletions
diff --git a/pluma/pluma-view.c b/pluma/pluma-view.c index 6dce6273..24bc0007 100644 --- a/pluma/pluma-view.c +++ b/pluma/pluma-view.c @@ -44,11 +44,9 @@ #include "pluma-view.h" #include "pluma-debug.h" -#include "pluma-prefs-manager.h" -#include "pluma-prefs-manager-app.h" -#include "pluma-prefs-manager-private.h" #include "pluma-marshal.h" #include "pluma-utils.h" +#include "pluma-settings.h" #define PLUMA_VIEW_SCROLL_MARGIN 0.02 #define PLUMA_VIEW_SEARCH_DIALOG_TIMEOUT (30*1000) /* 30 seconds */ @@ -71,6 +69,9 @@ enum struct _PlumaViewPrivate { + GSettings *editor_settings; + GSettings *interface_settings; + SearchMode search_mode; GtkTextIter start_search_iter; @@ -376,15 +377,14 @@ pluma_set_source_space_drawer_by_level (GtkSourceView *view, GtkSourceSpaceTypeFlags type) { GtkSourceSpaceLocationFlags locs[] = {GTK_SOURCE_SPACE_LOCATION_LEADING, - GTK_SOURCE_SPACE_LOCATION_INSIDE_TEXT, - GTK_SOURCE_SPACE_LOCATION_TRAILING}; + 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 + 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; @@ -409,42 +409,42 @@ pluma_set_source_space_drawer_by_level (GtkSourceView *view, #ifdef GTK_SOURCE_VERSION_3_24 static void -pluma_set_source_space_drawer (GtkSourceView *view) +pluma_set_source_space_drawer (GSettings *settings, GtkSourceView *view) { pluma_set_source_space_drawer_by_level (view, - pluma_prefs_manager_get_draw_spaces (), - GTK_SOURCE_SPACE_TYPE_SPACE); + g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_SPACE), + GTK_SOURCE_SPACE_TYPE_SPACE); pluma_set_source_space_drawer_by_level (view, - pluma_prefs_manager_get_draw_tabs (), - GTK_SOURCE_SPACE_TYPE_TAB); + g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_TAB), + 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); + g_settings_get_boolean (settings, PLUMA_SETTINGS_DRAWER_NEWLINE) ? 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); + g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_NBSP), + GTK_SOURCE_SPACE_TYPE_NBSP); gtk_source_space_drawer_set_enable_matrix (gtk_source_view_get_space_drawer (view), - TRUE); + TRUE); } #else static void -pluma_set_source_space_drawer (GtkSourceView *view) +pluma_set_source_space_drawer (GSettings *settings, GtkSourceView *view) { GtkSourceDrawSpacesFlags flags = 0; - if (pluma_prefs_manager_get_draw_spaces () > 0) + if (g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_SPACE) > 0) flags |= GTK_SOURCE_DRAW_SPACES_SPACE; - if (pluma_prefs_manager_get_draw_tabs () > 0) + if (g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_TAB) > 0) flags |= GTK_SOURCE_DRAW_SPACES_TAB; - if (pluma_prefs_manager_get_draw_newlines ()) + if (g_settings_get_boolean (settings, PLUMA_SETTINGS_DRAWER_NEWLINE)) flags |= GTK_SOURCE_DRAW_SPACES_NEWLINE; - if (pluma_prefs_manager_get_draw_nbsp () > 0) + if (g_settings_get_enum (settings, PLUMA_SETTINGS_DRAWER_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_DRAW_SPACES_TEXT | + GTK_SOURCE_DRAW_SPACES_LEADING; gtk_source_view_set_draw_spaces (view, flags); } @@ -453,21 +453,42 @@ pluma_set_source_space_drawer (GtkSourceView *view) static void pluma_view_init (PlumaView *view) { + PlumaSettings *settings; GtkTargetList *tl; + gboolean use_default_font; + gboolean display_line_numbers; + gboolean auto_indent; + gboolean insert_spaces; + gboolean display_right_margin; + gboolean hl_current_line; + guint tabs_size; + guint right_margin_position; + GtkWrapMode wrap_mode; + GtkSourceSmartHomeEndType smart_home_end; pluma_debug (DEBUG_VIEW); view->priv = pluma_view_get_instance_private (view); + settings = _pluma_settings_get_singleton (); + view->priv->editor_settings = g_settings_new (PLUMA_SCHEMA_ID); + view->priv->interface_settings = g_settings_new ("org.mate.interface"); + + /* Get setting values */ + use_default_font = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_USE_DEFAULT_FONT); + /* * Set tab, fonts, wrap mode, colors, etc. according * to preferences */ - if (!pluma_prefs_manager_get_use_default_font ()) + if (!use_default_font) { gchar *editor_font; - editor_font = pluma_prefs_manager_get_editor_font (); + editor_font = g_settings_get_string (view->priv->editor_settings, + PLUMA_SETTINGS_EDITOR_FONT); + pluma_view_set_font (view, FALSE, editor_font); @@ -478,20 +499,39 @@ pluma_view_init (PlumaView *view) pluma_view_set_font (view, TRUE, NULL); } + display_line_numbers = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_DISPLAY_LINE_NUMBERS); + auto_indent = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_AUTO_INDENT); + tabs_size = g_settings_get_uint (view->priv->editor_settings, PLUMA_SETTINGS_TABS_SIZE); + insert_spaces = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_INSERT_SPACES); + display_right_margin = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_DISPLAY_RIGHT_MARGIN); + right_margin_position = g_settings_get_uint (view->priv->editor_settings, + PLUMA_SETTINGS_RIGHT_MARGIN_POSITION); + hl_current_line = g_settings_get_boolean (view->priv->editor_settings, + PLUMA_SETTINGS_HIGHLIGHT_CURRENT_LINE); + + wrap_mode = pluma_settings_get_wrap_mode (view->priv->editor_settings, + PLUMA_SETTINGS_WRAP_MODE); + + smart_home_end = pluma_settings_get_smart_home_end (settings); + g_object_set (G_OBJECT (view), - "wrap_mode", pluma_prefs_manager_get_wrap_mode (), - "show_line_numbers", pluma_prefs_manager_get_display_line_numbers (), - "auto_indent", pluma_prefs_manager_get_auto_indent (), - "tab_width", pluma_prefs_manager_get_tabs_size (), - "insert_spaces_instead_of_tabs", pluma_prefs_manager_get_insert_spaces (), - "show_right_margin", pluma_prefs_manager_get_display_right_margin (), - "right_margin_position", pluma_prefs_manager_get_right_margin_position (), - "highlight_current_line", pluma_prefs_manager_get_highlight_current_line (), - "smart_home_end", pluma_prefs_manager_get_smart_home_end (), + "wrap_mode", wrap_mode, + "show_line_numbers", display_line_numbers, + "auto_indent", auto_indent, + "tab_width", tabs_size, + "insert_spaces_instead_of_tabs", insert_spaces, + "show_right_margin", display_right_margin, + "right_margin_position", right_margin_position, + "highlight_current_line", hl_current_line, + "smart_home_end", smart_home_end, "indent_on_tab", TRUE, NULL); - pluma_set_source_space_drawer (GTK_SOURCE_VIEW (view)); + pluma_set_source_space_drawer (view->priv->editor_settings, GTK_SOURCE_VIEW (view)); view->priv->typeselect_flush_timeout = 0; view->priv->wrap_around = TRUE; @@ -529,6 +569,9 @@ pluma_view_dispose (GObject *object) } } + g_clear_object (&view->priv->editor_settings); + g_clear_object (&view->priv->interface_settings); + /* Disconnect notify buffer because the destroy of the textview will set the buffer to NULL, and we call get_buffer in the notify which would reinstate a GtkTextBuffer which we don't want */ @@ -759,12 +802,12 @@ pluma_view_scroll_to_cursor (PlumaView *view) 0.0); } -static PangoFontDescription* get_system_font (void) +static PangoFontDescription* get_system_font (GSettings *settings) { PangoFontDescription *desc = NULL; char *name; - name = g_settings_get_string (pluma_prefs_manager->interface_settings, "font-name"); + name = g_settings_get_string (settings, "font-name"); if (name) { @@ -781,18 +824,18 @@ system_font_changed_cb (GSettings *settings, gpointer user_data) { PangoFontDescription *sys_font_desc = NULL; - sys_font_desc = get_system_font (); + sys_font_desc = get_system_font (settings); if (sys_font_desc) { - pluma_override_font ("label", NULL, sys_font_desc); + pluma_override_font (NULL, "label", sys_font_desc); pango_font_description_free (sys_font_desc); } } void -pluma_override_font (const gchar *item, - GtkWidget *widget, - PangoFontDescription *font) +pluma_override_font (PlumaView *view, + const gchar *item, + PangoFontDescription *font) { static GtkCssProvider *provider = NULL; /*We need to keep this as long as Pluma is running*/ gchar *prov_str; @@ -821,11 +864,11 @@ pluma_override_font (const gchar *item, { provider = gtk_css_provider_new (); - g_signal_connect (pluma_prefs_manager->interface_settings, + g_signal_connect (view->priv->interface_settings, "changed::" "font-name", G_CALLBACK (system_font_changed_cb), NULL); - gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (widget), + gtk_style_context_add_provider_for_screen (gtk_widget_get_screen (GTK_WIDGET(view)), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } @@ -880,9 +923,11 @@ pluma_view_set_font (PlumaView *view, if (def) { + PlumaSettings *settings; gchar *font; - font = pluma_prefs_manager_get_system_font (); + settings = _pluma_settings_get_singleton (); + font = pluma_settings_get_system_font (settings); font_desc = pango_font_description_from_string (font); g_free (font); } @@ -895,11 +940,11 @@ pluma_view_set_font (PlumaView *view, g_return_if_fail (font_desc != NULL); - pluma_override_font ("textview", GTK_WIDGET (view), font_desc); + pluma_override_font (view, "textview", font_desc); - sys_font_desc = get_system_font (); + sys_font_desc = get_system_font (view->priv->interface_settings); if (sys_font_desc) { - pluma_override_font ("label", GTK_WIDGET (view), sys_font_desc); + pluma_override_font (view, "label", sys_font_desc); pango_font_description_free (sys_font_desc); } @@ -2163,17 +2208,6 @@ pluma_view_drag_drop (GtkWidget *widget, return result; } -static void -show_line_numbers_toggled (GtkMenu *menu, - PlumaView *view) -{ - gboolean show; - - show = gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu)); - - pluma_prefs_manager_set_display_line_numbers (show); -} - static GtkWidget * create_line_numbers_menu (GtkWidget *view) { @@ -2185,8 +2219,13 @@ create_line_numbers_menu (GtkWidget *view) item = gtk_check_menu_item_new_with_mnemonic (_("_Display line numbers")); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (item), gtk_source_view_get_show_line_numbers (GTK_SOURCE_VIEW (view))); - g_signal_connect (item, "toggled", - G_CALLBACK (show_line_numbers_toggled), view); + + g_settings_bind (PLUMA_VIEW (view)->priv->editor_settings, + "active", + item, + PLUMA_SETTINGS_DISPLAY_LINE_NUMBERS, + G_SETTINGS_BIND_SET); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); gtk_widget_show_all (menu); |