summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2011-05-05 17:44:49 +0100
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2011-05-05 17:44:49 +0100
commit08a09215bfd734bb797661822000d4dce36e1b23 (patch)
tree09e0d319b4260f3f687754b926bb18925dd74b8f
parent53bbd7de157f869d36edc40f73a317467e88df29 (diff)
downloadtelepathy-mission-control-08a09215bfd734bb797661822000d4dce36e1b23.tar.gz
McpDispatchOperationPolicyIface: make the GInterface into public API
We can stay compatible as long as we don't change or reorder methods: adding methods to the end of a GInterface is considered to be a compatible change.
-rw-r--r--mission-control-plugins/dispatch-operation-policy.c34
-rw-r--r--mission-control-plugins/dispatch-operation-policy.h14
-rw-r--r--tests/twisted/mcp-plugin.c6
3 files changed, 35 insertions, 19 deletions
diff --git a/mission-control-plugins/dispatch-operation-policy.c b/mission-control-plugins/dispatch-operation-policy.c
index b0e2f364..11527533 100644
--- a/mission-control-plugins/dispatch-operation-policy.c
+++ b/mission-control-plugins/dispatch-operation-policy.c
@@ -36,10 +36,7 @@
* #McpDispatchOperationPolicy, then return an instance of that subclass from
* mcp_plugin_ref_nth_object().
*
- * The contents of the #McpDispatchOperationPolicyIface struct are not public,
- * so to provide an implementation of the check method,
- * plugins should call mcp_dispatch_operation_policy_iface_implement_check()
- * from the interface initialization function, like this:
+ * A typical plugin might look like this:
*
* <example><programlisting>
* G_DEFINE_TYPE_WITH_CODE (MyPlugin, my_plugin,
@@ -53,8 +50,7 @@
* cdo_policy_iface_init (McpDispatchOperationPolicyIface *iface,
* gpointer unused G_GNUC_UNUSED)
* {
- * mcp_dispatch_operation_policy_iface_implement_check (iface,
- * my_plugin_check_cdo);
+ * iface-&gt;check = my_plugin_check_cdo;
* }
* </programlisting></example>
*
@@ -64,12 +60,6 @@
#include <mission-control-plugins/mission-control-plugins.h>
-struct _McpDispatchOperationPolicyIface {
- GTypeInterface parent;
-
- void (*check) (McpDispatchOperationPolicy *, McpDispatchOperation *);
-};
-
GType
mcp_dispatch_operation_policy_get_type (void)
{
@@ -102,6 +92,22 @@ mcp_dispatch_operation_policy_get_type (void)
}
/**
+ * McpDispatchOperationPolicyIface:
+ * @parent: the parent type
+ * @check: an implementation of mcp_dispatch_operation_policy_check();
+ * %NULL is equivalent to an implementation that does nothing
+ */
+
+/**
+ * McpDispatchOperationPolicyCb:
+ * @policy: an implementation of this interface, provided by a plugin
+ * @dispatch_operation: an object representing a dispatch operation, i.e.
+ * a bundle of channels being dispatched
+ *
+ * Signature of an implementation of mcp_dispatch_operation_policy_check().
+ */
+
+/**
* mcp_dispatch_operation_policy_check:
* @policy: an implementation of this interface, provided by a plugin
* @dispatch_operation: an object representing a dispatch operation, i.e.
@@ -134,11 +140,13 @@ mcp_dispatch_operation_policy_check (McpDispatchOperationPolicy *policy,
* @iface: the interface
* @impl: an implementation of the virtual method
* mcp_dispatch_operation_policy_check()
+ *
+ * This method is no longer necessary: just set iface->check = impl instead.
*/
void
mcp_dispatch_operation_policy_iface_implement_check (
McpDispatchOperationPolicyIface *iface,
- void (*impl) (McpDispatchOperationPolicy *, McpDispatchOperation *))
+ McpDispatchOperationPolicyCb impl)
{
iface->check = impl;
}
diff --git a/mission-control-plugins/dispatch-operation-policy.h b/mission-control-plugins/dispatch-operation-policy.h
index 8f0f7f4f..d7d8285d 100644
--- a/mission-control-plugins/dispatch-operation-policy.h
+++ b/mission-control-plugins/dispatch-operation-policy.h
@@ -48,13 +48,23 @@ typedef struct _McpDispatchOperationPolicyIface McpDispatchOperationPolicyIface;
GType mcp_dispatch_operation_policy_get_type (void) G_GNUC_CONST;
/* virtual methods */
+
+typedef void (*McpDispatchOperationPolicyCb) (
+ McpDispatchOperationPolicy *policy,
+ McpDispatchOperation *dispatch_operation);
+
void mcp_dispatch_operation_policy_check (McpDispatchOperationPolicy *policy,
McpDispatchOperation *dispatch_operation);
-/* vtable manipulation - the vtable is private to allow for expansion */
void mcp_dispatch_operation_policy_iface_implement_check (
McpDispatchOperationPolicyIface *iface,
- void (*impl) (McpDispatchOperationPolicy *, McpDispatchOperation *));
+ McpDispatchOperationPolicyCb impl);
+
+struct _McpDispatchOperationPolicyIface {
+ GTypeInterface parent;
+
+ McpDispatchOperationPolicyCb check;
+};
G_END_DECLS
diff --git a/tests/twisted/mcp-plugin.c b/tests/twisted/mcp-plugin.c
index 53aa1731..1c31acb8 100644
--- a/tests/twisted/mcp-plugin.c
+++ b/tests/twisted/mcp-plugin.c
@@ -183,8 +183,7 @@ static void
cdo_policy_iface_init (McpDispatchOperationPolicyIface *iface,
gpointer unused G_GNUC_UNUSED)
{
- mcp_dispatch_operation_policy_iface_implement_check (iface,
- test_permission_plugin_check_cdo);
+ iface->check = test_permission_plugin_check_cdo;
}
typedef struct {
@@ -378,8 +377,7 @@ static void
rej_cdo_policy_iface_init (McpDispatchOperationPolicyIface *iface,
gpointer unused G_GNUC_UNUSED)
{
- mcp_dispatch_operation_policy_iface_implement_check (iface,
- test_rejection_plugin_check_cdo);
+ iface->check = test_rejection_plugin_check_cdo;
}
static void