[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