Changeset 618 for trunk/dll/dircnrs.c


Ignore:
Timestamp:
Apr 20, 2007, 7:19:03 PM (14 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/dircnrs.c

    r606 r618  
    2424  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
    2525  06 Apr 07 GKY Add some error checking in drag/drop
     26  19 Apr 07 SHL Use FreeDragInfoData.  Add more drag/drop error checking.
    2627
    2728***********************************************************************/
     
    386387      switch (msg) {
    387388      case DM_DRAGOVER:
    388         if (AcceptOneDrop(mp1, mp2))
     389        if (AcceptOneDrop(hwnd, mp1, mp2))
    389390          return MRFROM2SHORT(DOR_DROP, DO_MOVE);
    390         return (MRFROM2SHORT(DOR_NODROP, 0));   /* Drop not valid        */
     391        return (MRFROM2SHORT(DOR_NODROP, 0));   /* Drop not valid */
    391392      case DM_DROPHELP:
    392393        DropHelp(mp1, mp2, hwnd, GetPString(IDS_DIRCNRFOLDERDROPHELP));
     
    400401            DrawTargetEmphasis(hwnd, emphasized);
    401402          }
    402           if (GetOneDrop(mp1, mp2, szFrom, sizeof(szFrom)))
     403          if (GetOneDrop(hwnd, mp1, mp2, szFrom, sizeof(szFrom)))
    403404            WinSendMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT),
    404405                                       DIR_CNR),
     
    589590        DoFileDrop(dcd->hwndCnr, dcd->directory, FALSE, MPVOID,
    590591                   MPFROMP(&cni));
    591       if (fExceedPMDrgLimit)
    592         saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
    593                              hwnd,
    594                              GetPString(IDS_ERRORTEXT),
    595                    GetPString(IDS_EXCEEDPMDRGLMT));
     592      if (NumItemsToUnhilite)
     593        saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     594                             hwnd,
     595                             GetPString(IDS_ERRORTEXT),
     596                   GetPString(IDS_EXCEEDPMDRGLMT));
    596597      if (li) {
    597598        li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
     
    26342635
    26352636/*
    2636           case CN_PICKUP:
    2637             return PickUp(hwnd,dcd->hwndObject,mp2);
     2637          case CN_PICKUP:
     2638            return PickUp(hwnd,dcd->hwndObject,mp2);
    26382639*/
    26392640
     
    26942695            Win_Error(hwnd, hwnd, pszSrcFile, __LINE__,
    26952696                      GetPString(IDS_DROPERRORTEXT));
    2696             break;
    2697           }
    2698           numitems = DrgQueryDragitemCount(pDInfo);
    2699           usOperation = pDInfo->usOperation;
    2700           rc = DeleteDragitemStrHandles(pDInfo); //
    2701           if(!rc)
    2702           Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    2703                     "DeleteDragitemStrHandles");
    2704           DrgDeleteDraginfoStrHandles (pDInfo);
    2705           rc = DrgFreeDraginfo(pDInfo);
    2706           if(!rc)
    2707           Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
    2708                  "DrgFreeDraginfo");
    2709           saymsg(MB_ENTER | MB_ICONASTERISK,
    2710                  hwnd,
    2711                  GetPString(IDS_DROPHELPHDRTEXT),
    2712                  GetPString(IDS_DROPHELPTEXT),
    2713                  numitems,
    2714                  &"s"[numitems == 1L],
    2715                  (pci) ? NullStr : GetPString(IDS_NOTEXT),
    2716                  (pci) ? NullStr : " ",
    2717                  (pci) ? pci->szFileName : NullStr,
    2718                  (pci) ? " " : NullStr,
    2719                  GetPString((usOperation == DO_COPY) ?
    2720                             IDS_COPYTEXT :
    2721                             (usOperation == DO_LINK) ?
    2722                             IDS_LINKTEXT : IDS_MOVETEXT));
     2697          }
     2698          else {
     2699            numitems = DrgQueryDragitemCount(pDInfo);
     2700            usOperation = pDInfo->usOperation;
     2701            FreeDragInfoData(hwnd, pDInfo);
     2702            saymsg(MB_ENTER | MB_ICONASTERISK,
     2703                   hwnd,
     2704                   GetPString(IDS_DROPHELPHDRTEXT),
     2705                   GetPString(IDS_DROPHELPTEXT),
     2706                   numitems,
     2707                   &"s"[numitems == 1L],
     2708                   pci ? NullStr : GetPString(IDS_NOTEXT),
     2709                   pci ? NullStr : " ",
     2710                   pci ? pci->szFileName : NullStr,
     2711                   pci ? " " : NullStr,
     2712                   GetPString((usOperation == DO_COPY) ?
     2713                              IDS_COPYTEXT :
     2714                              (usOperation == DO_LINK) ?
     2715                              IDS_LINKTEXT : IDS_MOVETEXT));
     2716          }
    27232717        }
    27242718        return 0;
    27252719
    27262720      case CN_DRAGLEAVE:
    2727 #ifdef NEVER
    2728         if (mp2) {
    2729 
    2730           PDRAGINFO pDInfo;
    2731 
    2732           pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2733           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO       */
    2734           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
    2735         }
    2736 #endif
    27372721        return 0;
    27382722
     
    27412725        if (mp2) {
    27422726
    2743           PDRAGITEM pDItem;     /* Pointer to DRAGITEM   */
    2744           PDRAGINFO pDInfo;     /* Pointer to DRAGINFO   */
     2727          PDRAGITEM pDItem;     /* Pointer to DRAGITEM */
     2728          PDRAGINFO pDInfo;     /* Pointer to DRAGINFO */
    27452729          PCNRITEM pci;
    27462730          USHORT uso;
     
    27482732          pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
    27492733          pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;
    2750           DrgAccessDraginfo(pDInfo);    /* Access DRAGINFO */
     2734          if (!DrgAccessDraginfo(pDInfo)) {
     2735            Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     2736                      "DrgAccessDraginfo");
     2737              return (MRFROM2SHORT(DOR_NEVERDROP, 0));
     2738          }
    27512739          if (*dcd->directory &&
    27522740              (driveflags[toupper(*dcd->directory) - 'A'] &
     
    27542742            DrgFreeDraginfo(pDInfo);
    27552743            return MRFROM2SHORT(DOR_DROP,       /* Return okay to link */
    2756                                 DO_LINK);       /* (compare) only      */
     2744                                DO_LINK);       /* (compare) only */
    27572745          }
    27582746          if (pci) {
     
    27632751            uso = pDInfo->usOperation;
    27642752            if (uso == DO_DEFAULT)
    2765               uso = (fCopyDefault) ? DO_COPY : DO_MOVE;
     2753              uso = fCopyDefault ? DO_COPY : DO_MOVE;
    27662754            if (!(pci->attrFile & FILE_DIRECTORY)) {
    27672755              if (uso != DO_LINK && uso != DO_COPY && uso != DO_MOVE) {
     
    27972785              ((!pci || (pci->attrFile & FILE_DIRECTORY)) &&
    27982786               DrgVerifyRMF(pDItem, DRM_FM2ARCMEMBER, DRF_FM2ARCHIVE))) {
    2799             /* Free DRAGINFO */
    28002787            DrgFreeDraginfo(pDInfo);
    28012788            if (driveflags[toupper(*dcd->directory) - 'A'] &
     
    28042791            if (toupper(*dcd->directory) < 'C')
    28052792              return MRFROM2SHORT(DOR_DROP, DO_COPY);
    2806             return MRFROM2SHORT(DOR_DROP,       /* Return okay to drop  */
     2793            return MRFROM2SHORT(DOR_DROP,       /* Return okay to drop */
    28072794                                ((fCopyDefault) ? DO_COPY : DO_MOVE));
    28082795          }
    2809           DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO         */
    2810         }
    2811         return MRFROM2SHORT(DOR_NODROP, 0);     /* Drop not valid        */
     2796          DrgFreeDraginfo(pDInfo);      /* Free DRAGINFO */
     2797        }
     2798        return MRFROM2SHORT(DOR_NODROP, 0);     /* Drop not valid */
    28122799
    28132800      case CN_INITDRAG:
     
    28302817            }
    28312818            else if (IsRoot(dcd->directory)) {
    2832                 saymsg(MB_ENTER, hwnd, GetPString(IDS_ERRORTEXT),
    2833                        GetPString(IDS_CANTDRAGROOTDIR));
     2819                saymsg(MB_ENTER, hwnd, GetPString(IDS_ERRORTEXT),
     2820                       GetPString(IDS_CANTDRAGROOTDIR));
    28342821              break;
    28352822            }
     
    28452832                           mp2,
    28462833                           NULL,
    2847                            (pci) ? NULL : dcd->directory,
    2848                            (pci) ? TRUE : FALSE)) {
    2849               if ((pci && fUnHilite && wasemphasized) || fExceedPMDrgLimit)
     2834                           pci ? NULL : dcd->directory,
     2835                           pci ? TRUE : FALSE)) {
     2836              if ((pci && fUnHilite && wasemphasized) || NumItemsToUnhilite) {
    28502837                UnHilite(hwnd, TRUE, &dcd->lastselection);
     2838              }
    28512839            }
    28522840            if (hwndStatus2) {
     
    28642852          ULONG action = UM_ACTION;
    28652853
    2866           li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2);
    2867           if (fExceedPMDrgLimit)
    2868             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
    2869                                  hwnd,
    2870                                  GetPString(IDS_ERRORTEXT),
    2871                        GetPString(IDS_EXCEEDPMDRGLMT));
     2854          li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2);
     2855          if (NumItemsToUnhilite) {
     2856            saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     2857                                 hwnd,
     2858                                 GetPString(IDS_ERRORTEXT),
     2859                                 GetPString(IDS_EXCEEDPMDRGLMT));
     2860          }
    28722861          if (li) {
    28732862            if (li->list && li->list[0] && IsRoot(li->list[0]))
     
    28852874              li->type = WinDlgBox(HWND_DESKTOP, dcd->hwndParent,
    28862875                                   DropListProc, FM3ModHandle,
    2887                                    DND_FRAME, MPFROMP(&cl));
    2888               if (li->type == DID_ERROR)
    2889                   Win_Error(DND_FRAME, HWND_DESKTOP, pszSrcFile, __LINE__,
    2890                             "Drag & Drop Dialog");
    2891               if (!li->type) {
     2876                                   DND_FRAME, MPFROMP(&cl));
     2877              if (li->type == DID_ERROR)
     2878                  Win_Error(DND_FRAME, HWND_DESKTOP, pszSrcFile, __LINE__,
     2879                            "Drag & Drop Dialog");
     2880              if (!li->type) {
    28922881                FreeListInfo(li);
    28932882                return 0;
    28942883              }
    28952884              li->list = cl.list;
    2896               if (!li->list || !li->list[0]) {
     2885              if (!li->list || !li->list[0]) {
    28972886                FreeListInfo(li);
    28982887                return 0;
Note: See TracChangeset for help on using the changeset viewer.