Changeset 618 for trunk/dll/collect.c


Ignore:
Timestamp:
Apr 20, 2007, 9:19:03 PM (18 years ago)
Author:
Steven Levine
Message:

Add more drag/drop error checking
Use FreeDragInfoData
Sync with NumItemsToUnhilite AcceptOneDrop GetOneDrop mods

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/collect.c

    r606 r618  
    3333  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
    3434  06 Apr 07 GKY Add some error checking in drag/drop
     35  19 Apr 07 SHL Use FreeDragInfoData.  Add more drag/drop error checks.
    3536
    3637***********************************************************************/
     
    459460      cni.pDragInfo = (PDRAGINFO) mp1;
    460461      li = DoFileDrop(dcd->hwndCnr, NULL, FALSE, MPVOID, MPFROMP(&cni));
    461       if (fExceedPMDrgLimit)
    462         saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
    463                              hwnd,
    464                              GetPString(IDS_ERRORTEXT),
    465                    GetPString(IDS_EXCEEDPMDRGLMT));
     462      if (NumItemsToUnhilite)
     463        saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     464                             hwnd,
     465                             GetPString(IDS_ERRORTEXT),
     466                   GetPString(IDS_EXCEEDPMDRGLMT));
    466467      if (li) {
    467468        li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
     
    21132114          ULONG numitems;
    21142115          USHORT usOperation;
    2115                 APIRET rc;
     2116                APIRET rc;
    21162117
    21172118          pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
     
    21192120          if (!DrgAccessDraginfo(pDInfo)) {
    21202121            Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
    2121                       "%s", GetPString(IDS_DROPERRORTEXT));
    2122             break;
     2122                      "DrgAccessDraginfo");
     2123            return 0;
    21232124          }
    21242125          numitems = DrgQueryDragitemCount(pDInfo);
    21252126          usOperation = pDInfo->usOperation;
    2126           rc = DeleteDragitemStrHandles(pDInfo); //
    2127           if(!rc)
    2128           Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    2129                     "DeleteDragitemStrHandles");
    2130           DrgDeleteDraginfoStrHandles (pDInfo);
    2131           rc = DrgFreeDraginfo(pDInfo);
    2132           if(!rc)
    2133           Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    2134                  "DrgFreeDraginfo");
     2127          FreeDragInfoData(hwnd, pDInfo);
    21352128          saymsg(MB_ENTER | MB_ICONASTERISK,
    21362129                 hwnd,
     
    21542147          PDRAGINFO pDInfo;
    21552148
     2149          // fixme to know why needed
    21562150          pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2157           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO       */
    2158           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
     2151          DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO */
     2152          DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO */
    21592153        }
    21602154        return 0;
     
    21632157      case CN_DRAGOVER:
    21642158        if (mp2) {
    2165           PDRAGITEM pDItem;     /* Pointer to DRAGITEM   */
    2166           PDRAGINFO pDInfo;     /* Pointer to DRAGINFO   */
     2159          PDRAGITEM pDItem;     /* Pointer to DRAGITEM */
     2160          PDRAGINFO pDInfo;     /* Pointer to DRAGINFO */
    21672161          PCNRITEM pci;
    21682162          USHORT uso;
    21692163
    21702164          pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
    2171 //            if(SHORT1FROMMP(mp1) == CN_DRAGAFTER)
    2172           //            pci = NULL;
     2165          // if(SHORT1FROMMP(mp1) == CN_DRAGAFTER)
     2166          //    pci = NULL;
    21732167          pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2174           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO       */
     2168          if (!DrgAccessDraginfo(pDInfo)) {
     2169            Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
     2170                      "DrgAccessDraginfo");
     2171            return (MRFROM2SHORT(DOR_NODROP, 0));       /* Drop not valid */
     2172          }
    21752173          if (pci) {
    21762174            if (pci->rc.flRecordAttr & CRA_SOURCE) {
     
    22052203            }
    22062204          }
    2207           pDItem = DrgQueryDragitemPtr(pDInfo,  /* Access DRAGITEM       */
    2208                                        0);      /* Index to DRAGITEM     */
     2205          pDItem = DrgQueryDragitemPtr(pDInfo,  /* Access DRAGITEM */
     2206                                       0);      /* Index to DRAGITEM */
    22092207          if (DrgVerifyRMF(pDItem,      /* Check valid rendering */
    2210                            DRM_OS2FILE, /* mechanisms and data   */
     2208                           DRM_OS2FILE, /* mechanisms and data */
    22112209                           NULL)) {
    2212             DrgFreeDraginfo(pDInfo);    /* Free DRAGINFO         */
     2210            DrgFreeDraginfo(pDInfo);    /* Free DRAGINFO */
    22132211            if (pci) {
    22142212              if (driveflags[toupper(*pci->szFileName) - 'A'] &
     
    22172215              if (toupper(*pci->szFileName) < 'C')
    22182216                return MRFROM2SHORT(DOR_DROP, DO_COPY);
    2219               return MRFROM2SHORT(DOR_DROP,     /* Return okay to drop   */
     2217              return MRFROM2SHORT(DOR_DROP,     /* Return okay to drop */
    22202218                                  ((fCopyDefault) ? DO_COPY : DO_MOVE));
    22212219            }
    22222220            else
    2223               return MRFROM2SHORT(DOR_DROP,     /* Return okay to drop   */
     2221              return MRFROM2SHORT(DOR_DROP,     /* Return okay to drop */
    22242222                                  DO_COPY);
    22252223          }
    2226           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
    2227         }
    2228         return (MRFROM2SHORT(DOR_NODROP, 0));   /* Drop not valid       */
     2224          DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO */
     2225        }
     2226        return (MRFROM2SHORT(DOR_NODROP, 0));   /* Drop not valid */
    22292227
    22302228      case CN_INITDRAG:
     
    22452243                                 GetPString(IDS_DRAGFILEOBJTEXT));
    22462244              if (DoFileDrag(hwnd, dcd->hwndObject, mp2, NULL, NULL, TRUE)) {
    2247                 if ((fUnHilite && wasemphasized) || fExceedPMDrgLimit)
     2245                if ((fUnHilite && wasemphasized) || NumItemsToUnhilite)
    22482246                  UnHilite(hwnd, TRUE, &dcd->lastselection);
    22492247              }
     
    22602258          ULONG action = UM_ACTION;
    22612259
    2262           li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
    2263           if (fExceedPMDrgLimit)
    2264             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
    2265                                 hwnd,
    2266                                 GetPString(IDS_ERRORTEXT),
    2267                        GetPString(IDS_EXCEEDPMDRGLMT));
     2260          li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     2261          if (NumItemsToUnhilite)
     2262            saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     2263                                hwnd,
     2264                                GetPString(IDS_ERRORTEXT),
     2265                       GetPString(IDS_EXCEEDPMDRGLMT));
    22682266          if (li) {
    22692267            if (!*li->targetpath) {
     
    22852283                li->type = WinDlgBox(HWND_DESKTOP, dcd->hwndParent,
    22862284                                     DropListProc, FM3ModHandle,
    2287                                      DND_FRAME, MPFROMP(&cl));
    2288                 if (li->type == DID_ERROR)
    2289                   Win_Error(DND_FRAME, HWND_DESKTOP, pszSrcFile, __LINE__,
    2290                             "Drag & Drop Dialog");
    2291                 if (!li->type) {
     2285                                     DND_FRAME, MPFROMP(&cl));
     2286                if (li->type == DID_ERROR)
     2287                  Win_Error(DND_FRAME, HWND_DESKTOP, pszSrcFile, __LINE__,
     2288                            "Drag & Drop Dialog");
     2289                if (!li->type) {
    22922290                  FreeListInfo(li);
    22932291                  return 0;
    22942292                }
    22952293                li->list = cl.list;
    2296                 if (!li->list || !li->list[0]) {
     2294                if (!li->list || !li->list[0]) {
    22972295                  FreeListInfo(li);
    22982296                  return 0;
Note: See TracChangeset for help on using the changeset viewer.