ekiga r6352 - in trunk: . lib/engine/presence/skel



Author: dsandras
Date: Tue Jun  3 19:27:47 2008
New Revision: 6352
URL: http://svn.gnome.org/viewvc/ekiga?rev=6352&view=rev

Log:
Use a pointer instead of a reference in the callback. Otherwise sigc++
makes a copy of the class content and we see old state being
republished again when a registration event occurs instead of seeing
the new state.


Modified:
   trunk/ChangeLog
   trunk/lib/engine/presence/skel/presence-core.cpp
   trunk/lib/engine/presence/skel/presence-core.h

Modified: trunk/lib/engine/presence/skel/presence-core.cpp
==============================================================================
--- trunk/lib/engine/presence/skel/presence-core.cpp	(original)
+++ trunk/lib/engine/presence/skel/presence-core.cpp	Tue Jun  3 19:27:47 2008
@@ -47,10 +47,11 @@
   Ekiga::CallCore *call_core = dynamic_cast <Ekiga::CallCore *> (core.get ("call-core"));
   Ekiga::PersonalDetails *details = dynamic_cast <Ekiga::PersonalDetails *> (core.get ("personal-details"));
 
-  if (details) 
+  if (details)
     details->personal_details_updated.connect (sigc::mem_fun (this, &Ekiga::PresencePublisher::on_personal_details_updated));
+
   if (call_core)
-    call_core->registration_event.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresencePublisher::on_registration_event), *details));
+    call_core->registration_event.connect (sigc::bind (sigc::mem_fun (this, &Ekiga::PresencePublisher::on_registration_event), details));
 }
 
 
@@ -64,11 +65,12 @@
                                                       std::string /*aor*/,
                                                       Ekiga::CallCore::RegistrationState state,
                                                       std::string /*info*/,
-                                                      Ekiga::PersonalDetails & details)
+                                                      Ekiga::PersonalDetails *details)
 {
   switch (state) {
   case Ekiga::CallCore::Registered:
-    this->publish (details);
+    if (details)
+      this->publish (*details);
     break;
 
   case Ekiga::CallCore::Unregistered:

Modified: trunk/lib/engine/presence/skel/presence-core.h
==============================================================================
--- trunk/lib/engine/presence/skel/presence-core.h	(original)
+++ trunk/lib/engine/presence/skel/presence-core.h	Tue Jun  3 19:27:47 2008
@@ -114,7 +114,7 @@
                                 std::string aor,
                                 Ekiga::CallCore::RegistrationState state,
                                 std::string /*info*/,
-                                Ekiga::PersonalDetails & details);
+                                Ekiga::PersonalDetails *details);
   };
 
   /** Core object for the presence support.
@@ -308,7 +308,6 @@
     /** This chain allows the PresenceCore to present forms to the user
      */
     ChainOfResponsibility<FormRequest*> questions;
-
   };
 
 /**



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]