# HG changeset patch # User Gary Kramlich # Date 1723713075 18000 # Node ID 566102577b66a253b35e7d8d890b141f0328379f # Parent b7d2f16bf2a2169d5988520338cb442df18df17f Add Purple.Protocol.get_action_menu Testing Done: Called in the turtles. Bugs closed: PIDGIN-17880 Reviewed at https://reviews.imfreedom.org/r/3392/ diff -r b7d2f16bf2a2 -r 566102577b66 libpurple/purpleprotocol.c --- a/libpurple/purpleprotocol.c Thu Aug 15 02:54:10 2024 -0500 +++ b/libpurple/purpleprotocol.c Thu Aug 15 04:11:15 2024 -0500 @@ -375,6 +375,23 @@ /****************************************************************************** * Public API *****************************************************************************/ +BirbActionMenu * +purple_protocol_get_action_menu(PurpleProtocol *protocol, + PurpleAccount *account) +{ + PurpleProtocolClass *klass = NULL; + + g_return_val_if_fail(PURPLE_IS_PROTOCOL(protocol), NULL); + g_return_val_if_fail(PURPLE_IS_ACCOUNT(account), NULL); + + klass = PURPLE_PROTOCOL_GET_CLASS(protocol); + if(klass != NULL && klass->get_action_menu != NULL) { + return klass->get_action_menu(protocol, account); + } + + return NULL; +} + const gchar * purple_protocol_get_id(PurpleProtocol *protocol) { PurpleProtocolPrivate *priv = NULL; diff -r b7d2f16bf2a2 -r 566102577b66 libpurple/purpleprotocol.h --- a/libpurple/purpleprotocol.h Thu Aug 15 02:54:10 2024 -0500 +++ b/libpurple/purpleprotocol.h Thu Aug 15 04:11:15 2024 -0500 @@ -32,6 +32,8 @@ #include +#include + #include "purpleversion.h" #define PURPLE_TYPE_PROTOCOL (purple_protocol_get_type()) @@ -146,6 +148,8 @@ PurpleConnection *(*create_connection)(PurpleProtocol *protocol, PurpleAccount *account, const char *password, GError **error); + BirbActionMenu *(*get_action_menu)(PurpleProtocol *protocol, PurpleAccount *account); + /*< private >*/ gpointer reserved[4]; }; @@ -321,6 +325,20 @@ PurpleConnection *purple_protocol_create_connection(PurpleProtocol *protocol, PurpleAccount *account, const char *password, GError **error); /** + * purple_protocol_get_action_menu: + * @protocol: The instance. + * @account: The account. + * + * Gets a [class@Birb.ActionMenu] for @account. + * + * Returns: (transfer full) (nullable): The new action menu or %NULL. + * + * Since: 3.0 + */ +PURPLE_AVAILABLE_IN_3_0 +BirbActionMenu *purple_protocol_get_action_menu(PurpleProtocol *protocol, PurpleAccount *account); + +/** * purple_protocol_get_icon_name: * @protocol: The #PurpleProtocol instance. * diff -r b7d2f16bf2a2 -r 566102577b66 libpurple/tests/test_protocol.c --- a/libpurple/tests/test_protocol.c Thu Aug 15 02:54:10 2024 -0500 +++ b/libpurple/tests/test_protocol.c Thu Aug 15 04:11:15 2024 -0500 @@ -18,6 +18,8 @@ #include +#include + #include #define TEST_PROTOCOL_DOMAIN (g_quark_from_static_string("test-protocol")) @@ -77,6 +79,16 @@ return g_task_propagate_boolean(G_TASK(result), error); } +static BirbActionMenu * +test_purple_protocol_get_action_menu(PurpleProtocol *protocol, + PurpleAccount *account) +{ + g_assert_true(PURPLE_IS_PROTOCOL(protocol)); + g_assert_true(PURPLE_IS_ACCOUNT(account)); + + return birb_action_menu_new(); +} + static void test_purple_protocol_finalize(GObject *obj) { TestPurpleProtocol *protocol = TEST_PURPLE_PROTOCOL(obj); @@ -100,6 +112,7 @@ protocol_class->can_connect_async = test_purple_protocol_can_connect_async; protocol_class->can_connect_finish = test_purple_protocol_can_connect_finish; + protocol_class->get_action_menu = test_purple_protocol_get_action_menu; } static TestPurpleProtocol * @@ -208,6 +221,28 @@ g_clear_object(&account); } +static void +test_purple_protocol_get_action_menu_valid(void) { + PurpleProtocol *protocol = NULL; + PurpleAccount *account = NULL; + BirbActionMenu *action_menu = NULL; + + protocol = g_object_new( + TEST_PURPLE_TYPE_PROTOCOL, + "id", "test-provider", + "name", "Test Provider", + NULL); + + account = purple_account_new("test", "test"); + + action_menu = purple_protocol_get_action_menu(protocol, account); + g_assert_true(BIRB_IS_ACTION_MENU(action_menu)); + g_clear_object(&action_menu); + + g_clear_object(&account); + g_assert_finalize_object(protocol); +} + /****************************************************************************** * Main *****************************************************************************/ @@ -222,6 +257,8 @@ test_purple_protocol_can_connect_false); g_test_add_func("/protocol/can-connect/true", test_purple_protocol_can_connect_true); + g_test_add_func("/protocol/get-action-menu/valid", + test_purple_protocol_get_action_menu_valid); return g_test_run(); }