[geany/geany] 21cd7b: Add Project overrides for 'Saving files' checkbox options

Nick Treleaven git-noreply at xxxxx
Thu Jul 26 00:03:02 UTC 2012


Branch:      refs/heads/document-messages
Author:      Nick Treleaven <nick.treleaven at btinternet.com>
Committer:   Nick Treleaven <nick.treleaven at btinternet.com>
Date:        Thu, 19 Jan 2012 18:17:12
Commit:      21cd7bb2139fd67644e5777bb8e6387d34473d09
             https://github.com/geany/geany/commit/21cd7bb2139fd67644e5777bb8e6387d34473d09

Log Message:
-----------
Add Project overrides for 'Saving files' checkbox options


Modified Paths:
--------------
    data/geany.glade
    src/document.c
    src/project.c
    src/project.h
    src/projectprivate.h

Modified: data/geany.glade
9071 files changed, 4597 insertions(+), 4474 deletions(-)
===================================================================
No diff available, check online


Modified: src/document.c
11 files changed, 7 insertions(+), 4 deletions(-)
===================================================================
@@ -71,6 +71,7 @@
 #include "win32.h"
 #include "search.h"
 #include "filetypesprivate.h"
+#include "project.h"
 
 #include "SciLexer.h"
 
@@ -1687,6 +1688,7 @@ gboolean document_save_file(GeanyDocument *doc, gboolean force)
 	gchar *data;
 	gsize len;
 	gchar *locale_filename;
+	const GeanyFilePrefs *fp;
 
 	g_return_val_if_fail(doc != NULL, FALSE);
 
@@ -1701,17 +1703,18 @@ gboolean document_save_file(GeanyDocument *doc, gboolean force)
 	if (! force && ! ui_prefs.allow_always_save && (! doc->changed || doc->readonly))
 		return FALSE;
 
+	fp = project_get_file_prefs();
 	/* replaces tabs by spaces but only if the current file is not a Makefile */
-	if (file_prefs.replace_tabs && doc->file_type->id != GEANY_FILETYPES_MAKE)
+	if (fp->replace_tabs && doc->file_type->id != GEANY_FILETYPES_MAKE)
 		editor_replace_tabs(doc->editor);
 	/* strip trailing spaces */
-	if (file_prefs.strip_trailing_spaces)
+	if (fp->strip_trailing_spaces)
 		editor_strip_trailing_spaces(doc->editor);
 	/* ensure the file has a newline at the end */
-	if (file_prefs.final_new_line)
+	if (fp->final_new_line)
 		editor_ensure_final_newline(doc->editor);
 	/* ensure newlines are consistent */
-	if (file_prefs.ensure_convert_new_lines)
+	if (fp->ensure_convert_new_lines)
 		sci_convert_eols(doc->editor->sci, sci_get_eol_mode(doc->editor->sci));
 
 	/* notify plugins which may wish to modify the document before it's saved */


Modified: src/project.c
97 files changed, 77 insertions(+), 20 deletions(-)
===================================================================
@@ -54,14 +54,13 @@
 static GeanyProjectPrivate priv;
 static GeanyIndentPrefs indentation;
 
-static StashGroup *indent_group = NULL;
+static GSList *stash_groups = NULL;
 
 static struct
 {
 	gchar *project_file_path; /* in UTF-8 */
 } local_prefs = { NULL };
 
-
 static gboolean entries_modified;
 
 /* simple struct to keep references to the elements of the properties dialog */
@@ -87,6 +86,7 @@
 static void on_entries_changed(GtkEditable *editable, PropertyDialogElements *e);
 static void on_radio_long_line_custom_toggled(GtkToggleButton *radio, GtkWidget *spin_long_line);
 static void apply_editor_prefs(void);
+static void init_stash_prefs(void);
 
 
 #define SHOW_ERR(args) dialogs_show_msgbox(GTK_MESSAGE_ERROR, args)
