diff --git a/src/Call.cpp b/src/Call.cpp index e09f029a425a2765ee3f5e3f001d77476d7228a9..d700174dda1cbecba349c2566486c3d942a90eda 100644 --- a/src/Call.cpp +++ b/src/Call.cpp @@ -535,6 +535,11 @@ void Call::changeCurrentState(call_state newState) emit isOver(this); } +void Call::sendTextMessage(QString message) +{ + CallManagerInterface& callManager = CallManagerInterfaceSingleton::getInstance(); + callManager.sendTextMessage(m_CallId,message); +} /***************************************************************************** * * diff --git a/src/Call.h b/src/Call.h index 47252d9f60a1bbca1dcfe19c9d7fb985ab513481..4d763bf472382627dd873f99db678a8a7d3891f5 100644 --- a/src/Call.h +++ b/src/Call.h @@ -168,6 +168,7 @@ public: void appendText(const QString& str); void backspaceItemText(); void changeCurrentState(call_state newState); + void sendTextMessage(QString message); private: diff --git a/src/CallModel.cpp b/src/CallModel.cpp index 79acc3b3df532e8ae78b120b7f289b311b003a3b..f172b83aa2f51f51b7cfefb986f58126060291ee 100644 --- a/src/CallModel.cpp +++ b/src/CallModel.cpp @@ -96,7 +96,7 @@ void CallModelBase::on1_changingConference(const QString &confID, const QString { Call* conf = getCall(confID); qDebug() << "Changing conference state" << conf << confID; - if (conf) { + if (conf && dynamic_cast<Call*>(conf)) { //Prevent a race condition between call and conference changeConference(confID, state); emit conferenceChanged(conf); } diff --git a/src/CallModel.h b/src/CallModel.h index adf17e1aecdca377899d6df1190297b5c5997b4e..3346f93d6c3921466fda1f999ee6f14150436004 100644 --- a/src/CallModel.h +++ b/src/CallModel.h @@ -40,9 +40,9 @@ class ContactBackend; typedef QMap<QString, Call*> CallMap; typedef QList<Call*> CallList; -///@class CallModelBase Base class for the central model/frontend -///This class need to exist because template classes can't have signals ans -///slots because Qt MOC generator can't guess the type at precompilation +///@class CallModelBase Base class for the central model/frontend +///This class need to exist because template classes can't have signals and +///slots because Qt MOC generator can't guess the type at precompilation class LIB_EXPORT CallModelBase : public QObject { Q_OBJECT diff --git a/src/CallModel.hpp b/src/CallModel.hpp index dc2973ec62f22aa6faeced08476f9596be68225f..5a1719c43ce2060eb32e96689b96cf5a0fb915e8 100644 --- a/src/CallModel.hpp +++ b/src/CallModel.hpp @@ -736,25 +736,26 @@ template<typename CallWidget, typename Index> CallWidget CallModel<CallWidget,In ///Common set of instruction shared by all gui updater template<typename CallWidget, typename Index> bool CallModel<CallWidget,Index>::updateCommon(Call* call) { - if (!m_sPrivateCallList_call[call]) { + if (!m_sPrivateCallList_call[call] && dynamic_cast<Call*>(call)) { m_sPrivateCallList_call [ call ] = new InternalStruct ; m_sPrivateCallList_call [ call ]->call_real = call ; m_sPrivateCallList_call [ call ]->conference = false ; m_sPrivateCallList_callId [ call->getCallId() ] = m_sPrivateCallList_call[call] ; } + else + return false; return true; } ///Update the widget associated with this call template<typename CallWidget, typename Index> bool CallModel<CallWidget,Index>::updateWidget (Call* call, CallWidget value ) { - updateCommon(call); + if (!updateCommon(call)) return false; m_sPrivateCallList_call[call]->call = value ; m_sPrivateCallList_widget[value] = m_sPrivateCallList_call[call] ; return true; } - ///Update the index associated with this call template<typename CallWidget, typename Index> bool CallModel<CallWidget,Index>::updateIndex (Call* call, Index value ) {