~ubuntu-branches/ubuntu/feisty/psi/feisty

« back to all changes in this revision

Viewing changes to src/contactview.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Stephan Hermann
  • Date: 2005-09-14 16:33:49 UTC
  • mfrom: (2.1.1 sarge)
  • Revision ID: james.westby@ubuntu.com-20050914163349-3zacov4afysz5cw5
Tags: 0.9.3-2ubuntu1
* Sync with debian
* Applied patch to psi.desktop to start psi without gpg-agent use (known
  issue)
* Updated README.Debian

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#include<qinputdialog.h>
31
31
#include<qiconset.h>
32
32
#include<qdragobject.h>
 
33
#include<qfiledialog.h>
33
34
#include"im.h"
34
35
#include"common.h"
35
36
#include"userlist.h"
37
38
#include"psicon.h"
38
39
#include"iconaction.h"
39
40
#include"alerticon.h"
 
41
//#include"avatars.h"
40
42
 
41
43
//----------------------------------------------------------------------------
42
44
// ContactProfile
244
246
        return 0;
245
247
}
246
248
 
 
249
// make a tooltip with account information
 
250
QString ContactProfile::makeTip(bool trim, bool doLinkify) const
 
251
{
 
252
        if (d->cvi)
 
253
                return "<qt> <center> <b>" + d->cvi->text(0) + " " + d->cvi->groupInfo() + "</b> </center>" + d->su.makeBareTip(trim,doLinkify) + "</qt>";
 
254
        else
 
255
                return d->su.makeTip(trim,doLinkify);
 
256
}
 
257
 
247
258
// check for user group
248
259
ContactViewItem *ContactProfile::checkGroup(const QString &name)
249
260
{
296
307
 
297
308
void ContactProfile::updateEntry(const UserListItem &u)
298
309
{
299
 
        Entry *e = findEntry(u.jid());
300
 
        if(!e) {
301
 
                e = new Entry;
302
 
                d->roster.append(e);
303
 
                e->u = u;
 
310
        if (u.isSelf()) {
 
311
                // Update the self item
 
312
                d->su = u;
 
313
 
 
314
                // Show and/or update item if necessary
 
315
                if (d->cv->isShowSelf() || d->su.userResourceList().count() > 1) {
 
316
                        if (d->self) {
 
317
                                updateSelf();
 
318
                        }
 
319
                        else {
 
320
                                addSelf();
 
321
                        }
 
322
                }
 
323
                else {
 
324
                        removeSelf();
 
325
                }
304
326
        }
305
327
        else {
306
 
                e->u = u;
307
 
                removeUnneededContactItems(e);
308
 
 
309
 
                // update remaining items
310
 
                QPtrListIterator<ContactViewItem> it(e->cvi);
311
 
                for(ContactViewItem *i; (i = it.current()); ++it) {
312
 
                        i->setContact(&e->u);
313
 
                        if(!u.isAvailable())
314
 
                                i->stopAnimateNick();
315
 
                }
316
 
        }
317
 
 
318
 
        deferredUpdateGroups();
319
 
        addNeededContactItems(e);
320
 
}
321
 
 
322
 
void ContactProfile::updateSelf(const UserListItem &u)
323
 
{
324
 
        d->su = u;
 
328
                Entry *e = findEntry(u.jid());
 
329
                if(!e) {
 
330
                        e = new Entry;
 
331
                        d->roster.append(e);
 
332
                        e->u = u;
 
333
                }
 
334
                else {
 
335
                        e->u = u;
 
336
                        removeUnneededContactItems(e);
 
337
 
 
338
                        // update remaining items
 
339
                        QPtrListIterator<ContactViewItem> it(e->cvi);
 
340
                        for(ContactViewItem *i; (i = it.current()); ++it) {
 
341
                                i->setContact(&e->u);
 
342
                                if(!u.isAvailable())
 
343
                                        i->stopAnimateNick();
 
344
                        }
 
345
                }
 
346
 
 
347
                deferredUpdateGroups();
 
348
                addNeededContactItems(e);
 
349
        }
 
350
}
 
351
 
 
352
void ContactProfile::updateSelf()
 
353
{
 
354
        if (d->self) {
 
355
                d->self->setContact(&d->su);
 
356
                if(!d->su.isAvailable())
 
357
                        d->self->stopAnimateNick();
 
358
        }
 
359
}
 
360
 
 
361
void ContactProfile::addSelf()
 
362
{
325
363
        if(!d->self) {
326
364
                if(!d->cvi)
327
365
                        return;
328
366
                d->self = new ContactViewItem(&d->su, this, d->cvi);
329
367
        }
330
 
        else {
331
 
                d->self->setContact(&d->su);
332
 
                if(!u.isAvailable())
333
 
                        d->self->stopAnimateNick();
334
 
        }
335
368
}
336
369
 
337
370
void ContactProfile::removeSelf()
338
371
{
339
 
        delete d->self;
340
 
        d->self = 0;
 
372
        if (d->self) {
 
373
                delete d->self;
 
374
                d->self = 0;
 
375
        }
341
376
}
342
377
 
343
378
ContactViewItem *ContactProfile::addContactItem(Entry *e, ContactViewItem *group_item)
797
832
 
798
833
                QPopupMenu *am = new QPopupMenu(&pm);
799
834
                am->insertItem(is->transportStatus("transport", STATUS_ONLINE), tr("Online Users"), 5);
800
 
                am->insertItem(IconsetFactory::icon("psi/sendMessage"), tr("Send server message"), 1);
 
835
                am->insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("Send server message"), 1);
