[SCM] ktp-contact-list packaging branch, master, updated. debian/15.12.1-2-1070-g6c56f91
Maximiliano Curia
maxy at moszumanska.debian.org
Sat May 28 00:06:32 UTC 2016
Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-contact-list.git;a=commitdiff;h=1161925
The following commit has been merged in the master branch:
commit 11619254779d3c3ea56b254316fe19f86b3c6312
Author: David Edmundson <kde at davidedmundson.co.uk>
Date: Fri May 27 15:57:57 2011 +0100
Replace passing round QModelIndexes with ContactModelItem* this fixes various crashes when using proxy models.
Reviewed by Martin Klapetek
BUG: 274148
BUG: 274160
REVIEW: 101448
---
accounts-model.cpp | 30 ++---------
accounts-model.h | 6 +--
contact-overlays.cpp | 21 ++++++--
contact-overlays.h | 15 +++---
main-widget.cpp | 144 ++++++++++++++++++++-------------------------------
main-widget.h | 9 ++--
6 files changed, 91 insertions(+), 134 deletions(-)
diff --git a/accounts-model.cpp b/accounts-model.cpp
index c342c5b..47fc697 100644
--- a/accounts-model.cpp
+++ b/accounts-model.cpp
@@ -224,34 +224,12 @@ QVariant AccountsModel::data(const QModelIndex &index, int role) const
return mPriv->node(index)->data(role);
}
-Tp::AccountPtr AccountsModel::accountForIndex(const QModelIndex &index) const
-{
- TreeNode *accountNode = mPriv->node(index);
- AccountsModelItem *item = qobject_cast<AccountsModelItem *>(accountNode);
- if (item) {
- return item->account();
- } else {
- return Tp::AccountPtr();
- }
-}
-
-Tp::ContactPtr AccountsModel::contactForIndex(const QModelIndex& index) const
-{
- TreeNode *contactNode = mPriv->node(index);
- ContactModelItem *item = qobject_cast<ContactModelItem *>(contactNode);
- if (item) {
- return item->contact();
- } else {
- return Tp::ContactPtr();
- }
-}
-Tp::AccountPtr AccountsModel::accountForContactIndex(const QModelIndex& index) const
+Tp::AccountPtr AccountsModel::accountForContactItem(ContactModelItem *contactItem) const
{
- TreeNode *contactNode = mPriv->node(index);
- AccountsModelItem *item = qobject_cast<AccountsModelItem*>(contactNode->parent());
- if (item) {
- return item->account();
+ AccountsModelItem *accountItem = qobject_cast<AccountsModelItem*>(contactItem->parent());
+ if (accountItem) {
+ return accountItem->account();
} else {
return Tp::AccountPtr();
}
diff --git a/accounts-model.h b/accounts-model.h
index 0eda7f4..96e8994 100644
--- a/accounts-model.h
+++ b/accounts-model.h
@@ -32,6 +32,8 @@
#include "accounts-model-item.h"
+class ContactModelItem;
+
class AccountsModel : public QAbstractItemModel
{
Q_OBJECT
@@ -93,10 +95,8 @@ public:
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
virtual QVariant data(const QModelIndex &index, int role) const;
- Tp::AccountPtr accountForIndex(const QModelIndex &index) const;
- Tp::ContactPtr contactForIndex(const QModelIndex &index) const;
- Tp::AccountPtr accountForContactIndex(const QModelIndex &index) const;
+ Tp::AccountPtr accountForContactItem(ContactModelItem* contactItem) const;
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
diff --git a/contact-overlays.cpp b/contact-overlays.cpp
index ef85634..07a93b3 100644
--- a/contact-overlays.cpp
+++ b/contact-overlays.cpp
@@ -26,6 +26,7 @@
#include <KDebug>
#include "accounts-model.h"
+#include "contact-model-item.h"
class TextChannelContactOverlay::Button : public ContactViewHoverButton
{
@@ -113,7 +114,10 @@ void TextChannelContactOverlay::slotClicked(bool checked)
QModelIndex index = button()->index();
if (index.isValid()) {
- emit activated(index);
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (contactItem) {
+ emit activated(contactItem);
+ }
}
}
@@ -214,7 +218,10 @@ void AudioChannelContactOverlay::slotClicked(bool checked)
QModelIndex index = button()->index();
if (index.isValid()) {
- emit activated(index);
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (contactItem) {
+ emit activated(contactItem);
+ }
}
}
@@ -315,7 +322,10 @@ void VideoChannelContactOverlay::slotClicked(bool checked)
QModelIndex index = button()->index();
if (index.isValid()) {
- emit activated(index);
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (contactItem) {
+ emit activated(contactItem);
+ }
}
}
@@ -416,7 +426,10 @@ void FileTransferContactOverlay::slotClicked(bool checked)
QModelIndex index = button()->index();
if (index.isValid()) {
- emit activated(index);
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (contactItem) {
+ emit activated(contactItem);
+ }
}
}
diff --git a/contact-overlays.h b/contact-overlays.h
index 88acbda..cad1b03 100644
--- a/contact-overlays.h
+++ b/contact-overlays.h
@@ -27,6 +27,8 @@
#include "contact-delegate-overlay.h"
#include "contact-view-hover-button.h"
+class ContactModelItem;
+
class TextChannelContactOverlay : public HoverButtonDelegateOverlay
{
Q_OBJECT
@@ -39,8 +41,7 @@ public Q_SLOTS:
virtual void setActive(bool active);
Q_SIGNALS:
-
- void activated(const QModelIndex index);
+ void activated(ContactModelItem *contactItem);
protected:
@@ -67,15 +68,13 @@ class AudioChannelContactOverlay : public HoverButtonDelegateOverlay
Q_OBJECT
public:
-
AudioChannelContactOverlay(QObject* parent);
public Q_SLOTS:
virtual void setActive(bool active);
Q_SIGNALS:
-
- void activated(const QModelIndex& index);
+ void activated(ContactModelItem *contactItem);
protected:
@@ -109,8 +108,7 @@ public Q_SLOTS:
virtual void setActive(bool active);
Q_SIGNALS:
-
- void activated(const QModelIndex& index);
+ void activated(ContactModelItem *contactItem);
protected:
@@ -144,8 +142,7 @@ public Q_SLOTS:
virtual void setActive(bool active);
Q_SIGNALS:
-
- void activated(const QModelIndex& index);
+ void activated(ContactModelItem *contactItem);
protected:
diff --git a/main-widget.cpp b/main-widget.cpp
index 4b7bfd4..217ca05 100644
--- a/main-widget.cpp
+++ b/main-widget.cpp
@@ -497,33 +497,18 @@ void MainWidget::onContactListDoubleClick(const QModelIndex& index)
}
else {
kDebug() << "Text chat requested for index" << index;
- startTextChannel(index);
+ startTextChannel(index.data(AccountsModel::ItemRole).value<ContactModelItem*>());
}
}
-void MainWidget::startTextChannel(const QModelIndex &index)
+void MainWidget::startTextChannel(ContactModelItem *contactItem)
{
- if (! index.isValid()) {
- return;
- }
-
- QModelIndex realIndex = m_modelFilter->mapToSource(index);
- Tp::ContactPtr contact;
-
- if (m_groupContactsAction->isChecked()) {
- contact = m_groupsModel->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
- } else {
- contact = m_model->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
- }
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
kDebug() << "Requesting chat for contact" << contact->alias();
- Tp::AccountPtr account;
- if (m_groupContactsAction->isChecked()) {
- account = qobject_cast<AccountsModelItem*>(m_groupsModel->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->parent())->account();
- } else {
- account = m_model->accountForContactIndex(realIndex);
- }
+ Tp::AccountPtr account = m_model->accountForContactItem(contactItem);
Tp::PendingChannelRequest* channelRequest = account->ensureTextChat(contact,
QDateTime::currentDateTime(),
@@ -532,18 +517,14 @@ void MainWidget::startTextChannel(const QModelIndex &index)
this, SLOT(slotGenericOperationFinished(Tp::PendingOperation*)));
}
-void MainWidget::startAudioChannel(const QModelIndex& index)
+void MainWidget::startAudioChannel(ContactModelItem *contactItem)
{
- if (! index.isValid()) {
- return;
- }
-
- QModelIndex realIndex = m_modelFilter->mapToSource(index);
- Tp::ContactPtr contact = m_model->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
kDebug() << "Requesting audio for contact" << contact->alias();
- Tp::AccountPtr account = m_model->accountForContactIndex(realIndex);
+ Tp::AccountPtr account = m_model->accountForContactItem(contactItem);
Tp::PendingChannelRequest* channelRequest = account->ensureStreamedMediaAudioCall(contact,
QDateTime::currentDateTime(),
@@ -552,18 +533,14 @@ void MainWidget::startAudioChannel(const QModelIndex& index)
this, SLOT(slotGenericOperationFinished(Tp::PendingOperation*)));
}
-void MainWidget::startVideoChannel(const QModelIndex& index)
+void MainWidget::startVideoChannel(ContactModelItem *contactItem)
{
- if (! index.isValid()) {
- return;
- }
-
- QModelIndex realIndex = m_modelFilter->mapToSource(index);
- Tp::ContactPtr contact = m_model->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
kDebug() << "Requesting video for contact" << contact->alias();
- Tp::AccountPtr account = m_model->accountForContactIndex(realIndex);
+ Tp::AccountPtr account = m_model->accountForContactItem(contactItem);
Tp::PendingChannelRequest* channelRequest = account->ensureStreamedMediaVideoCall(contact, true,
QDateTime::currentDateTime(),
@@ -573,18 +550,14 @@ void MainWidget::startVideoChannel(const QModelIndex& index)
}
-void MainWidget::startFileTransferChannel(const QModelIndex &index)
+void MainWidget::startFileTransferChannel(ContactModelItem *contactItem)
{
- if (! index.isValid()) {
- return;
- }
-
- QModelIndex realIndex = m_modelFilter->mapToSource(index);
- Tp::ContactPtr contact = m_model->data(realIndex, AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
kDebug() << "Requesting file transfer for contact" << contact->alias();
- Tp::AccountPtr account = m_model->accountForContactIndex(realIndex);
+ Tp::AccountPtr account = m_model->accountForContactItem(contactItem);
QString filename = KFileDialog::getOpenFileName(KUrl(), // TODO Remember directory
QString(),
@@ -658,17 +631,17 @@ void MainWidget::addOverlayButtons()
connect(textOverlay, SIGNAL(overlayHidden()),
m_delegate, SLOT(reshowStatusMessageSlot()));
- connect(textOverlay, SIGNAL(activated(QModelIndex)),
- this, SLOT(startTextChannel(QModelIndex)));
+ connect(textOverlay, SIGNAL(activated(ContactModelItem*)),
+ this, SLOT(startTextChannel(ContactModelItem*)));
- connect(fileOverlay, SIGNAL(activated(QModelIndex)),
- this, SLOT(startFileTransferChannel(QModelIndex)));
+ connect(fileOverlay, SIGNAL(activated(ContactModelItem*)),
+ this, SLOT(startFileTransferChannel(ContactModelItem*)));
- connect(audioOverlay, SIGNAL(activated(QModelIndex)),
- this, SLOT(startAudioChannel(QModelIndex)));
+ connect(audioOverlay, SIGNAL(activated(ContactModelItem*)),
+ this, SLOT(startAudioChannel(ContactModelItem*)));
- connect(videoOverlay, SIGNAL(activated(QModelIndex)),
- this, SLOT(startVideoChannel(QModelIndex)));
+ connect(videoOverlay, SIGNAL(activated(ContactModelItem*)),
+ this, SLOT(startVideoChannel(ContactModelItem*)));
connect(this, SIGNAL(enableOverlays(bool)),
textOverlay, SLOT(setActive(bool)));
@@ -735,12 +708,7 @@ void MainWidget::onCustomContextMenuRequested(const QPoint &)
contact = item.value<ContactModelItem*>()->contact();
- Tp::AccountPtr account;
- if (m_groupContactsAction->isChecked()) {
- account = qobject_cast<AccountsModelItem*>(m_groupsModel->data(m_modelFilter->mapToSource(index), AccountsModel::ItemRole).value<ContactModelItem*>()->parent())->account();
- } else {
- account = m_model->accountForContactIndex(m_modelFilter->mapToSource(index));
- }
+ Tp::AccountPtr account = m_model->accountForContactItem(item.value<ContactModelItem*>());
if (account.isNull()) {
kDebug() << "Account is nulled";
@@ -851,16 +819,10 @@ void MainWidget::onCustomContextMenuRequested(const QPoint &)
void MainWidget::slotAddContactToGroupTriggered()
{
QModelIndex index = m_contactsListView->currentIndex();
- Tp::ContactPtr contact;
- if (m_groupContactsAction->isChecked()) {
- contact = m_groupsModel->data(m_modelFilter->mapToSource(index), AccountsModel::ItemRole).value<ContactModelItem*>()->contact();
- } else {
- contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
- }
- if (contact.isNull()) {
- kDebug() << "Contact is nulled";
- return;
- }
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
QAction *action = qobject_cast<QAction*>(sender());
if (!action) {
@@ -887,12 +849,10 @@ void MainWidget::slotAddContactToGroupTriggered()
void MainWidget::slotBlockContactTriggered()
{
QModelIndex index = m_contactsListView->currentIndex();
- Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
- if (contact.isNull()) {
- kDebug() << "Contact is nulled";
- return;
- }
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
Tp::PendingOperation *operation = contact->block(true);
connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
@@ -902,12 +862,10 @@ void MainWidget::slotBlockContactTriggered()
void MainWidget::slotDeleteContact()
{
QModelIndex index = m_contactsListView->currentIndex();
- Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
+ ContactModelItem* contactItem = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
- if (contact.isNull()) {
- kDebug() << "Contact is null";
- return;
- }
+ Q_ASSERT(contactItem);
+ Tp::ContactPtr contact = contactItem->contact();
QList<Tp::ContactPtr>contactList;
contactList.append(contact);
@@ -946,7 +904,10 @@ void MainWidget::slotStartTextChat()
return;
}
- startTextChannel(index);
+ ContactModelItem* item = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (item) {
+ startTextChannel(item);
+ }
}
void MainWidget::slotStartAudioChat()
@@ -957,7 +918,10 @@ void MainWidget::slotStartAudioChat()
return;
}
- startAudioChannel(index);
+ ContactModelItem* item = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (item) {
+ startAudioChannel(item);
+ }
}
void MainWidget::slotStartVideoChat()
@@ -967,8 +931,10 @@ void MainWidget::slotStartVideoChat()
kDebug() << "Invalid index provided.";
return;
}
-
- startVideoChannel(index);
+ ContactModelItem* item = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (item) {
+ startVideoChannel(item);
+ }
}
void MainWidget::slotStartFileTransfer()
@@ -979,17 +945,19 @@ void MainWidget::slotStartFileTransfer()
return;
}
- startFileTransferChannel(index);
+ ContactModelItem* item = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ if (item) {
+ startFileTransferChannel(item);
+ }
}
void MainWidget::slotUnblockContactTriggered()
{
QModelIndex index = m_contactsListView->currentIndex();
- Tp::ContactPtr contact = m_model->contactForIndex(m_modelFilter->mapToSource(index));
- if (contact.isNull()) {
- kDebug() << "Contact is nulled";
- return;
- }
+ ContactModelItem* item = index.data(AccountsModel::ItemRole).value<ContactModelItem*>();
+ Q_ASSERT(item);
+
+ Tp::ContactPtr contact = item->contact();
Tp::PendingOperation *operation = contact->block(false);
connect(operation, SIGNAL(finished(Tp::PendingOperation*)),
diff --git a/main-widget.h b/main-widget.h
index 90a65fb..96f228e 100644
--- a/main-widget.h
+++ b/main-widget.h
@@ -42,6 +42,7 @@ class AccountFilterModel;
class ContactDelegate;
class FilterBar;
class KJob;
+class ContactModelItem;
class MainWidget : public KMainWindow, Ui::MainWindow
{
@@ -86,10 +87,10 @@ public Q_SLOTS:
void selectAvatarFromAccount(const QString &accountUID);
void selectAvatarFromAccount();
void loadAvatarFromFile();
- void startTextChannel(const QModelIndex &index);
- void startFileTransferChannel(const QModelIndex &index);
- void startAudioChannel(const QModelIndex &index);
- void startVideoChannel(const QModelIndex &index);
+ void startTextChannel(ContactModelItem *contactItem);
+ void startFileTransferChannel(ContactModelItem *contactItem);
+ void startAudioChannel(ContactModelItem *contactItem);
+ void startVideoChannel(ContactModelItem *contactItem);
void onCustomContextMenuRequested(const QPoint &point);
void onGroupContacts(bool enabled);
--
ktp-contact-list packaging
More information about the pkg-kde-commits
mailing list