diff options
author | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2010-08-20 17:31:40 +1000 |
---|---|---|
committer | Danielle Madeley <danielle.madeley@collabora.co.uk> | 2010-08-20 17:31:40 +1000 |
commit | 5354ce2749f7cdf75c0e48b7404371a691510b50 (patch) | |
tree | 8ab4dba5d0099ac0c4bc190b1e28bbe6c40579c5 | |
parent | 217856c2621a79a9d819f0d8efa5803efad1f7d2 (diff) |
Notes on the context delay method
-rw-r--r-- | docs/book/C/channel-dispatcher.xml | 21 | ||||
-rw-r--r-- | docs/examples/glib_mc5_observer/example2.c | 19 |
2 files changed, 37 insertions, 3 deletions
diff --git a/docs/book/C/channel-dispatcher.xml b/docs/book/C/channel-dispatcher.xml index 11ce834..373b873 100644 --- a/docs/book/C/channel-dispatcher.xml +++ b/docs/book/C/channel-dispatcher.xml @@ -929,13 +929,28 @@ <classname>TpHandleChannelsContext</classname>; named after the D-Bus method that triggers the callback. Each context object provides three methods: accept, fail and delay; one of which must be called before - the end of the callback. The Delay method is used if you have further + the end of the callback. + </para> + <para> + The Accept and Fail methods are used to return from the + <methodname>ObserveChannels</methodname> D-Bus method, either + successfully or with an error condition. + </para> + <para> + The Delay method is used if you have further preparation to carry out before ultimately calling either Accept or - Fail. You must reference the context object to hold it outside the + Fail. This is often used for things that need to be done before the + Handler is given the channel, like inspecting the pending message + queue. You must reference the context object to hold it outside the callback. + <xref linkend="ex.channel-dispatcher.clients.impl.tpsimpleobserver"/> + shows an example of using the delay method. </para> - <!-- FIXME: example of Delay --> + <example id="ex.channel-dispatcher.clients.impl.tpsimpleobserver" + file="glib_mc5_observer/example2.c"> + <title>Delaying Response to the Context Object</title> + </example> </sect3> diff --git a/docs/examples/glib_mc5_observer/example2.c b/docs/examples/glib_mc5_observer/example2.c index 15ce7ce..634ade4 100644 --- a/docs/examples/glib_mc5_observer/example2.c +++ b/docs/examples/glib_mc5_observer/example2.c @@ -82,6 +82,19 @@ channel_group_prepared (GObject *channel, static void +channel_invalided (TpProxy *channel, + guint domain, + guint code, + const char *message, + gpointer user_data) +{ + /* release our reference to this channel proxy */ + g_object_unref (channel); +} + + +/* begin ex.channel-dispatcher.clients.impl.tpsimpleobserver */ +static void observe_channels (TpSimpleObserver *observer, TpAccount *account, TpConnection *connection, @@ -116,6 +129,11 @@ observe_channels (TpSimpleObserver *observer, context); increment_pending (context); } + + /* hold a reference to the channel, that we release on invalidation */ + g_object_ref (channel); + g_signal_connect (channel, "invalidated", + G_CALLBACK (channel_invalided), NULL); } /* hold a reference to @context */ @@ -123,6 +141,7 @@ observe_channels (TpSimpleObserver *observer, /* delay responding to @context until our callbacks have finished */ tp_observe_channels_context_delay (context); } +/* end ex.channel-dispatcher.clients.impl.tpsimpleobserver */ int |