801
836
                am->insertSeparator();
802
 
                am->insertItem(/*IconsetFactory::icon("psi/edit"),*/ tr("Set MOTD"), 2);
803
 
                am->insertItem(/*IconsetFactory::icon("psi/edit/clear"),*/ tr("Update MOTD"), 3);
804
 
                am->insertItem(IconsetFactory::icon("psi/remove"), tr("Delete MOTD"), 4);
 
837
                am->insertItem(/*IconsetFactory::iconPixmap("psi/edit"),*/ tr("Set MOTD"), 2);
 
838
                am->insertItem(/*IconsetFactory::iconPixmap("psi/edit/clear"),*/ tr("Update MOTD"), 3);
 
839
                am->insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Delete MOTD"), 4);
805
840
 
806
841
                QPopupMenu *bm = new QPopupMenu(&pm);
807
842
                bm->insertItem(is->transportStatus("transport", STATUS_ONLINE), tr("Service &Discovery"), 9);
808
843
                bm->insertSeparator();
809
 
                bm->insertItem(IconsetFactory::icon("psi/sendMessage"), tr("New &blank message"), 6);
810
 
                bm->insertItem(IconsetFactory::icon("psi/addContact"), tr("&Add a contact"), 7);
811
 
                bm->insertItem(IconsetFactory::icon("psi/xml"), tr("&XML Console"), 10);
 
844
                bm->insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("New &blank message"), 6);
 
845
                bm->insertItem(IconsetFactory::iconPixmap("psi/addContact"), tr("&Add a contact"), 7);
 
846
                bm->insertItem(IconsetFactory::iconPixmap("psi/xml"), tr("&XML Console"), 10);
812
847
 
813
848
                const int status_start = 16;
814
849
                QPopupMenu *sm = new QPopupMenu(&pm);
826
861
 
827
862
                pm.insertSeparator();
828
863
                pm.insertItem(tr("A&ctions"), bm);
829
 
                pm.insertItem(IconsetFactory::icon("psi/account"), tr("&Modify Account..."), 0);
 
864
                pm.insertItem(IconsetFactory::iconPixmap("psi/account"), tr("&Modify Account..."), 0);
830
865
                pm.insertSeparator();
831
866
                pm.insertItem(tr("&Admin"), am);
832
867
 
882
917
                QString gname = i->groupName();
883
918
                QPopupMenu pm;
884
919
 
885
 
                pm.insertItem(IconsetFactory::icon("psi/sendMessage"), tr("Send message to group"), 0);
 
920
                pm.insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("Send message to group"), 0);
