sourceview: Fix typo in a gschema key name
[anjuta.git] / plugins / sourceview / sourceview-prefs.c
blobb45672025fe3b9fe21984a1be61e325ecbb92bb5
1 /*
2 * This program is free software; you can redistribute it and/or modify
3 * it under the terms of the GNU General Public License as published by
4 * the Free Software Foundation; either version 2 of the License, or
5 * (at your option) any later version.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU Library General Public License for more details.
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software
14 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 #include "sourceview-prefs.h"
18 #include "sourceview-private.h"
19 #include "sourceview-provider.h"
20 #include <gtksourceview/gtksourceview.h>
21 #include <gtksourceview/completion-providers/words/gtksourcecompletionwords.h>
23 #include <libanjuta/anjuta-debug.h>
25 #define REGISTER_NOTIFY(settings, key, func) \
26 g_signal_connect (settings, "changed::" key, G_CALLBACK(func), sv);
28 #define PREF_SCHEMA "org.gnome.anjuta.plugins.sourceview"
29 #define MSGMAN_PREF_SCHEMA "org.gnome.anjuta.message-manager"
32 /* Editor preferences */
33 #define HIGHLIGHT_SYNTAX "syntax-highlight"
34 #define HIGHLIGHT_CURRENT_LINE "currentline-highlight"
35 #define USE_TABS "use-tabs"
36 #define HIGHLIGHT_BRACKETS "brackets-highlight"
37 #define TAB_SIZE "tabsize"
38 #define INDENT_SIZE "indent-size"
39 #define AUTOCOMPLETION "autocomplete"
41 #define VIEW_RIGHTMARGIN "rightmargin-visible"
42 #define RIGHTMARGIN_POSITION "rightmargin-position"
44 #define MSGMAN_COLOR_ERROR "msgman-color-error"
45 #define MSGMAN_COLOR_WARNING "msgman-color-warning"
48 #define FONT_THEME "font-use-theme"
49 #define FONT "font"
50 #define DESKTOP_FIXED_FONT "/desktop/gnome/interface/monospace_font_name"
52 static void
53 on_notify_view_spaces (GSettings* settings,
54 const gchar* key,
55 gpointer user_data)
57 Sourceview *sv;
58 sv = ANJUTA_SOURCEVIEW(user_data);
59 GtkSourceDrawSpacesFlags flags =
60 gtk_source_view_get_draw_spaces (GTK_SOURCE_VIEW (sv->priv->view));
62 if (g_settings_get_boolean (settings, key))
63 flags |= (GTK_SOURCE_DRAW_SPACES_SPACE | GTK_SOURCE_DRAW_SPACES_TAB);
64 else
65 flags &= ~(GTK_SOURCE_DRAW_SPACES_SPACE | GTK_SOURCE_DRAW_SPACES_TAB);
67 gtk_source_view_set_draw_spaces (GTK_SOURCE_VIEW(sv->priv->view),
68 flags);
71 static void
72 on_notify_view_eol (GSettings* settings,
73 const gchar* key,
74 gpointer user_data)
76 Sourceview *sv;
77 sv = ANJUTA_SOURCEVIEW(user_data);
78 GtkSourceDrawSpacesFlags flags =
79 gtk_source_view_get_draw_spaces (GTK_SOURCE_VIEW (sv->priv->view));
81 if (g_settings_get_boolean (settings, key))
82 flags |= GTK_SOURCE_DRAW_SPACES_NEWLINE;
83 else
84 flags &= ~GTK_SOURCE_DRAW_SPACES_NEWLINE;
86 gtk_source_view_set_draw_spaces (GTK_SOURCE_VIEW(sv->priv->view),
87 flags);
90 static void
91 on_notify_line_wrap (GSettings* settings,
92 const gchar* key,
93 gpointer user_data)
95 Sourceview *sv;
96 sv = ANJUTA_SOURCEVIEW(user_data);
98 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (sv->priv->view),
99 g_settings_get_boolean (settings, key) ? GTK_WRAP_WORD : GTK_WRAP_NONE);
102 static void
103 on_notify_use_tab_for_indentation (GSettings* settings,
104 const gchar* key,
105 gpointer user_data)
107 Sourceview *sv;
108 sv = ANJUTA_SOURCEVIEW(user_data);
110 gtk_source_view_set_insert_spaces_instead_of_tabs(GTK_SOURCE_VIEW(sv->priv->view),
111 !g_settings_get_boolean (settings, key));
114 static void
115 on_notify_autocompletion (GSettings* settings,
116 const gchar* key,
117 gpointer user_data)
119 Sourceview *sv;
120 sv = ANJUTA_SOURCEVIEW(user_data);
121 GtkSourceCompletion* completion = gtk_source_view_get_completion(GTK_SOURCE_VIEW(sv->priv->view));
123 if (g_settings_get_boolean (settings, key))
125 DEBUG_PRINT ("Register word completion provider");
126 GtkSourceCompletionWords *prov_words;
127 prov_words = gtk_source_completion_words_new (NULL, NULL);
129 gtk_source_completion_words_register (prov_words,
130 gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view)));
132 gtk_source_completion_add_provider (completion,
133 GTK_SOURCE_COMPLETION_PROVIDER (prov_words),
134 NULL);
136 else
138 GList* node;
139 for (node = gtk_source_completion_get_providers(completion); node != NULL; node = g_list_next (node))
141 if (GTK_SOURCE_IS_COMPLETION_WORDS(node->data))
143 DEBUG_PRINT ("Unregister word completion provider");
144 gtk_source_completion_words_unregister (GTK_SOURCE_COMPLETION_WORDS(node->data),
145 gtk_text_view_get_buffer (GTK_TEXT_VIEW (sv->priv->view)));
146 gtk_source_completion_remove_provider(completion, GTK_SOURCE_COMPLETION_PROVIDER(node->data), NULL);
147 break;
153 static void
154 on_notify_font (GSettings* settings,
155 const gchar* key,
156 gpointer user_data)
158 Sourceview *sv;
159 sv = ANJUTA_SOURCEVIEW(user_data);
160 gchar* font = g_settings_get_string (settings, key);
162 anjuta_view_set_font(sv->priv->view, FALSE,
163 font);
164 g_free (font);
167 static void
168 on_notify_font_theme (GSettings* settings,
169 const gchar* key,
170 gpointer user_data)
172 Sourceview *sv;
173 sv = ANJUTA_SOURCEVIEW(user_data);
175 if (g_settings_get_boolean (settings, key))
177 /* FIXME: GSettings */
178 #if 0
179 GConfClient *gclient = gconf_client_get_default ();
180 gchar *desktop_fixed_font;
181 desktop_fixed_font =
182 gconf_client_get_string (gclient, DESKTOP_FIXED_FONT, NULL);
183 if (desktop_fixed_font)
184 anjuta_view_set_font(sv->priv->view, FALSE, desktop_fixed_font);
185 else
186 anjuta_view_set_font(sv->priv->view, TRUE, NULL);
187 g_free (desktop_fixed_font);
188 #endif
190 else
192 gchar* font = g_settings_get_string (settings, FONT);
193 anjuta_view_set_font(sv->priv->view, FALSE, font);
194 g_free (font);
198 /* Preferences notifications */
199 static void
200 on_notify_indic_colors (GSettings* settings,
201 const gchar *key,
202 gpointer user_data)
204 char* error_color =
205 g_settings_get_string (settings,
206 MSGMAN_COLOR_ERROR);
207 char* warning_color =
208 g_settings_get_string (settings,
209 MSGMAN_COLOR_WARNING);
210 Sourceview* sv = ANJUTA_SOURCEVIEW (user_data);
212 g_object_set (sv->priv->warning_indic, "foreground", warning_color, NULL);
213 g_object_set (sv->priv->critical_indic, "foreground", error_color, NULL);
215 g_free (error_color);
216 g_free (warning_color);
219 static void
220 init_fonts(Sourceview* sv)
222 gboolean font_theme;
224 font_theme = FALSE; //g_settings_get_boolean (sv->priv->settings, FONT_THEME);
226 if (!font_theme)
228 gchar* font = g_settings_get_string (sv->priv->settings, FONT);
229 anjuta_view_set_font(sv->priv->view, FALSE, font);
230 g_free (font);
232 #if 0
233 else
235 /* FIXME: Get font from GSettings */
236 GConfClient *gclient;
237 gchar *desktop_fixed_font;
239 gclient = gconf_client_get_default ();
240 desktop_fixed_font =
241 gconf_client_get_string (gclient, DESKTOP_FIXED_FONT, NULL);
242 if (desktop_fixed_font)
243 anjuta_view_set_font(sv->priv->view, FALSE, desktop_fixed_font);
244 else
245 anjuta_view_set_font(sv->priv->view, TRUE, NULL);
246 g_free (desktop_fixed_font);
247 g_object_unref (gclient);
249 #endif
252 void
253 sourceview_prefs_init(Sourceview* sv)
255 GtkSourceDrawSpacesFlags flags = 0;
256 /* We create a new GSettings object here because if we used the one from
257 * the editor might be destroyed while the plugin is still alive
259 sv->priv->settings = g_settings_new (PREF_SCHEMA);
260 sv->priv->msgman_settings = g_settings_new (MSGMAN_PREF_SCHEMA);
262 /* Bind simple options to GSettings */
263 g_settings_bind (sv->priv->settings, HIGHLIGHT_SYNTAX,
264 sv->priv->document, "highlight-syntax",
265 G_SETTINGS_BIND_GET);
266 g_settings_bind (sv->priv->settings, HIGHLIGHT_CURRENT_LINE,
267 sv->priv->view, "highlight-current-line",
268 G_SETTINGS_BIND_GET);
269 g_settings_bind (sv->priv->settings, TAB_SIZE,
270 sv->priv->view, "tab-width",
271 G_SETTINGS_BIND_GET);
272 g_settings_bind (sv->priv->settings, HIGHLIGHT_BRACKETS,
273 sv->priv->document, "highlight-matching-brackets",
274 G_SETTINGS_BIND_GET);
276 g_settings_bind (sv->priv->settings, VIEW_MARKS,
277 sv->priv->view, "show-line-marks",
278 G_SETTINGS_BIND_GET);
280 g_settings_bind (sv->priv->settings, RIGHTMARGIN_POSITION,
281 sv->priv->view, "right-margin-position",
282 G_SETTINGS_BIND_GET);
284 g_settings_bind (sv->priv->settings, VIEW_RIGHTMARGIN,
285 sv->priv->view, "show-right-margin",
286 G_SETTINGS_BIND_GET);
288 g_settings_bind (sv->priv->settings, VIEW_LINENUMBERS,
289 sv->priv->view, "show-line-numbers",
290 G_SETTINGS_BIND_GET);
292 /* Init non-simple options */
293 gtk_source_view_set_indent_width(GTK_SOURCE_VIEW(sv->priv->view), -1); /* Same as tab width */
294 gtk_source_view_set_insert_spaces_instead_of_tabs(GTK_SOURCE_VIEW(sv->priv->view),
295 !g_settings_get_boolean (sv->priv->settings, USE_TABS));
297 gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (sv->priv->view),
298 g_settings_get_boolean (sv->priv->settings, VIEW_EOL) ? GTK_WRAP_WORD : GTK_WRAP_NONE);
301 if (g_settings_get_boolean (sv->priv->settings, VIEW_WHITE_SPACES))
302 flags |= (GTK_SOURCE_DRAW_SPACES_SPACE | GTK_SOURCE_DRAW_SPACES_TAB);
303 if (g_settings_get_boolean (sv->priv->settings, VIEW_EOL))
304 flags |= GTK_SOURCE_DRAW_SPACES_NEWLINE;
306 gtk_source_view_set_draw_spaces (GTK_SOURCE_VIEW (sv->priv->view),
307 flags);
309 init_fonts(sv);
311 on_notify_autocompletion(sv->priv->settings, AUTOCOMPLETION, sv);
313 /* Register notifications */
314 REGISTER_NOTIFY (sv->priv->settings, USE_TABS, on_notify_use_tab_for_indentation);
315 REGISTER_NOTIFY (sv->priv->settings, AUTOCOMPLETION, on_notify_autocompletion);
317 REGISTER_NOTIFY (sv->priv->settings, VIEW_WHITE_SPACES, on_notify_view_spaces);
318 REGISTER_NOTIFY (sv->priv->settings, VIEW_EOL, on_notify_view_eol);
319 REGISTER_NOTIFY (sv->priv->settings, VIEW_LINE_WRAP, on_notify_line_wrap);
320 REGISTER_NOTIFY (sv->priv->settings, FONT_THEME, on_notify_font_theme);
321 REGISTER_NOTIFY (sv->priv->settings, FONT, on_notify_font);
323 g_signal_connect (sv->priv->msgman_settings, "changed::" MSGMAN_COLOR_ERROR,
324 G_CALLBACK (on_notify_indic_colors), sv);
325 g_signal_connect (sv->priv->msgman_settings, "changed::" MSGMAN_COLOR_WARNING,
326 G_CALLBACK (on_notify_indic_colors), sv);
329 void sourceview_prefs_destroy(Sourceview* sv)
331 if (sv->priv->settings)
332 g_object_unref (sv->priv->settings);
333 if (sv->priv->msgman_settings)
334 g_object_unref (sv->priv->msgman_settings);
336 sv->priv->settings = NULL;
337 sv->priv->msgman_settings = NULL;