--- a/libpurple/protocols/irc/irc.c Fri Jul 29 01:13:51 2022 -0500
+++ b/libpurple/protocols/irc/irc.c Fri Jul 29 01:23:48 2022 -0500
@@ -42,7 +42,6 @@
static const char *irc_blist_icon(PurpleAccount *a, PurpleBuddy *b);
static GList *irc_status_types(PurpleAccount *account);
-static GList *irc_get_actions(PurpleProtocolClient *client, PurpleConnection *gc);
/* static GList *irc_chat_info(PurpleConnection *gc); */
static void irc_login(PurpleAccount *account);
static void irc_login_cb(GObject *source, GAsyncResult *res, gpointer user_data);
@@ -204,12 +203,28 @@
-static void irc_view_motd(PurpleProtocolAction *action)
+irc_view_motd(G_GNUC_UNUSED GSimpleAction *action, + G_GNUC_UNUSED gpointer data) - PurpleConnection *gc = action->connection;
+ const gchar *account_id = NULL; + PurpleAccountManager *manager = NULL; + PurpleAccount *account = NULL; + PurpleConnection *gc = NULL; + if(!g_variant_is_of_type(parameter, G_VARIANT_TYPE_STRING)) { + g_critical("IRC View MOTD action parameter is of incorrect type %s", + g_variant_get_type_string(parameter)); + account_id = g_variant_get_string(parameter, NULL); + manager = purple_account_manager_get_default(); + account = purple_account_manager_find_by_id(manager, account_id); + gc = purple_account_get_connection(account); if (gc == NULL || purple_connection_get_protocol_data(gc) == NULL) {
purple_debug_error("irc", "got MOTD request for NULL gc");
@@ -442,15 +457,48 @@
-irc_get_actions(PurpleProtocolClient *client, PurpleConnection *gc) {
- PurpleProtocolAction *act = NULL;
+irc_protocol_actions_get_prefix(PurpleProtocolActions *actions) { +irc_protocol_actions_get_action_group(PurpleProtocolActions *actions, + PurpleConnection *connection) + GSimpleActionGroup *group = NULL; + GActionEntry entries[] = { + .activate = irc_view_motd, + gsize nentries = G_N_ELEMENTS(entries); - act = purple_protocol_action_new(_("View MOTD"), irc_view_motd);
- list = g_list_append(list, act);
+ group = g_simple_action_group_new(); + g_action_map_add_action_entries(G_ACTION_MAP(group), entries, nentries, + return G_ACTION_GROUP(group); +irc_protocol_actions_get_menu(PurpleProtocolActions *actions) { + GMenuItem *item = NULL;
+ item = g_menu_item_new(_("View MOTD"), "prpl-irc.view-motd"); + g_menu_item_set_attribute(item, PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET, "s", + g_menu_append_item(menu, item); @@ -1074,9 +1122,16 @@
+irc_protocol_actions_iface_init(PurpleProtocolActionsInterface *iface) + iface->get_prefix = irc_protocol_actions_get_prefix; + iface->get_action_group = irc_protocol_actions_get_action_group; + iface->get_menu = irc_protocol_actions_get_menu; irc_protocol_client_iface_init(PurpleProtocolClientInterface *client_iface)
- client_iface->get_actions = irc_get_actions;
client_iface->normalize = irc_normalize;
client_iface->get_max_message_size = irc_get_max_message_size;
@@ -1128,6 +1183,9 @@
G_DEFINE_DYNAMIC_TYPE_EXTENDED(
IRCProtocol, irc_protocol, PURPLE_TYPE_PROTOCOL, 0,
+ G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ACTIONS, + irc_protocol_actions_iface_init) G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT,
irc_protocol_client_iface_init)