886
921
                if(!option.lockdown.roster) {
887
922
                        // disable if it's not a user group
888
923
                        if(!online || i->groupType() != ContactViewItem::gUser || gname == ContactView::tr("Hidden")) {
895
930
 
896
931
                        d->cv->qa_ren->addTo(&pm);
897
932
                        pm.insertSeparator();
898
 
                        pm.insertItem(IconsetFactory::icon("psi/remove"), tr("Remove group"), 2);
899
 
                        pm.insertItem(IconsetFactory::icon("psi/remove"), tr("Remove group and contacts"), 3);
 
933
                        pm.insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Remove group"), 2);
 
934
                        pm.insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Remove group and contacts"), 3);
900
935
                }
901
936
 
902
937
                if(i->groupType() == ContactViewItem::gAgents) {
974
1009
                bool isPrivate = e ? e->u.isPrivate(): false;
975
1010
                bool isAgent = e ? e->u.isTransport() : false;
976
1011
                bool avail = e ? e->u.isAvailable() : false;
977
 
 
 
1012
                QString groupNameCache = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1013
                
978
1014
                QPopupMenu pm;
979
1015
 
980
1016
                if(!self && !inList && !isPrivate && !option.lockdown.roster) {
981
 
                        pm.insertItem(IconsetFactory::icon("psi/addContact"), tr("Add/Authorize to contact list"), 10);
 
1017
                        pm.insertItem(IconsetFactory::iconPixmap("psi/addContact"), tr("Add/Authorize to contact list"), 10);
982
1018
                        if(!online)
983
1019
                                pm.setItemEnabled(10, false);
984
1020
                        pm.insertSeparator();
1036
1072
                if(!isPrivate)
1037
1073
                        pm.insertItem(tr("Send message to"), s2m, 17);
1038
1074
 
1039
 
                d->cv->qa_chat->setIconSet(IconsetFactory::icon("psi/chat"));
 
1075
                d->cv->qa_chat->setIconSet(IconsetFactory::iconPixmap("psi/chat"));
1040
1076
                d->cv->qa_chat->addTo(&pm);
1041
1077
 
1042
1078
                if(!isPrivate)
1079
1115
 
1080
1116
                if(!isAgent) {
1081
1117
                        pm.insertSeparator();
1082
 
                        pm.insertItem(IconsetFactory::icon("psi/upload"), tr("Send &file"), 23);
 
1118
                        pm.insertItem(IconsetFactory::iconPixmap("psi/upload"), tr("Send &file"), 23);
1083
1119
                        if(!online)
1084
1120
                                pm.setItemEnabled(23, false);
1085
1121
                }
1096
1132
                                if(!online)
1097
1133
                                        gm->setItemEnabled(id, false);
1098
1134
                        }
1099
 
                        pm.insertItem(IconsetFactory::icon("psi/groupChat"), tr("Invite to"), gm, 14);
 
1135
                        pm.insertItem(IconsetFactory::iconPixmap("psi/groupChat"), tr("Invite to"), gm, 14);
1100
1136
                        if(groupchats.isEmpty())
1101
1137
                                pm.setItemEnabled(14, false);
1102
1138
                }
1127
1163
                                        if(e->u.groups().isEmpty())
1128
1164
                                                gm->setItemChecked(8, true);
1129
1165
                                        else
1130
 
                                                g = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1166
                                                g = groupNameCache;
1131
1167
 
1132
1168
                                        int n = 0;
1133
1169
                                        gl.remove(ContactView::tr("Hidden"));
1149
1185
                                        if(g == ContactView::tr("Hidden"))
1150
1186
                                                gm->setItemChecked(n+base_group, true);
1151
1187
                                        gm->insertSeparator();
1152
 
                                        gm->insertItem(IconsetFactory::icon("psi/edit/clear"), tr("&Create new..."), 9);
 
1188
                                        gm->insertItem(IconsetFactory::iconPixmap("psi/edit/clear"), tr("&Create new..."), 9);
1153
1189
                                        pm.insertItem(tr("&Group"), gm, 5);
1154
1190
 
1155
1191
                                        if(!online)
1176
1212
 
1177
1213
                        authm->insertItem(tr("Resend authorization to"), 6);
1178
1214
                        authm->insertItem(tr("Rerequest authorization from"), 11);
1179
 
                        authm->insertItem(IconsetFactory::icon("psi/edit/delete"), tr("Remove authorization from"), 15);
 
1215
                        authm->insertItem(IconsetFactory::iconPixmap("psi/edit/delete"), tr("Remove authorization from"), 15);
1180
1216
 
1181
 
                        pm.insertItem (IconsetFactory::icon("psi/register"), tr("Authorization"), authm, 20);
 
1217
                        pm.insertItem (IconsetFactory::iconPixmap("psi/register"), tr("Authorization"), authm, 20);
1182
1218
                        if(!online)
1183
1219
                                pm.setItemEnabled(20, false);
1184
1220
                }
