changeset 743:77ff94c0490a

Try to load a system-wide rc file if any, before per-user rc file. For now, system-wide rc file path is set to /etc/geeqie/geeqierc (defined by GQ_SYSTEM_WIDE_DIR in main.h). filter_parse() was modified to replace entries having the same key, needed since it may be called more than once. Please test heavily.
author zas_
date Fri, 23 May 2008 00:20:56 +0000
parents a336b5545af6
children eb7e0d3206a2
files src/filefilter.c src/main.h src/rcfile.c
diffstat 3 files changed, 29 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/filefilter.c	Thu May 22 23:22:12 2008 +0000
+++ b/src/filefilter.c	Fri May 23 00:20:56 2008 +0000
@@ -79,11 +79,11 @@
 	filter_entry_free(fe);
 }
 
-static gint filter_key_exists(const gchar *key)
+static FilterEntry *filter_get_by_key(const gchar *key)
 {
 	GList *work;
 
-	if (!key) return FALSE;
+	if (!key) return NULL;
 
 	work = filter_list;
 	while (work)
@@ -91,10 +91,15 @@
 		FilterEntry *fe = work->data;
 		work = work->next;
 
-		if (strcmp(fe->key, key) == 0) return TRUE;
+		if (strcmp(fe->key, key) == 0) return fe;
 		}
 
-	return FALSE;
+	return NULL;
+}
+
+static gint filter_key_exists(const gchar *key)
+{
+	return (filter_get_by_key(key) == NULL ? FALSE : TRUE);
 }
 
 void filter_add(const gchar *key, const gchar *description, const gchar *extensions, FileFormatClass file_class, gint enabled)
@@ -419,7 +424,13 @@
 		enabled = FALSE;
 		}
 
-	if (key && strlen(key) > 0 && ext) filter_add(key, desc, ext, file_class, enabled);
+	if (key && strlen(key) > 0 && ext)
+		{
+		FilterEntry *fe = filter_get_by_key(key);
+
+		if (fe != NULL) filter_remove_entry(fe);
+		filter_add(key, desc, ext, file_class, enabled);
+		}
 
 	g_free(key);
 	g_free(ext);
--- a/src/main.h	Thu May 22 23:22:12 2008 +0000
+++ b/src/main.h	Fri May 23 00:20:56 2008 +0000
@@ -76,6 +76,8 @@
 #define GQ_RC_DIR_COLLECTIONS GQ_RC_DIR G_DIR_SEPARATOR_S "collections"
 #define GQ_RC_DIR_TRASH       GQ_RC_DIR G_DIR_SEPARATOR_S "trash"
 
+#define GQ_SYSTEM_WIDE_DIR    "/etc/" GQ_APPNAME_LC
+
 #define RC_FILE_NAME GQ_APPNAME_LC "rc"
 
 #define ZOOM_RESET_ORIGINAL 0
--- a/src/rcfile.c	Thu May 22 23:22:12 2008 +0000
+++ b/src/rcfile.c	Fri May 23 00:20:56 2008 +0000
@@ -924,9 +924,19 @@
 
 void load_options(ConfOptions *options)
 {
+	gboolean success;
 	gchar *rc_path;
 
+	if (isdir(GQ_SYSTEM_WIDE_DIR))
+		{
+		rc_path = g_build_filename(GQ_SYSTEM_WIDE_DIR, RC_FILE_NAME, NULL);
+		success = load_options_from(rc_path, options);
+		DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" : "failed");
+		g_free(rc_path);
+		}
+	
 	rc_path = g_build_filename(homedir(), GQ_RC_DIR, RC_FILE_NAME, NULL);
-	load_options_from(rc_path, options);
+	success = load_options_from(rc_path, options);
+	DEBUG_1("Loading options from %s ... %s", rc_path, success ? "done" : "failed");
 	g_free(rc_path);
 }