diff --git a/src/common/utility.c b/src/common/utility.c index ffda57958b1d..3ea542461c0c 100644 --- a/src/common/utility.c +++ b/src/common/utility.c @@ -67,37 +67,34 @@ const char *dt_util_localize_string(const char *s) gchar *dt_util_localize_segmented_name(const char *s, const gboolean with_space) { - const char *sep = with_space ? " | " : "|"; - - const gboolean is_builtin = g_str_has_prefix(s, BUILTIN_PREFIX); + if(!s || !*s) + return g_strdup(""); - const char *local_s = is_builtin - ? _(s+sizeof(BUILTIN_PREFIX)-1) : s; + const char *sep = with_space ? " | " : "|"; - char *localized = g_strdup(_(local_s)); + const gboolean changed_preset = *s == '*'; + const char *ss = changed_preset ? s + 1 : s; + const gboolean is_builtin = g_str_has_prefix(ss, BUILTIN_PREFIX); + const char *sss = is_builtin ? _(ss+sizeof(BUILTIN_PREFIX)-1) : ss; - // Check if translation found, if not localize each segment + gchar **split = g_strsplit(sss, "|", 0); + gchar **loc_split = g_new0(char*, g_strv_length(split) + 1); - if(!strcmp(local_s, localized)) + for(int i = 0; split[i] != NULL; i++) { - gchar **split = g_strsplit(local_s, "|", 0); - GList *items = NULL; + loc_split[i] = is_builtin ? g_strstrip(split[i]) + : (char *)dt_util_localize_string(g_strstrip(split[i])); + } - if(split) - { - for(int i = 0; split[i] != NULL; i++) - { - const char *name = g_strstrip(split[i]); - const char *l_name = dt_util_localize_string(name); - items = g_list_append(items, (void *)l_name); - } - } + gchar *localized = g_strjoinv(sep, loc_split); + g_free(loc_split); + g_strfreev(split); + if(changed_preset) + { + gchar *tmp = g_strdup_printf("*%s", localized); g_free(localized); - localized = dt_util_glist_to_str(sep, items); - - g_list_free(items); - g_strfreev(split); + localized = tmp; } return localized; diff --git a/src/develop/develop.c b/src/develop/develop.c index 12b83c9f373c..62048adfcfc7 100644 --- a/src/develop/develop.c +++ b/src/develop/develop.c @@ -798,11 +798,22 @@ static void _dev_auto_module_label(dt_develop_t *dev, if(preset_name) snprintf(module->multi_name, sizeof(module->multi_name), "%s", preset_name); + else if(strlen(module->multi_name) > strspn(module->multi_name, "0123456789")) + { + if(module->multi_name[0] != '*') + { + // prepend asterisk to indicate changed from preset + int len = MIN(strlen(module->multi_name), sizeof(module->multi_name) - 2); + memmove(module->multi_name + 1, module->multi_name, len); + module->multi_name[0] = '*'; + module->multi_name[len + 1] = '\0'; + } + } else if(module->multi_priority != 0) snprintf(module->multi_name, sizeof(module->multi_name), "%d", module->multi_priority); else - g_strlcpy(module->multi_name, "", sizeof(module->multi_name)); + module->multi_name[0] = '\0'; g_free(preset_name); diff --git a/src/develop/imageop.c b/src/develop/imageop.c index d09ad452a740..2449f7c65d8e 100644 --- a/src/develop/imageop.c +++ b/src/develop/imageop.c @@ -2293,6 +2293,9 @@ static gboolean _gui_reset_callback(GtkButton *button, dt_iop_reload_defaults(module); dt_iop_commit_blend_params(module, module->default_blendop_params); + if(!module->multi_name_hand_edited) + module->multi_name[0] = '\0'; + /* reset ui to its defaults */ dt_iop_gui_reset(module);