1195
1231
                        pm.insertSeparator();
1196
1232
                }
1197
1233
 
 
1234
                // Avatars
 
1235
                //QPopupMenu *avpm = new QPopupMenu(&pm);
 
1236
                //d->cv->qa_assignAvatar->addTo(avpm);
 
1237
                //d->cv->qa_clearAvatar->setEnabled(d->pa->avatarFactory()->hasManualAvatar(u->jid()));
 
1238
                //d->cv->qa_clearAvatar->addTo(avpm);
 
1239
                //pm.insertItem(tr("&Avatar"), avpm);
 
1240
                //avpm->setEnabled(option.avatarsEnabled);
 
1241
 
1198
1242
                if(d->pa->psi()->pgp()) {
1199
1243
                        if(u->publicKeyID().isEmpty())
1200
 
                                pm.insertItem(IconsetFactory::icon("psi/keySingle"), tr("Assign Open&PGP key"), 21);
 
1244
                                pm.insertItem(IconsetFactory::iconPixmap("psi/keySingle"), tr("Assign Open&PGP key"), 21);
1201
1245
                        else
1202
 
                                pm.insertItem(IconsetFactory::icon("psi/keySingle"), tr("Unassign Open&PGP key"), 22);
 
1246
                                pm.insertItem(IconsetFactory::iconPixmap("psi/keySingle"), tr("Unassign Open&PGP key"), 22);
1203
1247
                }
1204
1248
 
1205
 
                pm.insertItem(/*IconsetFactory::icon("psi/info"),*/ tr("Check &Status"), 4);
 
1249
                pm.insertItem(/*IconsetFactory::iconPixmap("psi/info"),*/ tr("Check &Status"), 4);
1206
1250
 
1207
 
                pm.insertItem(IconsetFactory::icon("psi/vCard"), tr("User &Info"), 12);
 
1251
                pm.insertItem(IconsetFactory::iconPixmap("psi/vCard"), tr("User &Info"), 12);
1208
1252
 
1209
1253
                if(!isPrivate) {
1210
1254
                        d->cv->qa_hist->addTo(&pm);
1258
1302
                        if(online) {
1259
1303
                                // if we have groups, but we are setting to 'none', then remove that particular group
1260
1304
                                if(!u->groups().isEmpty()) {
1261
 
                                        QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1305
                                        QString gname = groupNameCache;
1262
1306
                                        actionGroupRemove(u->jid(), gname);
1263
1307
                                }
1264
1308
                        }
1283
1327
                                                }
1284
1328
                                        }
1285
1329
                                        if(!found) {
1286
 
                                                QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1330
                                                QString gname = groupNameCache;
1287
1331
                                                actionGroupRemove(u->jid(), gname);
1288
1332
                                                actionGroupAdd(u->jid(), newgroup);
1289
1333
                                                break;
1409
1453
                                if(n == n2) {
1410
1454
                                        // remove the group of this cvi if there is one
1411
1455
                                        if(!u->groups().isEmpty()) {
1412
 
                                                QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1456
                                                //QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
 
1457
                                                QString gname = groupNameCache;
1413
1458
                                                actionGroupRemove(u->jid(), gname);
1414
1459
                                        }
1415
1460
                                        // add the group
1612
1657
        }
1613
1658
}
1614
1659
 
 
1660
void ContactProfile::dragDropFiles(const QStringList &files, ContactViewItem *i)
 
