From 5afc29a2b5b52b2ac36a7e0ba083bb450acd8b83 Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage <emmanuel.lepage@savoirfairelinux.com> Date: Thu, 31 May 2012 11:39:51 -0400 Subject: [PATCH] [ #11731 ] Fix visual glitch when hang up, harden against 0 participant conference --- kde/src/CallView.cpp | 18 +++++++----------- kde/src/lib/CallModel.hpp | 2 ++ kde/src/widgets/CallTreeItem.cpp | 3 +++ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/kde/src/CallView.cpp b/kde/src/CallView.cpp index 20829835d6..92e2b03733 100644 --- a/kde/src/CallView.cpp +++ b/kde/src/CallView.cpp @@ -86,7 +86,8 @@ CallView::CallView(QWidget* parent) : QTreeWidget(parent),m_pActiveOverlay(0),m_ } foreach(Call* active, SFLPhone::model()->getConferenceList()) { - addConference(active); + if (qobject_cast<Call*>(active)) //As of May 2012, the deamon still produce fake conferences + addConference(active); } //User Interface even @@ -557,10 +558,6 @@ void CallView::destroyCall(Call* toDestroy) SFLPhone::model()->getIndex(toDestroy)->parent()->removeChild(SFLPhone::model()->getIndex(toDestroy)); if (parent->childCount() == 0) /*This should never happen, but it does*/ takeTopLevelItem(indexOfTopLevelItem(parent)); - else if (parent->childCount() == 1) { - addTopLevelItem(extractItem(parent->child(0))); - takeTopLevelItem(indexOfTopLevelItem(parent)); - } //TODO make sure it just never happen and remove this logic code } else kDebug() << "Call not found"; @@ -649,8 +646,6 @@ bool CallView::conferenceChanged(Call* conf) { if (!dynamic_cast<Call*>(conf)) return false; kDebug() << "Conference changed"; - //if (!SFLPhone::model()->conferenceChanged(confId, state)) - // return false; CallManagerInterface& callManager = CallManagerInterfaceSingleton::getInstance(); QStringList callList = callManager.getParticipantList(conf->getConfId()); @@ -666,10 +661,11 @@ bool CallView::conferenceChanged(Call* conf) kDebug() << "Call " << callId << " does not exist"; } - if (SFLPhone::model()->getIndex(conf)) /*Can happen is the daemon crashed*/ - for (int j =0; j < SFLPhone::model()->getIndex(conf)->childCount();j++) { - if (buffer.indexOf(SFLPhone::model()->getIndex(conf)->child(j)) == -1) - insertItem(extractItem(SFLPhone::model()->getIndex(conf)->child(j))); + QTreeWidgetItem* item = SFLPhone::model()->getIndex(conf); + if (item) /*Can happen if the daemon crashed*/ + for (int j =0; j < item->childCount();j++) { + if (buffer.indexOf(item->child(j)) == -1) + insertItem(extractItem(item->child(j))); } Q_ASSERT_X(SFLPhone::model()->getIndex(conf)->childCount() == 0,"changing conference","A conference can't have no participants"); diff --git a/kde/src/lib/CallModel.hpp b/kde/src/lib/CallModel.hpp index 89c8893aa7..5bd00bb6ce 100644 --- a/kde/src/lib/CallModel.hpp +++ b/kde/src/lib/CallModel.hpp @@ -785,6 +785,8 @@ CALLMODEL_TEMPLATE bool CALLMODEL_T::updateWidget (Call* call, CallWidget va CALLMODEL_TEMPLATE bool CALLMODEL_T::updateIndex (Call* call, Index value ) { updateCommon(call); + if (!m_sPrivateCallList_call[call]) + return false; m_sPrivateCallList_call[call]->index = value ; m_sPrivateCallList_index[value] = m_sPrivateCallList_call[call] ; return true; diff --git a/kde/src/widgets/CallTreeItem.cpp b/kde/src/widgets/CallTreeItem.cpp index 4076381b5a..c76787ffaa 100644 --- a/kde/src/widgets/CallTreeItem.cpp +++ b/kde/src/widgets/CallTreeItem.cpp @@ -92,6 +92,9 @@ Call* CallTreeItem::call() const ///Set the call item void CallTreeItem::setCall(Call *call) { + if (!call) + return; + m_pItemCall = call; setAcceptDrops(true); -- GitLab