[ekiga] Presence: Make sure the Ekiga::Cluster are destroyed properly on quit.
- From: Damien Sandras <dsandras src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] Presence: Make sure the Ekiga::Cluster are destroyed properly on quit.
- Date: Sun, 15 Mar 2015 15:45:20 +0000 (UTC)
commit 6e9a106d39b9bb7f521c99117ee7878658bdae3c
Author: Damien Sandras <dsandras seconix com>
Date: Sun Feb 8 13:07:48 2015 +0100
Presence: Make sure the Ekiga::Cluster are destroyed properly on quit.
We were binding shared_ptr to the Cluster objects signals.
That means that the shared_ptr are garbage collected
at a later stage, at least with boost::signals2, which is not what we
want. One solution would be to use weak_ptr's. However, we are not
really using the Cluster share_ptr in any of our callbacks, so
simplifying the signals signature seems to be a better idea.
Signals relay was also simplified, useless callbacks have been removed.
lib/engine/gui/gtk-frontend/roster-view-gtk.cpp | 36 +++++----------
lib/engine/presence/presence-core.cpp | 55 +++--------------------
lib/engine/presence/presence-core.h | 25 +++--------
3 files changed, 23 insertions(+), 93 deletions(-)
---
diff --git a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
index 499f39f..26bf56f 100644
--- a/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
+++ b/lib/engine/gui/gtk-frontend/roster-view-gtk.cpp
@@ -271,7 +271,6 @@ static bool visit_heaps (RosterViewGtk* self,
* PRE : /
*/
static void on_heap_added (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap);
/* DESCRIPTION : Called when the heap_updated signal has been emitted
@@ -279,7 +278,6 @@ static void on_heap_added (RosterViewGtk* self,
* PRE : /
*/
static void on_heap_updated (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap);
@@ -291,7 +289,6 @@ static void on_heap_updated (RosterViewGtk* self,
* PRE : /
*/
static void on_heap_removed (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap);
@@ -300,7 +297,6 @@ static void on_heap_removed (RosterViewGtk* self,
* PRE : /
*/
static bool visit_presentities (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity);
@@ -312,7 +308,6 @@ static bool visit_presentities (RosterViewGtk* self,
* PRE : A valid Heap.
*/
static void on_presentity_added (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity);
@@ -323,7 +318,6 @@ static void on_presentity_added (RosterViewGtk* self,
* PRE : A valid Heap.
*/
static void on_presentity_updated (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity);
@@ -334,7 +328,6 @@ static void on_presentity_updated (RosterViewGtk* self,
* PRE : A valid Heap.
*/
static void on_presentity_removed (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity);
@@ -962,7 +955,7 @@ visit_heaps (RosterViewGtk* self,
Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap)
{
- on_heap_added (self, cluster, heap);
+ on_heap_added (self, heap);
return true;
}
@@ -1021,7 +1014,6 @@ on_account_updated (Ekiga::AccountPtr account,
static void
on_heap_added (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap)
{
boost::signals2::connection conn;
@@ -1043,13 +1035,12 @@ on_heap_added (RosterViewGtk* self,
self->priv->connections.add (conn);
}
- on_heap_updated (self, cluster, heap);
- heap->visit_presentities (boost::bind (&visit_presentities, self, cluster, heap, _1));
+ on_heap_updated (self, heap);
+ heap->visit_presentities (boost::bind (&visit_presentities, self, heap, _1));
}
static void
on_heap_updated (RosterViewGtk* self,
- G_GNUC_UNUSED Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap)
{
gchar *heap_name = NULL;
@@ -1070,7 +1061,6 @@ on_heap_updated (RosterViewGtk* self,
static void
on_heap_removed (RosterViewGtk* self,
- G_GNUC_UNUSED Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap)
{
GtkTreeIter iter;
@@ -1109,18 +1099,16 @@ on_heap_removed (RosterViewGtk* self,
static bool
visit_presentities (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity)
{
- on_presentity_added (self, cluster, heap, presentity);
+ on_presentity_added (self, heap, presentity);
return true;
}
static void
on_presentity_added (RosterViewGtk* self,
- G_GNUC_UNUSED Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity)
{
@@ -1271,7 +1259,6 @@ on_presentity_added (RosterViewGtk* self,
static void
on_presentity_updated (RosterViewGtk* self,
- Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity)
{
@@ -1289,7 +1276,7 @@ on_presentity_updated (RosterViewGtk* self,
groups.push_back (_("Unsorted"));
// This makes sure we are in all groups where we should
- on_presentity_added (self, cluster, heap, presentity);
+ on_presentity_added (self, heap, presentity);
// Now let's remove from all the others
roster_view_gtk_find_iter_for_heap (self, heap, &heap_iter);
@@ -1330,7 +1317,6 @@ on_presentity_updated (RosterViewGtk* self,
static void
on_presentity_removed (RosterViewGtk* self,
- G_GNUC_UNUSED Ekiga::ClusterPtr cluster,
Ekiga::HeapPtr heap,
Ekiga::PresentityPtr presentity)
{
@@ -1765,17 +1751,17 @@ roster_view_gtk_new (boost::shared_ptr<Ekiga::PresenceCore> pcore)
/* Presence */
conn = pcore->cluster_added.connect (boost::bind (&on_cluster_added, self, _1));
self->priv->connections.add (conn);
- conn = pcore->heap_added.connect (boost::bind (&on_heap_added, self, _1, _2));
+ conn = pcore->heap_added.connect (boost::bind (&on_heap_added, self, _1));
self->priv->connections.add (conn);
- conn = pcore->heap_updated.connect (boost::bind (&on_heap_updated, self, _1, _2));
+ conn = pcore->heap_updated.connect (boost::bind (&on_heap_updated, self, _1));
self->priv->connections.add (conn);
- conn = pcore->heap_removed.connect (boost::bind (&on_heap_removed, self, _1, _2));
+ conn = pcore->heap_removed.connect (boost::bind (&on_heap_removed, self, _1));
self->priv->connections.add (conn);
- conn = pcore->presentity_added.connect (boost::bind (&on_presentity_added, self, _1, _2, _3));
+ conn = pcore->presentity_added.connect (boost::bind (&on_presentity_added, self, _1, _2));
self->priv->connections.add (conn);
- conn = pcore->presentity_updated.connect (boost::bind (&on_presentity_updated, self, _1, _2, _3));
+ conn = pcore->presentity_updated.connect (boost::bind (&on_presentity_updated, self, _1, _2));
self->priv->connections.add (conn);
- conn = pcore->presentity_removed.connect (boost::bind (&on_presentity_removed, self, _1, _2, _3));
+ conn = pcore->presentity_removed.connect (boost::bind (&on_presentity_removed, self, _1, _2));
self->priv->connections.add (conn);
conn = pcore->questions.connect (boost::bind (&on_handle_questions, self, _1));
self->priv->connections.add (conn);
diff --git a/lib/engine/presence/presence-core.cpp b/lib/engine/presence/presence-core.cpp
index 988e6e4..8fd85ca 100644
--- a/lib/engine/presence/presence-core.cpp
+++ b/lib/engine/presence/presence-core.cpp
@@ -49,12 +49,12 @@ Ekiga::PresenceCore::add_cluster (ClusterPtr cluster)
clusters.insert (cluster);
cluster_added (cluster);
conns.add (cluster->updated.connect (boost::ref (updated)));
- conns.add (cluster->heap_added.connect (boost::bind (&Ekiga::PresenceCore::on_heap_added, this, _1,
cluster)));
- conns.add (cluster->heap_updated.connect (boost::bind (&Ekiga::PresenceCore::on_heap_updated, this, _1,
cluster)));
- conns.add (cluster->heap_removed.connect (boost::bind (&Ekiga::PresenceCore::on_heap_removed, this, _1,
cluster)));
- conns.add (cluster->presentity_added.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_added,
this, _1, _2, cluster)));
- conns.add (cluster->presentity_updated.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_updated,
this, _1, _2, cluster)));
- conns.add (cluster->presentity_removed.connect (boost::bind (&Ekiga::PresenceCore::on_presentity_removed,
this, _1, _2, cluster)));
+ conns.add (cluster->heap_added.connect (boost::bind (boost::ref (heap_added), _1)));
+ conns.add (cluster->heap_updated.connect (boost::bind (boost::ref (heap_updated), _1)));
+ conns.add (cluster->heap_removed.connect (boost::bind (boost::ref (heap_removed), _1)));
+ conns.add (cluster->presentity_added.connect (boost::bind (boost::ref (presentity_added), _1, _2)));
+ conns.add (cluster->presentity_updated.connect (boost::bind (boost::ref (presentity_updated), _1, _2)));
+ conns.add (cluster->presentity_removed.connect (boost::bind (boost::ref (presentity_removed), _1, _2)));
cluster->questions.connect (boost::ref (questions));
updated ();
@@ -79,49 +79,6 @@ Ekiga::PresenceCore::visit_clusters (boost::function1<bool, ClusterPtr > visitor
go_on = visitor (*iter);
}
-void Ekiga::PresenceCore::on_heap_added (HeapPtr heap,
- ClusterPtr cluster)
-{
- heap_added (cluster, heap);
-}
-
-void
-Ekiga::PresenceCore::on_heap_updated (HeapPtr heap,
- ClusterPtr cluster)
-{
- heap_updated (cluster, heap);
-}
-
-void
-Ekiga::PresenceCore::on_heap_removed (HeapPtr heap, ClusterPtr cluster)
-{
- heap_removed (cluster, heap);
-}
-
-void
-Ekiga::PresenceCore::on_presentity_added (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster)
-{
- presentity_added (cluster, heap, presentity);
-}
-
-void
-Ekiga::PresenceCore::on_presentity_updated (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster)
-{
- presentity_updated (cluster, heap, presentity);
-}
-
-void
-Ekiga::PresenceCore::on_presentity_removed (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster)
-{
- presentity_removed (cluster, heap, presentity);
-}
-
void
Ekiga::PresenceCore::add_presence_fetcher (boost::shared_ptr<PresenceFetcher> fetcher)
{
diff --git a/lib/engine/presence/presence-core.h b/lib/engine/presence/presence-core.h
index 22c22bb..e912db1 100644
--- a/lib/engine/presence/presence-core.h
+++ b/lib/engine/presence/presence-core.h
@@ -174,32 +174,19 @@ namespace Ekiga
* and heap_removed from the given Cluster.
*
*/
- boost::signals2::signal<void(ClusterPtr , HeapPtr )> heap_added;
- boost::signals2::signal<void(ClusterPtr , HeapPtr )> heap_updated;
- boost::signals2::signal<void(ClusterPtr , HeapPtr )> heap_removed;
+ boost::signals2::signal<void(HeapPtr)> heap_added;
+ boost::signals2::signal<void(HeapPtr)> heap_updated;
+ boost::signals2::signal<void(HeapPtr)> heap_removed;
/** Those signals are forwarding the presentity_added, presentity_updated
* and presentity_removed from the given Heap of the given Cluster.
*/
- boost::signals2::signal<void(ClusterPtr , HeapPtr , PresentityPtr )> presentity_added;
- boost::signals2::signal<void(ClusterPtr , HeapPtr , PresentityPtr )> presentity_updated;
- boost::signals2::signal<void(ClusterPtr , HeapPtr , PresentityPtr )> presentity_removed;
+ boost::signals2::signal<void(HeapPtr, PresentityPtr)> presentity_added;
+ boost::signals2::signal<void(HeapPtr, PresentityPtr)> presentity_updated;
+ boost::signals2::signal<void(HeapPtr, PresentityPtr)> presentity_removed;
private:
-
std::set<ClusterPtr > clusters;
- void on_heap_added (HeapPtr heap, ClusterPtr cluster);
- void on_heap_updated (HeapPtr heap, ClusterPtr cluster);
- void on_heap_removed (HeapPtr heap, ClusterPtr cluster);
- void on_presentity_added (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster);
- void on_presentity_updated (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster);
- void on_presentity_removed (HeapPtr heap,
- PresentityPtr presentity,
- ClusterPtr cluster);
/*** API to help presentities get presence ***/
public:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]