DummyPlugin: fix events emits for call-removed, origin-*

This fixes this two issues:
- Emit the events origin-removed, origin-added when required.

- Remove call immediately when disconnected and emit events:
  By using `g_idle_add ()` we can't be sure when the call is actually
  removed and could stay potentionaly for evere, as long the main loop is
  busy. This can lead to unexpected behavior. If the calls shouldn't be
  freed then it's required to increase the ref count. This is similar how
  the `remove` event works in a `GtkContainer`.
This commit is contained in:
Julian Sparber
2020-03-20 18:28:52 +01:00
committed by Julian Sparber
parent 113dbbba88
commit 389e772069
2 changed files with 28 additions and 34 deletions

View File

@@ -135,10 +135,19 @@ get_property (GObject *object,
static void
dispose (GObject *object)
{
gpointer origin;
GList *next;
CallsDummyProvider *self = CALLS_DUMMY_PROVIDER (object);
g_list_free_full (self->origins, g_object_unref);
self->origins = NULL;
while (self->origins != NULL) {
origin = self->origins->data;
next = self->origins->next;
g_list_free_1 (self->origins);
self->origins = next;
g_signal_emit_by_name (self, "origin-removed", origin);
g_object_unref (origin);
}
G_OBJECT_CLASS (calls_dummy_provider_parent_class)->dispose (object);
}
@@ -181,8 +190,10 @@ void
calls_dummy_provider_add_origin (CallsDummyProvider *self,
const gchar *name)
{
self->origins = g_list_append (self->origins,
calls_dummy_origin_new (name));
CallsDummyOrigin *origin = calls_dummy_origin_new (name);
self->origins = g_list_append (self->origins, origin);
g_signal_emit_by_name (CALLS_PROVIDER (self), "origin-added", CALLS_ORIGIN (origin));
}