[SCM] ktp-common-internals packaging branch, master, updated. debian/15.12.1-2-1839-gf0635e9

Maximiliano Curia maxy at moszumanska.debian.org
Mon May 9 09:06:26 UTC 2016


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/ktp-common-internals.git;a=commitdiff;h=b0a12df

The following commit has been merged in the master branch:
commit b0a12df05bf6bc8c6fe705250711d78a598632ce
Author: Aleix Pol <aleixpol at kde.org>
Date:   Mon Feb 25 15:04:52 2013 +0100

    PinnedContactsModel cleanup
    
    This fixes some problems in the pinned contacts model:
    - Use KTp::ContactPtr instead of Tp::ContactPtr
    - Compare contact pointers instead of id's. Don't make sure that the
    account is the same.
    - Add comment explaining why we need to delay the dataChanged when a
    conversation state changes. Also use the proper index.
    
    REVIEW: 109136
---
 KTp/Declarative/contact-pin.cpp           |  2 +-
 KTp/Declarative/pinned-contacts-model.cpp | 31 +++++++++++++++++++------------
 KTp/Declarative/pinned-contacts-model.h   |  2 +-
 3 files changed, 21 insertions(+), 14 deletions(-)

diff --git a/KTp/Declarative/contact-pin.cpp b/KTp/Declarative/contact-pin.cpp
index 9ad3bcd..7ab0363 100644
--- a/KTp/Declarative/contact-pin.cpp
+++ b/KTp/Declarative/contact-pin.cpp
@@ -46,7 +46,7 @@ bool ContactPin::isPinned() const
 {
     bool ret = false;
     if (m_model && m_account && m_contact) {
-        QModelIndex idx = m_model->indexForContact(m_account, m_contact);
+        QModelIndex idx = m_model->indexForContact(m_contact);
         ret = idx.isValid();
     }
     return ret;
diff --git a/KTp/Declarative/pinned-contacts-model.cpp b/KTp/Declarative/pinned-contacts-model.cpp
index 0c2607c..adff79a 100644
--- a/KTp/Declarative/pinned-contacts-model.cpp
+++ b/KTp/Declarative/pinned-contacts-model.cpp
@@ -40,7 +40,7 @@
 #include <KTp/contact.h>
 
 struct Pin {
-    Tp::ContactPtr contact;
+    KTp::ContactPtr contact;
     Tp::AccountPtr account;
 };
 
@@ -101,7 +101,7 @@ QStringList PinnedContactsModel::state() const
 void PinnedContactsModel::setState(const QStringList &pins)
 {
     Q_ASSERT(pins.size() % 2 == 0 && "the state should be a pair number of account id and contact name");
-    if(!d->accountManager->isReady()) {
+    if (!d->accountManager->isReady()) {
         Tp::PendingReady *r = d->accountManager->becomeReady();
         r->setProperty("newState", pins);
         connect(r, SIGNAL(finished(Tp::PendingOperation*)), SLOT(initializeState(Tp::PendingOperation*)));
@@ -129,11 +129,11 @@ void PinnedContactsModel::pinPendingContacts(Tp::PendingOperation* j)
         kDebug() << "error:" << j->errorName() << j->errorMessage();
 }
 
-QModelIndex PinnedContactsModel::indexForContact(Tp::AccountPtr account, KTp::ContactPtr contact) const
+QModelIndex PinnedContactsModel::indexForContact(const KTp::ContactPtr &contact) const
 {
     int i = 0;
-    Q_FOREACH(const Pin &p, d->m_pins) {
-        if (p.account->uniqueIdentifier() == account->uniqueIdentifier() && p.contact->id() == contact->id()) {
+    Q_FOREACH (const Pin &p, d->m_pins) {
+        if (p.contact == contact) {
             break;
         }
         i++;
@@ -147,7 +147,7 @@ QModelIndex PinnedContactsModel::indexForContact(Tp::AccountPtr account, KTp::Co
 
 void PinnedContactsModel::setPinning(const Tp::AccountPtr &account, const KTp::ContactPtr &contact, bool newState)
 {
-    QModelIndex idx = indexForContact(account, contact);
+    QModelIndex idx = indexForContact(contact);
     bool found = idx.isValid();
     if (newState && !found) {
         Pin p;
@@ -174,14 +174,14 @@ QVariant PinnedContactsModel::data(const QModelIndex &index, int role) const
                     && p.contact->presence().type()!=Tp::ConnectionPresenceTypeUnset
                     && p.contact->presence().type()!=Tp::ConnectionPresenceTypeUnknown;
             case ContactRole:
-                return QVariant::fromValue<KTp::ContactPtr>(KTp::ContactPtr::qObjectCast(p.contact));
+                return QVariant::fromValue<KTp::ContactPtr>(p.contact);
             case AccountRole:
                 return QVariant::fromValue<Tp::AccountPtr>(p.account);
             case AlreadyChattingRole: {
                 bool found = false;
                 for (int i = 0; !found && i < d->convesations->rowCount(); i++) {
                     QModelIndex idx = d->convesations->index(i, 0);
-                    KTp::ContactPtr contact = KTp::ContactPtr::qObjectCast(idx.data(ConversationsModel::ConversationRole).value<Conversation*>()->target()->contact());
+                    KTp::ContactPtr contact = idx.data(ConversationsModel::ConversationRole).value<Conversation*>()->target()->contact();
                     found |= contact->id() == p.contact->id();
                 }
                 return found;
@@ -189,7 +189,10 @@ QVariant PinnedContactsModel::data(const QModelIndex &index, int role) const
             case Qt::DecorationRole: {
                 KIcon icon;
                 if (p.contact) {
-                    icon = KIcon(p.contact->avatarData().fileName);
+                    QString file = p.contact->avatarData().fileName;
+                    if (!file.isEmpty()) {
+                        icon = KIcon(file);
+                    }
                 }
                 if (icon.isNull()) {
                     icon = KIcon(QLatin1String("im-user"));
@@ -265,10 +268,14 @@ void PinnedContactsModel::conversationsStateChanged(const QModelIndex &parent, i
 {
     for (int i = start; i <= end; i++) {
         QModelIndex idx = d->convesations->index(i, 0, parent);
-        KTp::ContactPtr contact = KTp::ContactPtr::qObjectCast(idx.data(ConversationsModel::ConversationRole).value<Conversation*>()->target()->contact());
+        Conversation* conv = idx.data(ConversationsModel::ConversationRole).value<Conversation*>();
+        KTp::ContactPtr contact = conv->target()->contact();
         Q_FOREACH(const Pin &p, d->m_pins) {
-            if (p.contact->id() == contact->id())
-                QMetaObject::invokeMethod(this, "dataChanged", Qt::QueuedConnection, Q_ARG(QModelIndex, idx), Q_ARG(QModelIndex, idx));
+            if (p.contact == contact) {
+                QModelIndex contactIdx = indexForContact(p.contact);
+                //We need to delay the dataChanged until the next event loop, when endRowsRemoved has been called
+                QMetaObject::invokeMethod(this, "dataChanged", Qt::QueuedConnection, Q_ARG(QModelIndex, contactIdx), Q_ARG(QModelIndex, contactIdx));
+            }
         }
     }
 }
diff --git a/KTp/Declarative/pinned-contacts-model.h b/KTp/Declarative/pinned-contacts-model.h
index 216c517..7f01961 100644
--- a/KTp/Declarative/pinned-contacts-model.h
+++ b/KTp/Declarative/pinned-contacts-model.h
@@ -51,7 +51,7 @@ class PinnedContactsModel : public QAbstractListModel
     virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
 
     Q_SLOT void setPinning(const Tp::AccountPtr &account, const KTp::ContactPtr &contact, bool newState);
-    QModelIndex indexForContact(Tp::AccountPtr account, KTp::ContactPtr contact) const;
+    QModelIndex indexForContact(const KTp::ContactPtr &contact) const;
 
     ConversationsModel* conversationsModel() const;
     void setConversationsModel(ConversationsModel *model);

-- 
ktp-common-internals packaging



More information about the pkg-kde-commits mailing list