libpurple/purpleprotocolactions.c

Fri, 29 Jul 2022 01:13:51 -0500

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 29 Jul 2022 01:13:51 -0500
changeset 41460
fccbea158b51
parent 41437
05ac40f0e0c4
child 41960
c8a4853205e3
permissions
-rw-r--r--

Add a get_prefix method to the PurpleProtocolActions interface

This make it much easier for protocol authors to keep track of things, but we
do fall back to using the id of the protocol for the prefix if get_prefix is
not implemented.

Testing Done:
Verified the fallback works, then changed the prefix in the demo protocol plugin and verified everything still functioned.

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

/*
 * Purple - Internet Messaging Library
 * Copyright (C) Pidgin Developers <devel@pidgin.im>
 *
 * Purple is the legal property of its developers, whose names are too numerous
 * to list here.  Please refer to the COPYRIGHT file distributed with this
 * source distribution.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <https://www.gnu.org/licenses/>.
 */

#include "purpleprotocolactions.h"

/******************************************************************************
 * GObject Implementation
 *****************************************************************************/
G_DEFINE_INTERFACE(PurpleProtocolActions, purple_protocol_actions,
                   PURPLE_TYPE_PROTOCOL)

static void
purple_protocol_actions_default_init(PurpleProtocolActionsInterface *iface) {
}

/******************************************************************************
 * Public API
 *****************************************************************************/
const gchar *
purple_protocol_actions_get_prefix(PurpleProtocolActions *actions) {
	PurpleProtocolActionsInterface *iface = NULL;

	g_return_val_if_fail(PURPLE_IS_PROTOCOL_ACTIONS(actions), NULL);

	iface = PURPLE_PROTOCOL_ACTIONS_GET_IFACE(actions);
	if(iface != NULL) {
		if(iface->get_prefix != NULL) {
			return iface->get_prefix(actions);
		} else {
			return purple_protocol_get_id(PURPLE_PROTOCOL(actions));
		}
	}

	return NULL;
}

GActionGroup *
purple_protocol_actions_get_action_group(PurpleProtocolActions *actions,
                                         PurpleConnection *connection)
{
	PurpleProtocolActionsInterface *iface = NULL;

	g_return_val_if_fail(PURPLE_IS_PROTOCOL_ACTIONS(actions), NULL);
	g_return_val_if_fail(PURPLE_IS_CONNECTION(connection), NULL);

	iface = PURPLE_PROTOCOL_ACTIONS_GET_IFACE(actions);
	if(iface != NULL && iface->get_action_group != NULL) {
		return iface->get_action_group(actions, connection);
	}

	return NULL;
}

GMenu *
purple_protocol_actions_get_menu(PurpleProtocolActions *actions)
{
	PurpleProtocolActionsInterface *iface = NULL;

	g_return_val_if_fail(PURPLE_IS_PROTOCOL_ACTIONS(actions), NULL);

	iface = PURPLE_PROTOCOL_ACTIONS_GET_IFACE(actions);
	if(iface != NULL && iface->get_menu != NULL) {
		return iface->get_menu(actions);
	}

	return NULL;
}

mercurial