Don't remove otr policies if they match the default policy
authorfranky
Sun, 19 May 2019 09:59:38 +0200
changeset 2341 c78988260b9f
parent 2340 6eeef7be58f3
child 2342 d7b52c883ca4
Don't remove otr policies if they match the default policy This was not neither obvious to the user nor documented.
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
 }