static void example_echo_channel_close (ExampleEchoChannel *self) { GObject *object = (GObject *) self; if (!self->priv->closed) { TpHandle first_sender; /* The manager wants to be able to respawn the channel if it has pending * messages. When respawned, the channel must have the initiator set * to the contact who sent us those messages (if it isn't already), * and the messages must be marked as having been rescued so they * don't get logged twice. */ if (tp_text_mixin_has_pending_messages (object, &first_sender)) { if (self->priv->initiator != first_sender) { self->priv->initiator = first_sender; } tp_text_mixin_set_rescued (object); } else { /* No pending messages, so it's OK to really close */ self->priv->closed = TRUE; } tp_svc_channel_emit_closed (self); } }
static void channel_close (TpSvcChannel *iface, DBusGMethodInvocation *context) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (iface); if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } tp_svc_channel_return_from_close (context); }
static void example_callable_media_channel_close (ExampleCallableMediaChannel *self, TpHandle actor, TpChannelGroupChangeReason reason) { if (self->priv->progress != PROGRESS_ENDED) { TpIntSet *everyone; self->priv->progress = PROGRESS_ENDED; if (actor == self->group.self_handle) { const gchar *send_reason; /* In a real protocol these would be some sort of real protocol * construct, like an XMPP error stanza or a SIP error code */ switch (reason) { case TP_CHANNEL_GROUP_CHANGE_REASON_BUSY: send_reason = "<user-is-busy/>"; break; case TP_CHANNEL_GROUP_CHANGE_REASON_NO_ANSWER: send_reason = "<no-answer/>"; break; default: send_reason = "<call-terminated/>"; } g_message ("SIGNALLING: send: Terminating call: %s", send_reason); } everyone = tp_intset_new_containing (self->priv->handle); tp_intset_add (everyone, self->group.self_handle); tp_group_mixin_change_members ((GObject *) self, "", NULL /* nobody added */, everyone /* removed */, NULL /* nobody locally pending */, NULL /* nobody remotely pending */, actor, reason); tp_intset_destroy (everyone); g_signal_emit (self, signals[SIGNAL_CALL_TERMINATED], 0); tp_svc_channel_emit_closed (self); } }
static void dispose (GObject *object) { TpTestsTextChannelGroup *self = TP_TESTS_TEXT_CHANNEL_GROUP (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { tp_svc_channel_emit_closed (self); } ((GObjectClass *) tp_tests_text_channel_group_parent_class)->dispose (object); }
static void dispose (GObject *object) { ExampleEchoChannel *self = EXAMPLE_ECHO_CHANNEL (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) example_echo_channel_parent_class)->dispose (object); }
static void dispose (GObject *object) { ExampleContactListBase *self = EXAMPLE_CONTACT_LIST_BASE (object); if (self->priv->disposed) return; self->priv->disposed = TRUE; if (!self->priv->closed) { self->priv->closed = TRUE; tp_svc_channel_emit_closed (self); } ((GObjectClass *) example_contact_list_base_parent_class)->dispose (object); }