# HG changeset patch # User franky # Date 1558252778 -7200 # Node ID c78988260b9fe5e16fe06d35ce39eefd09185852 # Parent 6eeef7be58f37f44617d5a7e55d0b12918631e8d Don't remove otr policies if they match the default policy This was not neither obvious to the user nor documented. diff -r 6eeef7be58f3 -r c78988260b9f mcabber/mcabber/settings.c --- a/mcabber/mcabber/settings.c Sun May 19 09:45:53 2019 +0200 +++ b/mcabber/mcabber/settings.c Sun May 19 09:59:38 2019 +0200 @@ -655,39 +655,23 @@ /* otr settings */ -#ifdef HAVE_LIBOTR -static void remove_default_policies(char *k, char *policy, void *defaultp) -{ - if (*(enum otr_policy *)policy == *(enum otr_policy *)defaultp) { - g_hash_table_remove(otrpolicy, k); - } -} -#endif - void settings_otr_setpolicy(const char *bjid, guint value) { #ifdef HAVE_LIBOTR enum otr_policy *otrdata; - if (!bjid) { + if (!bjid) { // no jid -> default policy default_policy = value; - /* refresh hash */ - settings_foreach(SETTINGS_TYPE_OTR, &remove_default_policies, &value); - return; - } - - otrdata = g_hash_table_lookup(otrpolicy, bjid); + } else { //policy for some specific jid + otrdata = g_hash_table_lookup(otrpolicy, bjid); - if (value == default_policy) { if (otrdata) { - g_hash_table_remove(otrpolicy, bjid); + *otrdata = value; + } else { + otrdata = g_new(enum otr_policy, 1); + *otrdata = value; + g_hash_table_insert(otrpolicy, g_strdup(bjid), otrdata); } - } else if (otrdata) { - *otrdata = value; - } else { - otrdata = g_new(enum otr_policy, 1); - *otrdata = value; - g_hash_table_insert(otrpolicy, g_strdup(bjid), otrdata); } #endif }