Changeset 580 for trunk/src


Ignore:
Timestamp:
Feb 19, 2010, 12:29:57 AM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

gui: Removed qmime.h dependency on private qpmobjectwindow_pm_p.h and on qt_os2.h (which drags in non-portable OS/2 API).

Location:
trunk/src/gui/kernel
Files:
4 edited

Legend:

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

    r564 r580  
    5858
    5959#include "qt_os2.h"
     60#include "private/qpmobjectwindow_pm_p.h"
    6061
    6162//#define QDND_DEBUG // in pair with qmime_pm.cpp
  • trunk/src/gui/kernel/qmime.h

    r561 r580  
    115115*/
    116116
    117 QT_END_NAMESPACE
    118 #include "qt_os2.h"
    119 #if !defined(QT_NO_DRAGANDDROP)
    120 # include "private/qpmobjectwindow_pm_p.h"
    121 #endif
    122 QT_BEGIN_NAMESPACE
     117QT_BEGIN_INCLUDE_NAMESPACE
     118
     119#include "qwindowdefs_pm.h"
     120typedef LHANDLE HSTR;
     121typedef struct _DRAGINFO DRAGINFO;
     122typedef struct _DRAGITEM DRAGITEM;
     123
     124QT_END_INCLUDE_NAMESPACE
    123125
    124126class QPMDragData;
     
    162164    };
    163165
    164     class DefaultDragWorker : public DragWorker, public QPMObjectWindow
     166    class DefaultDragWorker : public DragWorker
    165167    {
    166168    private:
     
    173175        bool isExclusive() const;
    174176        ULONG itemCount() const;
    175         HWND hwnd() const { return QPMObjectWindow::hwnd(); }
     177        HWND hwnd() const;
    176178        QByteArray composeFormatString();
    177179        bool prepare(const char *drm, const char *drf, DRAGITEM *item,
    178180                     ULONG itemIndex);
    179181        void defaultFileType(QString &type, QString &ext);
    180 
    181         // QPMObjectWindow interface
    182         MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2);
    183182
    184183        class Provider
     
    224223    };
    225224
    226     class DefaultDropWorker : public DropWorker, public QPMObjectWindow
     225    class DefaultDropWorker : public DropWorker
    227226    {
    228227    private:
     
    238237        QVariant retrieveData(const QString &mimeType,
    239238                              QVariant::Type preferredType) const;
    240 
    241         // QPMObjectWindow interface
    242         MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2);
    243239
    244240        class Provider
  • trunk/src/gui/kernel/qmime_pm.cpp

    r564 r580  
    6060#include "qdir.h"
    6161
     62#include "qt_os2.h"
     63#include "private/qpmobjectwindow_pm_p.h"
     64
    6265//#define QDND_DEBUG // in pair with qdnd_pm.cpp
    6366
     
    215218//------------------------------------------------------------------------------
    216219
    217 struct QPMMime::DefaultDragWorker::Data
    218 {
    219     Data(bool excl) : exclusive(excl) {}
     220struct QPMMime::DefaultDragWorker::Data : public QPMObjectWindow
     221{
     222    Data(DefaultDragWorker *worker, bool excl) : q(worker), exclusive(excl) {}
    220223
    221224    struct Request
     
    245248    void cleanupRequests();
    246249
     250    // QPMObjectWindow interface
     251    MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2);
     252
    247253    struct DrfProvider
    248254    {
     
    263269    }
    264270
     271    DefaultDragWorker *q;
     272
    265273    const bool exclusive : 1;
    266274    DrfProviderList providers;
     
    283291
    284292QPMMime::DefaultDragWorker::DefaultDragWorker(bool exclusive)
    285     : d(new Data(exclusive))
     293    : d(new Data(this, exclusive))
    286294{
    287295    d->itemCnt = 0;
     
    341349{
    342350    return d->itemCnt;
     351}
     352
     353ULONG QPMMime::DefaultDragWorker::hwnd() const
     354{
     355    return d->hwnd();
    343356}
    344357
     
    433446}
    434447
    435 MRESULT QPMMime::DefaultDragWorker::message(ULONG msg, MPARAM mp1, MPARAM mp2)
     448MRESULT QPMMime::DefaultDragWorker::Data::message(ULONG msg, MPARAM mp1, MPARAM mp2)
    436449{
    437450    if (msg == DM_RENDER) {
     
    439452
    440453        // sanity checks
    441         Q_ASSERT(d->isInitialized());
     454        Q_ASSERT(isInitialized());
    442455        Q_ASSERT(xfer);
    443         if (!d->isInitialized() || !xfer)
     456        if (!isInitialized() || !xfer)
    444457            return (MRESULT)FALSE;
    445458
     
    448461            return (MRESULT)FALSE;
    449462
    450         Data::Request *req = d->requests.value(xfer->pditem->ulItemID);
     463        Data::Request *req = requests.value(xfer->pditem->ulItemID);
    451464
    452465        // check that this item has been prepared (should always be the case
     
    491504    if (msg == WM_USER) {
    492505        // sanity checks
    493         Q_ASSERT(d->isInitialized());
    494         if (!d->isInitialized())
     506        Q_ASSERT(isInitialized());
     507        if (!isInitialized())
    495508            return (MRESULT)FALSE;
    496509
     
    498511
    499512        // sanity checks
    500         Data::Request *req = d->requests.value(itemId);
     513        Data::Request *req = requests.value(itemId);
    501514        Q_ASSERT(req); // prepared
    502515        Q_ASSERT(req->xfer != NULL); // DM_RENDER requested
     
    507520            return (MRESULT)FALSE;
    508521
    509         Q_ASSERT(source() && req->provider && req->index < d->itemCnt);
    510         if (!source() || !req->provider || req->index >= d->itemCnt)
     522        Q_ASSERT(q->source() && req->provider && req->index < itemCnt);
     523        if (!q->source() || !req->provider || req->index >= itemCnt)
    511524            return (MRESULT)FALSE;
    512525
     
    516529                 << "drf" << req->drf.data());
    517530
    518         bool renderOk = false;
    519 
    520         QByteArray allData = source()->data(req->provider->format(req->drf));
     531        bool ok = false;
     532
     533        QByteArray allData = q->source()->data(req->provider->format(req->drf));
    521534        QByteArray itemData;
    522535
    523         renderOk = req->provider->provide(req->drf, allData,
    524                                           req->index, itemData);
    525 
    526         if (renderOk) {
     536        ok = req->provider->provide(req->drf, allData, req->index, itemData);
     537
     538        if (ok) {
    527539            enum DRM { OS2File, SharedMem } drmType;
    528540            if (qstrcmp(req->drm, "DRM_SHAREDMEM") == 0) drmType = SharedMem;
     
    532544                QByteArray renderToName = queryHSTR(req->xfer->hstrRenderToName);
    533545                Q_ASSERT(!renderToName.isEmpty());
    534                 renderOk = !renderToName.isEmpty();
    535                 if (renderOk) {
     546                ok = !renderToName.isEmpty();
     547                if (ok) {
    536548                    DEBUG(() << "DefaultDragWorker: Will write to" << renderToName);
    537549                    QFile file(QFile::decodeName(renderToName));
    538                     renderOk = file.open(QIODevice::WriteOnly);
    539                     if (renderOk) {
     550                    ok = file.open(QIODevice::WriteOnly);
     551                    if (ok) {
    540552                        qint64 written = file.write(itemData, itemData.size());
    541                         renderOk = written == itemData.size();
     553                        ok = written == itemData.size();
    542554                        file.close();
    543                         if (renderOk && req->xfer->pditem->hstrType) {
     555                        if (ok && req->xfer->pditem->hstrType) {
    544556                            // since WPS ignores hstrType, write it manually
    545557                            // to the .TYPE EA of the created file
     
    553565                TID tid;
    554566                bool isSameProcess = false;
    555                 renderOk = WinQueryWindowProcess(req->xfer->hwndClient,
    556                                                  &pid, &tid);
    557                 if (renderOk) {
     567                ok = WinQueryWindowProcess(req->xfer->hwndClient, &pid, &tid);
     568                if (ok) {
    558569                    PPIB ppib = NULL;
    559570                    DosGetInfoBlocks(NULL, &ppib);
     
    568579                                                  OBJ_GIVEABLE | PAG_COMMIT |
    569580                                                  PAG_READ | PAG_WRITE);
    570                     renderOk = rc == 0;
    571                     if (renderOk && !isSameProcess) {
     581                    ok = rc == 0;
     582                    if (ok && !isSameProcess) {
    572583                        rc = DosGiveSharedMem(ptr, pid, PAG_READ);
    573                         renderOk = rc == 0;
     584                        ok = rc == 0;
    574585                    }
    575                     if (renderOk) {
     586                    if (ok) {
    576587                        *(ULONG *) ptr = itemData.size();
    577588                        memcpy(ptr + sizeof (ULONG), itemData.data(),
     
    598609        req->rendered = true;
    599610        // cumulative render result
    600         d->renderOk &= renderOk;
    601 
    602         DEBUG(() << "DefaultDragWorker: renderOk" << renderOk
    603                  << "overall.renderOk" << d->renderOk);
     611        renderOk &= ok;
     612
     613        DEBUG(() << "DefaultDragWorker: ok" << ok
     614                 << "overall.renderOk" << renderOk);
    604615
    605616        // note that we don't allow the target to retry
    606         USHORT reply = renderOk ? DMFL_RENDEROK : DMFL_RENDERFAIL;
     617        USHORT reply = ok ? DMFL_RENDEROK : DMFL_RENDERFAIL;
    607618        DrgPostTransferMsg(req->xfer->hwndClient, DM_RENDERCOMPLETE,
    608619                           req->xfer, reply, 0, false);
     
    633644
    634645        // sanity check (don't assert, see above)
    635         Data::Request *req = d->requests.value(itemId);
     646        Data::Request *req = requests.value(itemId);
    636647        Q_ASSERT(req);
    637648        if (!req)
     
    641652                 << "(id " << itemId << ") provider" << req->provider
    642653                 << "drm" << req->drm << "drf" << req->drf
    643                  << "rendered" << req->rendered << "outdated" << !d->isInitialized());
     654                 << "rendered" << req->rendered << "outdated" << !isInitialized());
    644655
    645656        // proceed further only if it's not an outdated request
    646657        // from the previous DND session
    647         if (d->isInitialized()) {
     658        if (isInitialized()) {
    648659            if (!req->rendered) {
    649660                // we treat cancelling the render request (for any reason)
    650661                // as a failure
    651                 d->renderOk = false;
     662                renderOk = false;
    652663            } else {
    653664                // the overall success is true only if target says Okay
    654                 d->renderOk &= flags == DMFL_TARGETSUCCESSFUL;
     665                renderOk &= flags == DMFL_TARGETSUCCESSFUL;
    655666            }
    656667        }
    657668
    658669        // delete the request
    659         delete d->requests.take(itemId);
     670        delete requests.take(itemId);
    660671
    661672        return (MRESULT)FALSE;
     
    699710//------------------------------------------------------------------------------
    700711
    701 struct QPMMime::DefaultDropWorker::Data
     712struct QPMMime::DefaultDropWorker::Data : public QPMObjectWindow
    702713{
    703714    struct MimeProvider
     
    709720    };
    710721
     722    Data(DefaultDropWorker *worker) : q(worker) {}
     723
     724    // QPMObjectWindow interface
     725    MRESULT message(ULONG msg, MPARAM mp1, MPARAM mp2);
     726
    711727    typedef QList<MimeProvider> MimeProviderList;
    712728
     
    720736    }
    721737
     738    DefaultDropWorker *q;
     739
    722740    bool exclusive : 1;
    723741    MimeProviderList providers;
     
    730748};
    731749
    732 QPMMime::DefaultDropWorker::DefaultDropWorker() : d(new Data())
     750QPMMime::DefaultDropWorker::DefaultDropWorker() : d(new Data(this))
    733751{
    734752    d->exclusive = false;
     
    917935
    918936            xfer->cb = sizeof(DRAGTRANSFER);
    919             xfer->hwndClient = hwnd();
     937            xfer->hwndClient = d->hwnd();
    920938            xfer->ulTargetInfo = (ULONG) info();
    921939            xfer->usOperation = info()->usOperation;
     
    10771095}
    10781096
    1079 MRESULT QPMMime::DefaultDropWorker::message(ULONG msg, MPARAM mp1, MPARAM mp2)
     1097MRESULT QPMMime::DefaultDropWorker::Data::message(ULONG msg, MPARAM mp1, MPARAM mp2)
    10801098{
    10811099    switch (msg) {
    10821100        case DM_RENDERCOMPLETE: {
    10831101            // sanity check
    1084             Q_ASSERT(info());
    1085             if (!info())
     1102            Q_ASSERT(q->info());
     1103            if (!q->info())
    10861104                return (MRESULT)FALSE;
    10871105
    10881106            DEBUG(("DefaultDropWorker: Got DM_RENDERCOMPLETE"));
    1089             d->got_DM_RENDERCOMPLETE = true;
    1090             d->flags_DM_RENDERCOMPLETE = SHORT1FROMMP(mp2);
    1091 
    1092             if (d->sending_DM_RENDER)
     1107            got_DM_RENDERCOMPLETE = true;
     1108            flags_DM_RENDERCOMPLETE = SHORT1FROMMP(mp2);
     1109
     1110            if (sending_DM_RENDER)
    10931111            {
    10941112#ifndef QT_NO_DEBUG
     
    11031121
    11041122            // stop synchronous waiting for DM_RENDERCOMPLETE
    1105             if (d->eventLoop.isRunning())
    1106                 d->eventLoop.exit();
     1123            if (eventLoop.isRunning())
     1124                eventLoop.exit();
    11071125            return (MRESULT)FALSE;
    11081126        }
  • trunk/src/gui/kernel/qwindowdefs_pm.h

    r564 r580  
    5656QT_END_NAMESPACE
    5757
    58 // typedefs to avoid inclusion of qt_os2.h in public headers
     58// common typedefs from os2.h to avoid inclusion of qt_os2.h in public headers
     59typedef unsigned long ULONG;
     60typedef unsigned short USHORT;
    5961typedef unsigned long LHANDLE;
    6062typedef LHANDLE HWND;
Note: See TracChangeset for help on using the changeset viewer.