1661
{
 
1662
        if(files.isEmpty() || !d->pa->loggedIn() || i->type() != ContactViewItem::Contact)
 
1663
                return;
 
1664
 
 
1665
        Entry *e = findEntry(i);
 
1666
        if(!e)
 
1667
                return;
 
1668
 
 
1669
        actionSendFiles(e->u.jid(),files);
 
1670
}
1615
1671
 
1616
1672
//----------------------------------------------------------------------------
1617
1673
// ContactView
1728
1784
        v_showAway = true;
1729
1785
        v_showHidden = true;
1730
1786
        v_showAgents = true;
 
1787
        v_showSelf = true;
1731
1788
 
1732
1789
        // animation timer
1733
1790
        d->animTimer = new QTimer(this);
1738
1795
        connect(qa_send, SIGNAL(activated()), SLOT(doSendMessage()));
1739
1796
        qa_ren = new IconAction("", /*"psi/edit/clear",*/ tr("Re&name"), QListView::Key_F2, this);
1740
1797
        connect(qa_ren, SIGNAL(activated()), SLOT(doRename()));
 
1798
        // Avatars
 
1799
        //qa_assignAvatar = new IconAction("", tr("&Assign Avatar"),QKeySequence(), this);
 
1800
        //connect(qa_assignAvatar, SIGNAL(activated()), SLOT(doAssignAvatar()));
 
1801
        //qa_clearAvatar = new IconAction("", tr("&Clear Avatar"), QKeySequence(), this);
 
1802
        //connect(qa_clearAvatar, SIGNAL(activated()), SLOT(doClearAvatar()));
1741
1803
        qa_chat = new IconAction("", "psi/chat", tr("Open &chat window"), QListView::CTRL+QListView::Key_C, this);
1742
1804
        connect(qa_chat, SIGNAL(activated()), SLOT(doOpenChat()));
1743
1805
        qa_hist = new IconAction("", "psi/history", tr("&History"), QListView::CTRL+QListView::Key_H, this);
1795
1857
        QRect r(itemRect(i));
1796
1858
        if(i->type() == ContactViewItem::Contact)
1797
1859
                tip(r, i->u()->makeTip(true, false));
 
1860
        else if(i->type() == ContactViewItem::Profile) {
 
1861
                tip(r, i->contactProfile()->makeTip(true, false));
 
1862
        }
1798
1863
        else
1799
1864
                tip(r, i->text(0) + " " + i->groupInfo());
1800
1865
}
1874
1939
        }
1875
1940
}
1876
1941
 
 
1942
void ContactView::setShowSelf(bool x)
 
1943
{
 
1944
        if (v_showSelf != x) {
 
1945
                v_showSelf = x;
 
1946
                showSelf(v_showSelf);
 
1947
 
 
1948
                QPtrListIterator<ContactProfile> it(d->profiles);
 
1949
                for(ContactProfile *cp; (cp = it.current()); ++it) {
 
1950
                        if (v_showSelf && ! cp->self()) {
 
1951
                                cp->addSelf();
 
1952
                        }
 
1953
                        else if (!v_showSelf && cp->self() && cp->self()->u()->userResourceList().count() <= 1) {
 
1954
                                cp->removeSelf();
 
1955
                        }
 
1956
                }
 
1957
        }
 
1958
}
 
1959
 
 
1960
 
1877
1961
void ContactView::setShowAgents(bool x)
1878
1962
{
1879
1963
        bool oldstate = v_showAgents;
2037
2121
        i->contactProfile()->scRename(i);
2038
2122
}
2039
2123
 
 
2124
// Avatars
 
2125
//void ContactView::doAssignAvatar()
 
2126
//{
 
2127
//      // FIXME: Should check the supported filetypes dynamically
 
2128
//      QString file = QFileDialog::getOpenFileName("", tr("All files (*.png *.jpg *.gif)"), this, 0, tr("Choose an image"));
 
2129
//      if (!file.isNull()) {
 
2130
//              ContactViewItem *i = (ContactViewItem *)selectedItem();
 
2131
//              i->contactProfile()->psiAccount()->avatarFactory()->importManualAvatar(i->u()->jid(),file);
 
2132
//      }
 
2133
//}
 
2134
 
 
2135
//void ContactView::doClearAvatar()
 
2136
//{
 
