diff --git a/src/gm-options.c b/src/gm-options.c index 7929e40..70a6477 100644 --- a/src/gm-options.c +++ b/src/gm-options.c @@ -92,14 +92,19 @@ gm_options_dup(GmOptions *source) { void gm_options_set(GmOptions * options, const gchar *key, const gchar *value) { gchar *trimmed = gm_string_trim(key); - gboolean changed = g_hash_table_lookup(options->priv->options, trimmed) - != NULL; + gchar *lookup = g_hash_table_lookup(options->priv->options, trimmed); + gboolean changed = lookup != NULL && lookup != value; - g_hash_table_insert(options->priv->options, trimmed, g_strdup(value)); + if (lookup != value) { + g_hash_table_insert(options->priv->options, g_strdup(trimmed), + g_strdup(value)); + } if (changed) { - g_signal_emit(options, options_signals[OPTION_CHANGED], 0, key); + g_signal_emit(options, options_signals[OPTION_CHANGED], 0, trimmed); } + + g_free(trimmed); } const gchar * @@ -112,7 +117,7 @@ gm_options_set_int(GmOptions *options, const gchar *key, int value) { gchar val[15]; g_snprintf((gchar *) &val, 15, "%d", value); - gm_options_set(options, key, (const gchar *) &val); + gm_options_set(options, key, (const gchar *)val); } int