diff -r 96593c46d85c -r 76b701912a9d libpurple/e2ee.c --- a/libpurple/e2ee.c Sat Apr 26 16:56:31 2014 +0200 +++ b/libpurple/e2ee.c Sat Apr 26 19:55:55 2014 +0200 @@ -168,7 +168,7 @@ void purple_e2ee_provider_unregister(PurpleE2eeProvider *provider) { - GList *it; + GList *it, *clear_states = NULL; g_return_if_fail(provider != NULL); if (main_provider != provider) { @@ -184,10 +184,14 @@ if (!state) continue; if (provider == purple_e2ee_state_get_provider(state)) - purple_conversation_set_e2ee_state(conv, NULL); + clear_states = g_list_prepend(clear_states, conv); } main_provider = NULL; + + for (it = clear_states; it; it = g_list_next(it)) + purple_conversation_set_e2ee_state(it->data, NULL); + g_list_free(clear_states); } PurpleE2eeProvider * @@ -230,3 +234,19 @@ return provider->conv_menu_cb; } + +GList * +purple_e2ee_provider_get_conv_menu_actions(PurpleE2eeProvider *provider, + PurpleConversation *conv) +{ + PurpleE2eeConvMenuCallback cb; + + g_return_val_if_fail(provider, NULL); + g_return_val_if_fail(conv, NULL); + + cb = purple_e2ee_provider_get_conv_menu_cb(provider); + if (cb == NULL) + return NULL; + + return cb(conv); +}