Ignore:
Timestamp:
Jan 25, 2010, 5:03:17 PM (16 years ago)
Author:
Dmitry A. Kuminov
Message:

gui: DnD: Replaced r470 with a better solution (simpler and doesn't report a dummy mime type "" in the dropped mime data -- for compatibility with other platforms).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/gui/kernel/qmime_pm.cpp

    r470 r471  
    365365        return formats;
    366366
    367     if (qstrcmp(formats, "DRF_NULL") == 0) {
    368         // special case, see QPMMimeAnyMime::dragWorkerFor()
    369         formats = "<DRM_NULL," + formats + ">";
    370     } else {
    371         // DRM_SHAREDMEM comes first to prevent native DRM_OS2FILE
    372         // rendering on the target side w/o involving the source.
    373         // Also, we add <DRM_SHAREDMEM,DRF_POINTERDATA> just like WPS does it
    374         // (however, it doesn't help when dropping objects to it -- WPS still
    375         // chooses DRM_OS2FILE).
    376         formats = "(DRM_SHAREDMEM,DRM_OS2FILE)x(" + formats + "),"
    377                   "<DRM_SHAREDMEM,DRF_POINTERDATA>";
    378     }
     367    // DRM_SHAREDMEM comes first to prevent native DRM_OS2FILE
     368    // rendering on the target side w/o involving the source.
     369    // Also, we add <DRM_SHAREDMEM,DRF_POINTERDATA> just like WPS does it
     370    // (however, it doesn't help when dropping objects to it -- WPS still
     371    // chooses DRM_OS2FILE).
     372    formats = "(DRM_SHAREDMEM,DRM_OS2FILE)x(" + formats + "),"
     373              "<DRM_SHAREDMEM,DRF_POINTERDATA>";
    379374
    380375    DEBUG(() << "DefaultDragWorker: formats" << formats
     
    832827    if (!provider)
    833828        return ret;
    834 
    835     if (mimeType.isEmpty()) {
    836         // special case, see QPMMimeAnyMime::dropWorkerFor()
    837         return ret;
    838     }
    839829
    840830    QByteArray drf = provider->drf(mimeType);
     
    11271117                                             Provider *provider)
    11281118{
    1129     // note: as a special case, mimeType may be null (see
    1130     // QPMCoopDragWorker::collectWorkers())
    1131 
    1132     Q_ASSERT(provider);
    1133     if (provider && !d->exclusive) {
     1119    Q_ASSERT(!mimeType.isEmpty() && provider);
     1120    if (!mimeType.isEmpty() && provider && !d->exclusive) {
    11341121        // ensure there are no dups (several providers for the same mime)
    11351122        if (!d->providerFor(mimeType))
     
    13041291{
    13051292    ULONG cf = WinAddAtom(WinQuerySystemAtomTable(), mime.toLocal8Bit());
     1293    if (!cf) {
    13061294#ifndef QT_NO_DEBUG
    1307     if (!cf)
    13081295        qWarning("QPMMime: WinAddAtom failed with 0x%lX",
    13091296                 WinGetLastError(NULLHANDLE));
    13101297#endif
     1298        return 0;
     1299    }
    13111300
    13121301    return cf;
     
    27342723                                               QString &type, QString &ext)
    27352724{
    2736     if (qstrcmp(drf, "DRF_NULL") == 0) {
    2737         // special case (see QPMMimeAnyMime::dragWorkerFor())
    2738         type = QString::null;
    2739     } else {
    2740         // file type = mime
    2741         type = format(drf);
    2742         Q_ASSERT(!type.isEmpty());
    2743     }
     2725    // file type = mime
     2726    type = format(drf);
     2727    Q_ASSERT(!type.isEmpty());
    27442728
    27452729    // no way to determine the extension
     
    27752759                                                   QMimeData *mimeData)
    27762760{
    2777     if (mimeType.isEmpty()) {
    2778         // special case: QMimeData with no formats() (see
    2779         // QPMCoopDragWorker::collectWorkers())
    2780         Q_ASSERT(!mimeData->formats().count());
    2781         // add an exclusive provider with a special format DRF_NULL. Note that
    2782         // any attemt to render this format should fail so we don't expect
    2783         // AnyDragProvider::format()/provide() to be actually called.
    2784         DefaultDragWorker *defWorker = defaultExclDragWorker();
    2785         defWorker->addProvider(QByteArray("DRF_NULL"), &anyDragProvider);
    2786         return defWorker;
    2787     }
    2788 
    27892761    ULONG cf = cfMap.value(mimeType);
    27902762    if (!cf)
     
    28162788        DefaultDropWorker *defWorker = defaultDropWorker();
    28172789        bool atLeastOneSupported = false;
    2818 
    2819         if (qstrcmp(queryHSTR(item->hstrRMF), "<DRM_NULL,DRF_NULL>") == 0) {
    2820             // special case: QMimeData with no formats() (see
    2821             // QPMCoopDragWorker::collectWorkers()), use a special MIME format
    2822             // value of null.  Note that any attemt to retrieve data in this
    2823             // format should fail so we don't expect AnyDropProvider::drf()/
    2824             // provide() to be actually called.
    2825             defWorker->addProvider(QString::null, &anyDropProvider);
    2826             return defWorker;
    2827         }
    28282790
    28292791        // check that we support one of DRMs and the format is CF_hhhhhhh
     
    29022864    if (atomStr.startsWith(mimePrefix)) {
    29032865        // the format represents the mime type we can recognize
     2866        // increase the reference count
     2867        ULONG cf = QPMMime::registerMimeType(atomStr);
     2868        Q_ASSERT(cf == format);
    29042869        // extract the real mime type (w/o our prefix)
    29052870        mime = atomStr.mid(mimePrefix.size());
    2906         Q_ASSERT(!mime.isEmpty());
    29072871        if (!mime.isEmpty()) {
    2908             // increase the reference count (will decrease on destruction)
    2909             ULONG cf = QPMMime::registerMimeType(atomStr);
    2910             Q_ASSERT(cf == format);
    29112872            cfMap[mime] = cf;
    29122873            mimeMap[cf] = mime;
Note: See TracChangeset for help on using the changeset viewer.