diff --git a/core/squawk.cpp b/core/squawk.cpp index c8d84e6..c8570b7 100644 --- a/core/squawk.cpp +++ b/core/squawk.cpp @@ -310,6 +310,9 @@ void Core::Squawk::removeAccountRequest(const QString& name) } Account* acc = itr->second; + if (acc->getState() != Shared::disconnected) { + acc->disconnect(); + } for (Accounts::const_iterator aItr = accounts.begin(); aItr != accounts.end(); ++aItr) { if (*aItr == acc) { @@ -319,7 +322,6 @@ void Core::Squawk::removeAccountRequest(const QString& name) } amap.erase(itr); - delete acc; QString path(QStandardPaths::writableLocation(QStandardPaths::CacheLocation)); path += "/" + name; @@ -327,4 +329,5 @@ void Core::Squawk::removeAccountRequest(const QString& name) dir.removeRecursively(); emit removeAccount(name); + acc->deleteLater(); } diff --git a/ui/accounts.cpp b/ui/accounts.cpp index 44da73f..6123c98 100644 --- a/ui/accounts.cpp +++ b/ui/accounts.cpp @@ -35,8 +35,8 @@ void Accounts::onAccountAccepted() { Account* acc = static_cast(sender()); QMap map = acc->value(); - const Models::Account* mAcc = model->getAccount(m_ui->tableView->selectionModel()->selectedRows().at(0).row()); if (editing) { + const Models::Account* mAcc = model->getAccount(m_ui->tableView->selectionModel()->selectedRows().at(0).row()); emit changeAccount(mAcc->getName(), map); } else { emit newAccount(map); diff --git a/ui/conversation.cpp b/ui/conversation.cpp index 6c2cb4f..a29ea23 100644 --- a/ui/conversation.cpp +++ b/ui/conversation.cpp @@ -67,7 +67,6 @@ Conversation::Conversation(Models::Contact* p_contact, QWidget* parent): Conversation::~Conversation() { - disconnect(contact, SIGNAL(childChanged(Models::Item*, int, int)), this, SLOT(onContactChanged(Models::Item*, int, int))); } void Conversation::setName(const QString& name) diff --git a/ui/models/contact.cpp b/ui/models/contact.cpp index 1e4e7dc..a37a4eb 100644 --- a/ui/models/contact.cpp +++ b/ui/models/contact.cpp @@ -132,8 +132,9 @@ void Models::Contact::removePresence(const QString& name) qDebug() << "an attempt to remove non existing presence " << name << " from the contact " << jid << " of account " << getAccountName() << ", skipping"; } else { Presence* pr = itr.value(); - presences.erase(itr); removeChild(pr->row()); + presences.erase(itr); + pr->deleteLater(); } } diff --git a/ui/models/roster.cpp b/ui/models/roster.cpp index d472433..26796da 100644 --- a/ui/models/roster.cpp +++ b/ui/models/roster.cpp @@ -164,7 +164,7 @@ QModelIndex Models::Roster::parent (const QModelIndex& child) const Item *parentItem = childItem->parentItem(); if (parentItem == root) { - return QModelIndex(); + return createIndex(0, 0, parentItem); } return createIndex(parentItem->row(), 0, parentItem); @@ -455,6 +455,7 @@ void Models::Roster::onChildIsAboutToBeRemoved(Models::Item* parent, int first, if (parent != root) { row = parent->row(); } + qDebug() << "Removing row" << parent->child(first)->getName() << "from" << parent->getName() << "index is" << first; beginRemoveRows(createIndex(row, 0, parent), first, last); } @@ -525,6 +526,7 @@ void Models::Roster::removeAccount(const QString& account) int index = acc->row(); root->removeChild(index); accountsModel->removeAccount(index); + accounts.erase(itr); std::multimap::const_iterator cItr = contacts.begin(); while (cItr != contacts.end()) { @@ -548,5 +550,5 @@ void Models::Roster::removeAccount(const QString& account) } } - delete acc; + acc->deleteLater(); } diff --git a/ui/squawk.cpp b/ui/squawk.cpp index 52419dd..bf194fb 100644 --- a/ui/squawk.cpp +++ b/ui/squawk.cpp @@ -199,7 +199,7 @@ void Squawk::onRosterItemDoubleClicked(const QModelIndex& item) conv->show(); if (res.size() > 0) { - itr->second->setPalResource(res); + conv->setPalResource(res); } } }