diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-05-05 17:44:49 +0100 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-05-05 17:44:49 +0100 |
commit | 08a09215bfd734bb797661822000d4dce36e1b23 (patch) | |
tree | 09e0d319b4260f3f687754b926bb18925dd74b8f | |
parent | 53bbd7de157f869d36edc40f73a317467e88df29 (diff) | |
download | telepathy-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.c | 34 | ||||
-rw-r--r-- | mission-control-plugins/dispatch-operation-policy.h | 14 | ||||
-rw-r--r-- | tests/twisted/mcp-plugin.c | 6 |
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->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 |