comparison mcabber/mcabber/settings.c @ 2341:c78988260b9f

Don't remove otr policies if they match the default policy This was not neither obvious to the user nor documented.
author franky
date Sun, 19 May 2019 09:59:38 +0200
parents 6eeef7be58f3
children
comparison
equal deleted inserted replaced
2340:6eeef7be58f3 2341:c78988260b9f
653 return NULL; 653 return NULL;
654 } 654 }
655 655
656 /* otr settings */ 656 /* otr settings */
657 657
658 #ifdef HAVE_LIBOTR
659 static void remove_default_policies(char *k, char *policy, void *defaultp)
660 {
661 if (*(enum otr_policy *)policy == *(enum otr_policy *)defaultp) {
662 g_hash_table_remove(otrpolicy, k);
663 }
664 }
665 #endif
666
667 void settings_otr_setpolicy(const char *bjid, guint value) 658 void settings_otr_setpolicy(const char *bjid, guint value)
668 { 659 {
669 #ifdef HAVE_LIBOTR 660 #ifdef HAVE_LIBOTR
670 enum otr_policy *otrdata; 661 enum otr_policy *otrdata;
671 662
672 if (!bjid) { 663 if (!bjid) { // no jid -> default policy
673 default_policy = value; 664 default_policy = value;
674 /* refresh hash */ 665 } else { //policy for some specific jid
675 settings_foreach(SETTINGS_TYPE_OTR, &remove_default_policies, &value); 666 otrdata = g_hash_table_lookup(otrpolicy, bjid);
676 return; 667
677 }
678
679 otrdata = g_hash_table_lookup(otrpolicy, bjid);
680
681 if (value == default_policy) {
682 if (otrdata) { 668 if (otrdata) {
683 g_hash_table_remove(otrpolicy, bjid); 669 *otrdata = value;
684 } 670 } else {
685 } else if (otrdata) { 671 otrdata = g_new(enum otr_policy, 1);
686 *otrdata = value; 672 *otrdata = value;
687 } else { 673 g_hash_table_insert(otrpolicy, g_strdup(bjid), otrdata);
688 otrdata = g_new(enum otr_policy, 1); 674 }
689 *otrdata = value;
690 g_hash_table_insert(otrpolicy, g_strdup(bjid), otrdata);
691 } 675 }
692 #endif 676 #endif
693 } 677 }
694 678
695 guint settings_otr_getpolicy(const char *bjid) 679 guint settings_otr_getpolicy(const char *bjid)