Refactoring of the accountContainer logic
Before:
- RingMainWindow has an unique_ptr to an AccountContainer
accountContainer_.
- each view / secondary class has its own *copy* of the account
container pointer (given by ringmainwindow using
accountContainer_.get()).
- each time the reference to the struct Info is updated,
accountContainer_ has to be reset()-ed and and the account
container re-created by the RingMainWindow. This makes *all*
copies of the account container pointer invalid (hence all
view / secondary classes trying to access the account container
before getting updated perform use-after-free / NULL pointer
dereference).
- These copies have to be manually updated ! (well, currently they
are not updated at all)
After:
- RingMainWindow has a pointer to a struct Info from LRC.
- Each view / secondary class has a pointer pointing to
the struct Info pointer of RingMainWindow
- Each time the reference to the struct Info is updated, the
RingMainWindow updates its pointer. Since secondary classes and
views hold a pointer to this pointer, they are automatically
updated and there is no dangling pointer anymore.
This requires no lrc side changes.
Change-Id: I1329721920a3d42ad623f9fd7202b43700713eed
Reviewed-by: Sebastien Blin <sebastien.blin@savoirfairelinux.com>
Reviewed-by: Guillaume Roguez <guillaume.roguez@savoirfairelinux.com>
diff --git a/src/incomingcallview.h b/src/incomingcallview.h
index d33612f..9214dee 100644
--- a/src/incomingcallview.h
+++ b/src/incomingcallview.h
@@ -25,8 +25,9 @@
#include <gtk/gtk.h>
// client
-#include "accountcontainer.h"
+#include "api/account.h"
#include "webkitchatcontainer.h"
+#include "accountinfopointer.h"
namespace lrc
{
@@ -53,7 +54,7 @@
GType incoming_call_view_get_type (void) G_GNUC_CONST;
GtkWidget *incoming_call_view_new (WebKitChatContainer* view,
- AccountContainer* accountContainer,
+ AccountInfoPointer const & accountInfo,
lrc::api::conversation::Info* conversation);
lrc::api::conversation::Info incoming_call_view_get_conversation (IncomingCallView*);