@@ -344,6 +344,8 @@ static void remove_foreach_project_filetype(gpointer data, gpointer user_data)
 /* open_default will make function reload default session files on close */
 void project_close(gboolean open_default)
 {
+	GSList *node;
+
 	g_return_if_fail(app->project != NULL);
 
 	ui_set_statusbar(TRUE, _("Project \"%s\" closed."), app->project->name);
@@ -371,6 +373,12 @@ void project_close(gboolean open_default)
 	g_free(app->project);
 	app->project = NULL;
 
+	foreach_slist(node, stash_groups)
+		stash_group_free(node->data);
+
+	g_slist_free(stash_groups);
+	stash_groups = NULL;
+
 	apply_editor_prefs(); /* ensure that global settings are restored */
 
 	if (project_prefs.project_session)
@@ -424,15 +432,9 @@ void project_close(gboolean open_default)
 
 static void insert_build_page(PropertyDialogElements *e)
 {
-	GtkWidget *build_table, *label, *editor_tab;
+	GtkWidget *build_table, *label;
 	GeanyDocument *doc = document_get_current();
 	GeanyFiletype *ft = NULL;
-	gint page_num;
-
-	/* lookup the "Editor" tab page so the "Build" tab can be inserted
-	 * right after it. */
-	editor_tab = ui_lookup_widget(e->dialog, "vbox_project_dialog_editor");
-	page_num = gtk_notebook_page_num(GTK_NOTEBOOK(e->notebook), editor_tab);
 
 	if (doc != NULL)
 		ft = doc->file_type;
@@ -440,8 +442,8 @@ static void insert_build_page(PropertyDialogElements *e)
 	build_table = build_commands_table(doc, GEANY_BCS_PROJ, &(e->build_properties), ft);
 	gtk_container_set_border_width(GTK_CONTAINER(build_table), 6);
 	label = gtk_label_new(_("Build"));
-	e->build_page_num = gtk_notebook_insert_page(GTK_NOTEBOOK(e->notebook),
-		build_table, label, ++page_num);
+	e->build_page_num = gtk_notebook_append_page(GTK_NOTEBOOK(e->notebook),
+		build_table, label);
 }
 
 
@@ -493,6 +495,7 @@ static void show_project_properties(gboolean show_build)
 	GtkWidget *widget = NULL;
 	GtkWidget *radio_long_line_custom;
 	static PropertyDialogElements e;
+	GSList *node;
 
 	g_return_if_fail(app->project != NULL);
 
@@ -503,7 +506,8 @@ static void show_project_properties(gboolean show_build)
 
 	insert_build_page(&e);
 
-	stash_group_display(indent_group, e.dialog);
+	foreach_slist(node, stash_groups)
+		stash_group_display(node->data, e.dialog);
 
 	/* fill the elements with the appropriate data */
 	gtk_entry_set_text(GTK_ENTRY(e.name), p->name);
@@ -607,10 +611,11 @@ static GeanyProject *create_project(void)
 	GeanyProject *project = g_new0(GeanyProject, 1);
 
 	memset(&priv, 0, sizeof priv);
-	indentation = *editor_get_indent_prefs(NULL);
 	priv.indentation = &indentation;
 	project->priv = &priv;
 
+	init_stash_prefs();
+
 	project->file_patterns = NULL;
 
 	project->long_line_behaviour = 1 /* use global settings */;
@@ -730,6 +735,7 @@ static gboolean update_config(const PropertyDialogElements *e, gboolean new_proj
 		GtkWidget *widget;
 		gchar *tmp;
 		GString *str;
+		GSList *node;
 
 		/* get and set the project description */
 		buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(e->description));
@@ -737,7 +743,8 @@ static gboolean update_config(const PropertyDialogElements *e, gboolean new_proj
 		gtk_text_buffer_get_end_iter(buffer, &end);
 		setptr(p->description, g_strdup(gtk_text_buffer_get_text(buffer, &start, &end, FALSE)));
 
-		stash_group_update(indent_group, e->dialog);
+		foreach_slist(node, stash_groups)
+			stash_group_update(node->data, e->dialog);
 
 		/* read the project build menu */
 		oldvalue = ft ? ft->projfilecmds : NULL;
@@ -954,6 +961,7 @@ static gboolean load_config(const gchar *filename)
 {
 	GKeyFile *config;
 	GeanyProject *p;
+	GSList *node;
 
 	/* there should not be an open project */
 	g_return_val_if_fail(app->project == NULL && filename != NULL, FALSE);
@@ -967,7 +975,8 @@ static gboolean load_config(const gchar *filename)
 
 	p = create_project();
 
-	stash_group_load_from_key_file(indent_group, config);
+	foreach_slist(node, stash_groups)
+		stash_group_load_from_key_file(node->data, config);
 
 	p->name = utils_get_setting_string(config, "project", "name", GEANY_STRING_UNTITLED);
 	p->description = utils_get_setting_string(config, "project", "description", "");
@@ -1021,6 +1030,7 @@ static gboolean write_config(gboolean emit_signal)
 	gchar *filename;
 	gchar *data;
 	gboolean ret = FALSE;
+	GSList *node;
 
 	g_return_val_if_fail(app->project != NULL, FALSE);
 
@@ -1031,7 +1041,8 @@ static gboolean write_config(gboolean emit_signal)
 	filename = utils_get_locale_from_utf8(p->file_name);
 	g_key_file_load_from_file(config, filename, G_KEY_FILE_NONE, NULL);
 
-	stash_group_save_to_key_file(indent_group, config);
+	foreach_slist(node, stash_groups)
+		stash_group_save_to_key_file(node->data, config);
 
 	g_key_file_set_string(config, "project", "name", p->name);
 	g_key_file_set_string(config, "project", "base_path", p->base_path);
@@ -1159,14 +1170,22 @@ void project_apply_prefs(void)
 }
 
 
-void project_init(void)
+static void add_stash_group(StashGroup *group)
+{
+	stash_groups = g_slist_prepend(stash_groups, group);
+}
+
+
+static void init_stash_prefs(void)
 {
 	StashGroup *group;
+	GKeyFile *kf;
 
 	group = stash_group_new("indentation");
-	/* defaults are copied from editor indent prefs */
+	/* copy global defaults */
+	indentation = *editor_get_indent_prefs(NULL);
 	stash_group_set_use_defaults(group, FALSE);
-	indent_group = group;
+	add_stash_group(group);
 
 	stash_group_add_spin_button_integer(group, &indentation.width,
 		"indent_width", 4, "spin_indent_width_project");
@@ -1185,10 +1204,48 @@ void project_init(void)
 		"detect_indent_width", FALSE, "check_detect_indent_width_project");
 	stash_group_add_combo_box(group, (gint*)(gpointer)&indentation.auto_indent_mode,
 		"indent_mode", GEANY_AUTOINDENT_CURRENTCHARS, "combo_auto_indent_mode_project");
+
+	group = stash_group_new("file_prefs");
+	stash_group_add_toggle_button(group, &priv.final_new_line,
+		"final_new_line", file_prefs.final_new_line, "check_new_line1");
+	stash_group_add_toggle_button(group, &priv.ensure_convert_new_lines,
+		"ensure_convert_new_lines", file_prefs.ensure_convert_new_lines, "check_ensure_convert_new_lines1");
+	stash_group_add_toggle_button(group, &priv.strip_trailing_spaces,
+		"strip_trailing_spaces", file_prefs.strip_trailing_spaces, "check_trailing_spaces1");
+	stash_group_add_toggle_button(group, &priv.replace_tabs,
+		"replace_tabs", file_prefs.replace_tabs, "check_replace_tabs1");
+	add_stash_group(group);
+	/* apply defaults */
+	kf = g_key_file_new();
+	stash_group_load_from_key_file(group, kf);
+	g_key_file_free(kf);
+}
+
+
+#define COPY_PREF(dest, prefname)\
+	(dest.prefname = priv.prefname)
+
+const GeanyFilePrefs *project_get_file_prefs(void)
+{
+	static GeanyFilePrefs fp;
+
+	if (!app->project)
+		return &file_prefs;
+
+	fp = file_prefs;
+	COPY_PREF(fp, final_new_line);
+	COPY_PREF(fp, ensure_convert_new_lines);
+	COPY_PREF(fp, strip_trailing_spaces);
+	COPY_PREF(fp, replace_tabs);
+	return &fp;
+}
+
+
+void project_init(void)
+{
 }
 
 
 void project_finalize(void)
 {
-	stash_group_free(indent_group);
 }


Modified: src/project.h
2 files changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -84,6 +84,8 @@
 gchar *project_get_base_path(void);
 
 
+const struct GeanyFilePrefs *project_get_file_prefs(void);
+
 void project_save_prefs(GKeyFile *config);
 
 void project_load_prefs(GKeyFile *config);


Modified: src/projectprivate.h
4 files changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -28,6 +28,10 @@
 typedef struct GeanyProjectPrivate
 {
 	struct GeanyIndentPrefs *indentation;
+	gboolean	final_new_line;
+	gboolean	strip_trailing_spaces;
+	gboolean	replace_tabs;
+	gboolean	ensure_convert_new_lines;
 }
 GeanyProjectPrivate;
 


@@ Diff output truncated at 100000 characters. @@


--------------
This E-Mail was brought to you by github_commit_mail.py (Source: TBD).



More information about the Commits mailing list