Convert nullprpl to new actions interface

Fri, 29 Jul 2022 02:58:56 -0500

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 29 Jul 2022 02:58:56 -0500
changeset 41466
557aad2bc415
parent 41465
fc9819029e9d
child 41467
5e0e6387ad84

Convert nullprpl to new actions interface

Testing Done:
Compile only.

Reviewed at https://reviews.imfreedom.org/r/1553/

libpurple/protocols/null/nullprpl.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/null/nullprpl.c	Fri Jul 29 02:51:43 2022 -0500
+++ b/libpurple/protocols/null/nullprpl.c	Fri Jul 29 02:58:56 2022 -0500
@@ -206,24 +206,71 @@
 /*
  * UI callbacks
  */
-static void null_input_user_info(PurpleProtocolAction *action)
+static void
+null_input_user_info(G_GNUC_UNUSED GSimpleAction *action,
+                     GVariant *parameter,
+                     G_GNUC_UNUSED gpointer data)
 {
-  PurpleConnection *gc = action->connection;
-  PurpleAccount *acct = purple_connection_get_account(gc);
-  purple_debug_info("nullprpl", "showing 'Set User Info' dialog for %s\n",
-                    purple_account_get_username(acct));
+	const gchar *account_id = NULL;
+	PurpleAccountManager *manager = NULL;
+	PurpleAccount *account = NULL;
+
+	if(!g_variant_is_of_type(parameter, G_VARIANT_TYPE_STRING)) {
+		g_critical("null set info action parameter is of incorrect type %s",
+		           g_variant_get_type_string(parameter));
+	}
 
-  purple_account_request_change_user_info(acct);
+	account_id = g_variant_get_string(parameter, NULL);
+	manager = purple_account_manager_get_default();
+	account = purple_account_manager_find_by_id(manager, account_id);
+
+	purple_debug_info("nullprpl", "showing 'Set User Info' dialog for %s",
+	                  purple_account_get_username(account));
+
+	purple_account_request_change_user_info(account);
 }
 
 /*
  * Protocol functions
  */
-static GList *
-null_get_actions(PurpleProtocolClient *client, PurpleConnection *gc) {
-  PurpleProtocolAction *action = purple_protocol_action_new(
-    _("Set User Info..."), null_input_user_info);
-  return g_list_append(NULL, action);
+static const gchar *
+null_protocol_actions_get_prefix(PurpleProtocolActions *actions) {
+	return "prpl-null";
+}
+
+static GActionGroup *
+null_protocol_actions_get_action_group(PurpleProtocolActions *actions,
+                                       G_GNUC_UNUSED PurpleConnection *connection)
+{
+	GSimpleActionGroup *group = NULL;
+	GActionEntry entries[] = {
+		{
+			.name = "set-info",
+			.activate = null_input_user_info,
+			.parameter_type = "s",
+		},
+	};
+	gsize nentries = G_N_ELEMENTS(entries);
+
+	group = g_simple_action_group_new();
+	g_action_map_add_action_entries(G_ACTION_MAP(group), entries, nentries,
+	                                NULL);
+
+	return G_ACTION_GROUP(group);
+}
+
+static GMenu *
+null_protocol_actions_get_menu(PurpleProtocolActions *actions) {
+	GMenu *menu = g_menu_new();
+	GMenuItem *item = NULL;
+
+	item = g_menu_item_new(_("Set User Info..."), "prpl-null.set-info");
+	g_menu_item_set_attribute(item, PURPLE_MENU_ATTRIBUTE_DYNAMIC_TARGET, "s",
+	                          "account");
+	g_menu_append_item(menu, item);
+	g_object_unref(item);
+
+	return menu;
 }
 
 static const char *null_list_icon(PurpleAccount *acct, PurpleBuddy *buddy)
@@ -1187,9 +1234,16 @@
 }
 
 static void
+null_protocol_actions_iface_init(PurpleProtocolActionsInterface *iface)
+{
+	iface->get_prefix = null_protocol_actions_get_prefix;
+	iface->get_action_group = null_protocol_actions_get_action_group;
+	iface->get_menu = null_protocol_actions_get_menu;
+}
+
+static void
 null_protocol_client_iface_init(PurpleProtocolClientInterface *client_iface)
 {
-  client_iface->get_actions     = null_get_actions;
   client_iface->status_text     = null_status_text;
   client_iface->tooltip_text    = null_tooltip_text;
   client_iface->blist_node_menu = null_blist_node_menu;
@@ -1266,6 +1320,9 @@
 G_DEFINE_DYNAMIC_TYPE_EXTENDED(
         NullProtocol, null_protocol, PURPLE_TYPE_PROTOCOL, 0,
 
+        G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_ACTIONS,
+                                      null_protocol_actions_iface_init)
+
         G_IMPLEMENT_INTERFACE_DYNAMIC(PURPLE_TYPE_PROTOCOL_CLIENT,
                                       null_protocol_client_iface_init)
 

mercurial