Changeset 618 for trunk/dll/dircnrs.c
- Timestamp:
- Apr 20, 2007, 9:19:03 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/dircnrs.c
r606 r618 24 24 06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits 25 25 06 Apr 07 GKY Add some error checking in drag/drop 26 19 Apr 07 SHL Use FreeDragInfoData. Add more drag/drop error checking. 26 27 27 28 ***********************************************************************/ … … 386 387 switch (msg) { 387 388 case DM_DRAGOVER: 388 if (AcceptOneDrop( mp1, mp2))389 if (AcceptOneDrop(hwnd, mp1, mp2)) 389 390 return MRFROM2SHORT(DOR_DROP, DO_MOVE); 390 return (MRFROM2SHORT(DOR_NODROP, 0)); /* Drop not valid 391 return (MRFROM2SHORT(DOR_NODROP, 0)); /* Drop not valid */ 391 392 case DM_DROPHELP: 392 393 DropHelp(mp1, mp2, hwnd, GetPString(IDS_DIRCNRFOLDERDROPHELP)); … … 400 401 DrawTargetEmphasis(hwnd, emphasized); 401 402 } 402 if (GetOneDrop( mp1, mp2, szFrom, sizeof(szFrom)))403 if (GetOneDrop(hwnd, mp1, mp2, szFrom, sizeof(szFrom))) 403 404 WinSendMsg(WinWindowFromID(WinQueryWindow(hwnd, QW_PARENT), 404 405 DIR_CNR), … … 589 590 DoFileDrop(dcd->hwndCnr, dcd->directory, FALSE, MPVOID, 590 591 MPFROMP(&cni)); 591 if ( fExceedPMDrgLimit)592 593 594 595 592 if (NumItemsToUnhilite) 593 saymsg(MB_CANCEL | MB_ICONEXCLAMATION, 594 hwnd, 595 GetPString(IDS_ERRORTEXT), 596 GetPString(IDS_EXCEEDPMDRGLMT)); 596 597 if (li) { 597 598 li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE; … … 2634 2635 2635 2636 /* 2636 2637 2637 case CN_PICKUP: 2638 return PickUp(hwnd,dcd->hwndObject,mp2); 2638 2639 */ 2639 2640 … … 2694 2695 Win_Error(hwnd, hwnd, pszSrcFile, __LINE__, 2695 2696 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 } 2723 2717 } 2724 2718 return 0; 2725 2719 2726 2720 case CN_DRAGLEAVE: 2727 #ifdef NEVER2728 if (mp2) {2729 2730 PDRAGINFO pDInfo;2731 2732 pDInfo = ((PCNRDRAGINFO) mp2)->pDragInfo;2733 DrgAccessDraginfo(pDInfo); /* Access DRAGINFO */2734 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO */2735 }2736 #endif2737 2721 return 0; 2738 2722 … … 2741 2725 if (mp2) { 2742 2726 2743 PDRAGITEM pDItem; /* Pointer to DRAGITEM 2744 PDRAGINFO pDInfo; /* Pointer to DRAGINFO 2727 PDRAGITEM pDItem; /* Pointer to DRAGITEM */ 2728 PDRAGINFO pDInfo; /* Pointer to DRAGINFO */ 2745 2729 PCNRITEM pci; 2746 2730 USHORT uso; … … 2748 2732 pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord; 2749 2733 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 } 2751 2739 if (*dcd->directory && 2752 2740 (driveflags[toupper(*dcd->directory) - 'A'] & … … 2754 2742 DrgFreeDraginfo(pDInfo); 2755 2743 return MRFROM2SHORT(DOR_DROP, /* Return okay to link */ 2756 DO_LINK); /* (compare) only 2744 DO_LINK); /* (compare) only */ 2757 2745 } 2758 2746 if (pci) { … … 2763 2751 uso = pDInfo->usOperation; 2764 2752 if (uso == DO_DEFAULT) 2765 uso = (fCopyDefault)? DO_COPY : DO_MOVE;2753 uso = fCopyDefault ? DO_COPY : DO_MOVE; 2766 2754 if (!(pci->attrFile & FILE_DIRECTORY)) { 2767 2755 if (uso != DO_LINK && uso != DO_COPY && uso != DO_MOVE) { … … 2797 2785 ((!pci || (pci->attrFile & FILE_DIRECTORY)) && 2798 2786 DrgVerifyRMF(pDItem, DRM_FM2ARCMEMBER, DRF_FM2ARCHIVE))) { 2799 /* Free DRAGINFO */2800 2787 DrgFreeDraginfo(pDInfo); 2801 2788 if (driveflags[toupper(*dcd->directory) - 'A'] & … … 2804 2791 if (toupper(*dcd->directory) < 'C') 2805 2792 return MRFROM2SHORT(DOR_DROP, DO_COPY); 2806 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop 2793 return MRFROM2SHORT(DOR_DROP, /* Return okay to drop */ 2807 2794 ((fCopyDefault) ? DO_COPY : DO_MOVE)); 2808 2795 } 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 */ 2812 2799 2813 2800 case CN_INITDRAG: … … 2830 2817 } 2831 2818 else if (IsRoot(dcd->directory)) { 2832 2833 2819 saymsg(MB_ENTER, hwnd, GetPString(IDS_ERRORTEXT), 2820 GetPString(IDS_CANTDRAGROOTDIR)); 2834 2821 break; 2835 2822 } … … 2845 2832 mp2, 2846 2833 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) { 2850 2837 UnHilite(hwnd, TRUE, &dcd->lastselection); 2838 } 2851 2839 } 2852 2840 if (hwndStatus2) { … … 2864 2852 ULONG action = UM_ACTION; 2865 2853 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 } 2872 2861 if (li) { 2873 2862 if (li->list && li->list[0] && IsRoot(li->list[0])) … … 2885 2874 li->type = WinDlgBox(HWND_DESKTOP, dcd->hwndParent, 2886 2875 DropListProc, FM3ModHandle, 2887 2888 2889 2890 2891 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) { 2892 2881 FreeListInfo(li); 2893 2882 return 0; 2894 2883 } 2895 2884 li->list = cl.list; 2896 2885 if (!li->list || !li->list[0]) { 2897 2886 FreeListInfo(li); 2898 2887 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.