92 lines
4.5 KiB
Diff
92 lines
4.5 KiB
Diff
From 1789c96ae73720ef001249d2085553102043aee3 Mon Sep 17 00:00:00 2001
|
|
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
|
|
Date: Thu, 28 Oct 2021 22:07:14 +0900
|
|
Subject: [PATCH] fm_config_load_from_key_file: don't replace string value when
|
|
loaded config file does not have such key
|
|
|
|
For example, fm_config_load_from_file() loads every key file with path
|
|
ending with "/libfm/libfm.conf" under XDG_CONFIG_DIRS using fm_config_load_from_key_file().
|
|
|
|
With current fm_config_load_from_key_file() implementation, every time it is called,
|
|
for key having string, firstly the old value is always free'ed, and the new value is
|
|
read and set, even if the new value is empty.
|
|
So if system wide key file contains a key with string value but user-specific key file
|
|
does not contain the key, system widely set key value is lost, which is unwilling.
|
|
|
|
For other value types (such as bool or int), the corresponding fm_key_file_get_TYPE
|
|
function are used, and these functions replace old values when the new config file
|
|
actually has the corresponding key.
|
|
|
|
With this patch, similar to other value types, string value is to be replaced
|
|
only when new loaded config actually has corresponding key.
|
|
Also, implement fm_key_file_get_string() to be consistent with other types.
|
|
---
|
|
src/base/fm-config.c | 30 ++++++++++++++++++------------
|
|
1 file changed, 18 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/src/base/fm-config.c b/src/base/fm-config.c
|
|
index a633857..1e3d3f7 100644
|
|
--- a/src/base/fm-config.c
|
|
+++ b/src/base/fm-config.c
|
|
@@ -245,6 +245,19 @@ static void _parse_drop_default_action(GKeyFile *kf, gint *action)
|
|
}
|
|
}
|
|
|
|
+static gboolean fm_key_file_get_string(GKeyFile* kf, const char* grp, const char* key, char** val)
|
|
+{
|
|
+ char* str_key_new = g_key_file_get_string(kf, grp, key, NULL);
|
|
+ if(G_LIKELY(str_key_new))
|
|
+ {
|
|
+ if (*val)
|
|
+ g_free(*val);
|
|
+ *val = str_key_new;
|
|
+ }
|
|
+ return str_key_new != NULL;
|
|
+}
|
|
+
|
|
+
|
|
/**
|
|
* fm_config_load_from_key_file
|
|
* @cfg: pointer to configuration
|
|
@@ -263,12 +276,8 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
|
|
fm_key_file_get_int(kf, "config", "auto_selection_delay", &cfg->auto_selection_delay);
|
|
fm_key_file_get_bool(kf, "config", "confirm_del", &cfg->confirm_del);
|
|
fm_key_file_get_bool(kf, "config", "confirm_trash", &cfg->confirm_trash);
|
|
- if(cfg->terminal)
|
|
- g_free(cfg->terminal);
|
|
- cfg->terminal = g_key_file_get_string(kf, "config", "terminal", NULL);
|
|
- if(cfg->archiver)
|
|
- g_free(cfg->archiver);
|
|
- cfg->archiver = g_key_file_get_string(kf, "config", "archiver", NULL);
|
|
+ fm_key_file_get_string(kf, "config", "terminal", &cfg->terminal);
|
|
+ fm_key_file_get_string(kf, "config", "archiver", &cfg->archiver);
|
|
fm_key_file_get_bool(kf, "config", "thumbnail_local", &cfg->thumbnail_local);
|
|
fm_key_file_get_int(kf, "config", "thumbnail_max", &cfg->thumbnail_max);
|
|
fm_key_file_get_bool(kf, "config", "advanced_mode", &cfg->advanced_mode);
|
|
@@ -285,8 +294,7 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
|
|
fm_key_file_get_bool(kf, "config", "defer_content_test", &cfg->defer_content_test);
|
|
fm_key_file_get_bool(kf, "config", "quick_exec", &cfg->quick_exec);
|
|
fm_key_file_get_bool(kf, "config", "smart_desktop_autodrop", &cfg->smart_desktop_autodrop);
|
|
- g_free(cfg->format_cmd);
|
|
- cfg->format_cmd = g_key_file_get_string(kf, "config", "format_cmd", NULL);
|
|
+ fm_key_file_get_string(kf, "config", "format_cmd", &cfg->format_cmd);
|
|
/* append blacklist */
|
|
strv = g_key_file_get_string_list(kf, "config", "modules_blacklist", NULL, NULL);
|
|
fm_strcatv(&cfg->modules_blacklist, strv);
|
|
@@ -305,10 +313,8 @@ void fm_config_load_from_key_file(FmConfig* cfg, GKeyFile* kf)
|
|
fm_key_file_get_int(kf, "ui", "thumbnail_size", &cfg->thumbnail_size);
|
|
fm_key_file_get_bool(kf, "ui", "show_thumbnail", &cfg->show_thumbnail);
|
|
fm_key_file_get_bool(kf, "ui", "shadow_hidden", &cfg->shadow_hidden);
|
|
- g_free(cfg->list_view_size_units);
|
|
- cfg->list_view_size_units = g_key_file_get_string(kf, "ui", "list_view_size_units", NULL);
|
|
- g_free(cfg->saved_search);
|
|
- cfg->saved_search = g_key_file_get_string(kf, "ui", "saved_search", NULL);
|
|
+ fm_key_file_get_string(kf, "ui", "list_view_size_units", &cfg->list_view_size_units);
|
|
+ fm_key_file_get_string(kf, "ui", "saved_search", &cfg->saved_search);
|
|
|
|
fm_key_file_get_bool(kf, "places", "places_home", &cfg->places_home);
|
|
fm_key_file_get_bool(kf, "places", "places_desktop", &cfg->places_desktop);
|
|
--
|
|
2.33.1
|
|
|