2137
//      ContactViewItem *i = (ContactViewItem *)selectedItem();
 
2138
//      i->contactProfile()->psiAccount()->avatarFactory()->removeManualAvatar(i->u()->jid());
 
2139
//}
 
2140
 
2040
2141
void ContactView::doEnter()
2041
2142
{
2042
2143
        ContactViewItem *i = (ContactViewItem *)selectedItem();
2107
2208
                return 0;
2108
2209
 
2109
2210
        QDragObject *d = new QTextDrag(i->u()->jid().full(), this);
2110
 
        d->setPixmap(IconsetFactory::icon("status/online"), QPoint(8,8));
 
2211
        d->setPixmap(IconsetFactory::iconPixmap("status/online"), QPoint(8,8));
2111
2212
        return d;
2112
2213
}
2113
2214
 
2129
2230
        }
2130
2231
 
2131
2232
        ~Private() {
2132
 
                if ( icon )
2133
 
                        icon->stop();
2134
2233
        }
2135
2234
 
2136
2235
        void initGroupState() {
2263
2362
 
2264
2363
ContactViewItem::~ContactViewItem()
2265
2364
{
 
2365
        setIcon( 0 );
2266
2366
        delete d;
2267
2367
}
2268
2368
 
2387
2487
                        UserResourceList::ConstIterator it = d->u->priority();
2388
2488
                        if(it != d->u->userResourceList().end()) {
2389
2489
                                if(d->u->isSecure((*it).name())) {
2390
 
                                        const QPixmap &pix = IconsetFactory::icon("psi/cryptoYes");
 
2490
                                        const QPixmap &pix = IconsetFactory::iconPixmap("psi/cryptoYes");
2391
2491
                                        int y = (height() - pix.height()) / 2;
2392
2492
                                        p->drawPixmap(x, y, pix);
2393
2493
                                        x += 24;
2416
2516
                int x = fm.width(text(column)) + (pix ? pix->width() : 0) + 8;
2417
2517
 
2418
2518
                if(d->type == Profile) {
2419
 
                        const QPixmap &pix = d->ssl ? IconsetFactory::icon("psi/cryptoYes") : IconsetFactory::icon("psi/cryptoNo");
 
2519
                        const QPixmap &pix = d->ssl ? IconsetFactory::iconPixmap("psi/cryptoYes") : IconsetFactory::iconPixmap("psi/cryptoNo");
2420
2520
                        int y = (height() - pix.height()) / 2;
2421
2521
                        p->drawPixmap(x, y, pix);
2422
2522
                        x += 24;
2817
2917
                        return false;
2818
2918
        }
2819
2919
 
 
2920
        // Files. Note that the QTextDrag test has to come after QUriDrag.
 
2921
        if (d->type == Contact && QUriDrag::canDecode(m)) {
 
2922
                QStringList l;
 
2923
                if (QUriDrag::decodeLocalFiles(m,l) && !l.isEmpty())
 
2924
                        return true;
 
2925
        }
 
2926
 
2820
2927
        if(!QTextDrag::canDecode(m))
2821
2928
                return false;
 
2929
 
2822
2930
        QString str;
2823
2931
        if(!QTextDrag::decode(m, str))
2824
2932
                return false;
2841
2949
        if(!acceptDrop(i))
2842
2950
                return;
2843
2951
 
2844
 
        QString text;
2845
 
        if(QTextDrag::decode(i, text))
2846
 
                d->cp->dragDrop(text, this);
 
2952
        // Files
 
2953
        if (QUriDrag::canDecode(i)) {
 
2954
                QStringList l;
 
2955
                if (QUriDrag::decodeLocalFiles(i,l) && !l.isEmpty()) {
 
2956
                        d->cp->dragDropFiles(l, this);
 
2957
                        return;
 
2958
                }
 
2959
        }
 
2960
 
 
2961
        // Text
 
2962
        if(QTextDrag::canDecode(i)) {
 
2963
                QString text;
 
2964
                if(QTextDrag::decode(i, text))
 
2965
                        d->cp->dragDrop(text, this);
 
2966
        }
2847
2967
}
2848
2968
 
2849
2969
int ContactViewItem::rtti() const