Changeset 603


Ignore:
Timestamp:
Apr 6, 2007, 11:57:45 PM (18 years ago)
Author:
Gregg Young
Message:

Work around for PM drag/drop limit; more drag/drop error checking

Location:
trunk/dll
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/arccnrs.c

    r593 r603  
    3333  14 Mar 07 SHL ArcObjWndProc/UM_ENTER: delay before starting viewer
    3434  30 Mar 07 GKY Remove GetPString for window class names
     35   06 Apr 07 GKY Work around PM DragInfo and DrgFreeISH limit
     36  06 Apr 07 GKY Add some error checking in drag/drop
    3537***********************************************************************/
    3638
     
    11271129      cni.pDragInfo = (PDRAGINFO) mp1;
    11281130      li = DoFileDrop(dcd->hwndCnr,
    1129                       dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
     1131                      dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
     1132      if(fexceedpmdrglimit)
     1133             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     1134                   hwnd,
     1135                   GetPString(IDS_ERRORTEXT),
     1136                   GetPString(IDS_EXCEEDPMDRGLMT));
    11301137      if (li) {
    11311138        li->type = (msg == DM_DISCARDOBJECT) ? IDM_DELETE : IDM_PRINT;
     
    29993006                             dcd->hwndObject,
    30003007                             mp2, dcd->arcname, NULL, TRUE)) {
    3001                 if (fUnHilite && wasemphasized)
     3008                if ((fUnHilite && wasemphasized) || fexceedpmdrglimit)
    30023009                  UnHilite(hwnd, TRUE, &dcd->lastselection);
    30033010              }
     
    30283035          DosBeep(500, 100);            // fixme to know why beep?
    30293036          li = DoFileDrop(hwnd, dcd->arcname, FALSE, mp1, mp2);
    3030           DosBeep(50, 100);             // fixme to know why beep?
     3037          DosBeep(50, 100);             // fixme to know why beep?
     3038          if(fexceedpmdrglimit)
     3039             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     3040                   hwnd,
     3041                   GetPString(IDS_ERRORTEXT),
     3042                   GetPString(IDS_EXCEEDPMDRGLMT));
    30313043          if (li) {
    30323044            li->type = li->type == DO_MOVE ? IDM_ARCHIVEM : IDM_ARCHIVE;
  • trunk/dll/avl.c

    r551 r603  
    2525  15 Aug 06 SHL Use Runtime_Error more
    2626  01 Nov 06 SHL Turn off leftover debug code
     27  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limit
    2728
    2829***********************************************************************/
     
    673674                           MPFROMLONG(DMFL_TARGETSUCCESSFUL));
    674675      }
     676      DeleteDragitemStrHandles(pdinfo); //
    675677      DrgDeleteDraginfoStrHandles(pdinfo);
    676678      DrgFreeDraginfo(pdinfo);
  • trunk/dll/collect.c

    r593 r603  
    3131  31 Aug 06 SHL Correct stop scan context menu enable/disable
    3232  30 Mar 07 GKY Remove GetPString for window class names
     33  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     34  06 Apr 07 GKY Add some error checking in drag/drop
    3335
    3436***********************************************************************/
     
    457459      cni.pDragInfo = (PDRAGINFO) mp1;
    458460      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));
    459466      if (li) {
    460467        li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
     
    21062113          ULONG numitems;
    21072114          USHORT usOperation;
     2115                APIRET rc;
    21082116
    21092117          pci = (PCNRITEM) ((PCNRDRAGINFO) mp2)->pRecord;
     
    21162124          numitems = DrgQueryDragitemCount(pDInfo);
    21172125          usOperation = pDInfo->usOperation;
    2118           DrgDeleteDraginfoStrHandles(pDInfo);
    2119           DrgFreeDraginfo(pDInfo);
     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");
    21202135          saymsg(MB_ENTER | MB_ICONASTERISK,
    21212136                 hwnd,
     
    22302245                                 GetPString(IDS_DRAGFILEOBJTEXT));
    22312246              if (DoFileDrag(hwnd, dcd->hwndObject, mp2, NULL, NULL, TRUE)) {
    2232                 if (fUnHilite && wasemphasized)
     2247                if ((fUnHilite && wasemphasized) || fexceedpmdrglimit)
    22332248                  UnHilite(hwnd, TRUE, &dcd->lastselection);
    22342249              }
     
    22452260          ULONG action = UM_ACTION;
    22462261
    2247           li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     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));
    22482268          if (li) {
    22492269            if (!*li->targetpath) {
  • trunk/dll/dircnrs.c

    r593 r603  
    2222  07 Jan 07 GKY Move error strings etc. to string file
    2323  30 Mar 07 GKY Remove GetPString for window class names
     24  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     25  06 Apr 07 GKY Add some error checking in drag/drop
    2426
    2527***********************************************************************/
     
    587589        DoFileDrop(dcd->hwndCnr, dcd->directory, FALSE, MPVOID,
    588590                   MPFROMP(&cni));
     591      if(fexceedpmdrglimit)
     592             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     593                   hwnd,
     594                   GetPString(IDS_ERRORTEXT),
     595                   GetPString(IDS_EXCEEDPMDRGLMT));
    589596      if (li) {
    590597        li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
     
    10501057{
    10511058  DIRCNRDATA *dcd = WinQueryWindowPtr(hwnd, QWL_USER);
     1059    APIRET rc;
    10521060
    10531061  switch (msg) {
     
    26902698          numitems = DrgQueryDragitemCount(pDInfo);
    26912699          usOperation = pDInfo->usOperation;
    2692           DrgDeleteDraginfoStrHandles(pDInfo);
    2693           DrgFreeDraginfo(pDInfo);
     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");
    26942709          saymsg(MB_ENTER | MB_ICONASTERISK,
    26952710                 hwnd,
     
    28322847                           (pci) ? NULL : dcd->directory,
    28332848                           (pci) ? TRUE : FALSE)) {
    2834               if (pci && fUnHilite && wasemphasized)
     2849              if ((pci && fUnHilite && wasemphasized) || fexceedpmdrglimit)
    28352850                UnHilite(hwnd, TRUE, &dcd->lastselection);
    28362851            }
     
    28492864          ULONG action = UM_ACTION;
    28502865
    2851           li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2);
     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));
    28522872          if (li) {
    28532873            if (li->list && li->list[0] && IsRoot(li->list[0]))
  • trunk/dll/draglist.c

    r551 r603  
    1111  16 Oct 02 SHL DoFileDrag: don't free stack
    1212  26 Jul 06 SHL Check more run time errors
     13  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     14  06 Apr 07 GKY Add DeleteDragitemStrHandles
     15  06 Apr 07 GKY Add some error checking in drag/drop
    1316
    1417***********************************************************************/
     
    2730static PSZ pszSrcFile = __FILE__;
    2831
    29 #pragma alloc_text(DRAGLIST,DragOne,DoFileDrag,DragList,PickUp)
     32#pragma alloc_text(DRAGLIST,DragOne,DoFileDrag,DragList,PickUp,DeleteDragitemStrHandles)
     33
     34BOOL DeleteDragitemStrHandles (PDRAGINFO pDInfo)
     35{
     36    PDRAGITEM  pDItem = NULL;
     37    ULONG cDitem;
     38    INT  i = 0;
     39    cDitem = DrgQueryDragitemCount(pDInfo);
     40     while (i < (INT) cDitem){
     41         pDItem = DrgQueryDragitemPtr(pDInfo, i);
     42     if (pDItem){
     43         DrgDeleteStrHandle(pDItem->hstrType);
     44         DrgDeleteStrHandle(pDItem->hstrRMF);
     45         DrgDeleteStrHandle(pDItem->hstrContainerName);
     46         DrgDeleteStrHandle(pDItem->hstrSourceName);
     47          //  Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     48          //        "DrgAddStrHandle");
     49         DrgDeleteStrHandle(pDItem->hstrTargetName);
     50     }
     51     else
     52         return FALSE;
     53     i++;
     54    }
     55    return TRUE;
     56}
    3057
    3158HWND DragOne(HWND hwndCnr, HWND hwndObj, CHAR * filename, BOOL moveok)
     
    7299      DItem.hstrContainerName = DrgAddStrHandle(szDir);
    73100      DItem.hstrSourceName = DrgAddStrHandle(szFile);
     101      if(!DItem.hstrSourceName)
     102         Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     103         "DrgQueryStrName");
    74104      DItem.hstrTargetName = DrgAddStrHandle(szFile);
    75105      DItem.fsControl = 0;
     
    112142                        &fakeicon, 1L, VK_ENDDRAG,      /* End of drag indicator */
    113143                        (PVOID) NULL);  /* Reserved              */
    114 
    115         DrgFreeDraginfo(pDInfo);        /* Free DRAGINFO struct  */
     144        if(hDrop == NULLHANDLE){
     145        if(!DeleteDragitemStrHandles(pDInfo)) //)
     146            Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     147                      "DeleteDragistr");
     148        DrgDeleteDraginfoStrHandles (pDInfo);
     149        DrgFreeDraginfo(pDInfo);        /* Free DRAGINFO struct  */
     150        }
    116151        WinSetWindowPos(hwndCnr, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE);
    117152      }
     
    137172  CHAR szFile[CCHMAXPATH], szBuffer[CCHMAXPATH];
    138173  DRAGIMAGE *padiIcon = NULL, *padiTest, diFakeIcon;
    139 
     174  APIRET rc;
     175
     176  fexceedpmdrglimit = FALSE;
    140177  if (!pciRec && directory && *directory)
    141178    return DragOne(hwndCnr, hwndObj, directory, moveok);
     
    238275        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
    239276        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     277        if (!ppDItem[ulNumfiles]->hstrSourceName)
     278        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     279                  "DrgAddStrHandle");
    240280        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    241281        ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
     
    251291          ppDItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE;
    252292          rooting = TRUE;
    253         }
     293        }
     294        if(ulNumfiles >= 1500){
     295            pDInfo = DrgAllocDraginfo(ulNumfiles);
     296            fexceedpmdrglimit = TRUE;
     297              goto Thatsall;
     298        }
    254299        ulNumfiles++;
    255300        ppDItem[ulNumfiles] = NULL;
     
    284329        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
    285330        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     331        if(!ppDItem[ulNumfiles]->hstrSourceName)
     332        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     333                 "DrgAddStrHandle");
    286334        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    287335        ppDItem[ulNumfiles]->fsControl = DC_PREPARE;
     
    302350          ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile);
    303351          ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     352          if(!ppDItem[ulNumfiles]->hstrSourceName)
     353          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     354                 "DrgAddStrHandle");
    304355          ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    305356          ppDItem[ulNumfiles]->fsControl = 0;
     
    307358              (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE))
    308359            ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;
    309           ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
     360          ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;
     361          if(ulNumfiles >= 1500){
     362              pDInfo = DrgAllocDraginfo(ulNumfiles);
     363              goto Thatsall;
     364          }
    310365          ulNumfiles++;
    311366        }
     
    326381  if (ulNumfiles) {
    327382    pDInfo = DrgAllocDraginfo(ulNumfiles);      /* Allocate DRAGINFO */
     383 Thatsall:
    328384    if (pDInfo) {
    329385      if ((arcfile && *arcfile) || (IsFullName(szBuffer) &&
     
    375431                      padiIcon, ulNumIcon, VK_ENDDRAG,  /* End of drag indicator */
    376432                      (PVOID) NULL);    /* Reserved              */
    377 
    378       DrgFreeDraginfo(pDInfo);          /* Free DRAGINFO struct  */
     433      if(hDrop == NULLHANDLE){
     434          rc = DeleteDragitemStrHandles(pDInfo); //
     435      if(!rc)
     436          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     437                    "DeleteDragistr");
     438      DrgDeleteDraginfoStrHandles (pDInfo);
     439      rc = DrgFreeDraginfo(pDInfo);             /* Free DRAGINFO struct  */
     440      if(!rc)
     441      Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     442                "DrgFreeDraginfo");
     443      }
    379444      if (padiIcon && padiIcon != &diFakeIcon)
    380445        free(padiIcon);
     
    478543        ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer);
    479544        ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile);
     545        if(!ppDItem[ulNumfiles]->hstrSourceName)
     546            Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     547                  "DrgAddStrHandle");
    480548        ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile);
    481549        ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0;
     
    529597                      padiIcon, ulNumIcon, VK_ENDDRAG,  /* End of drag indicator */
    530598                      (PVOID) NULL);    /* Reserved              */
    531 
    532       DrgFreeDraginfo(pDInfo);          /* Free DRAGINFO struct  */
     599      if(hDrop == NULLHANDLE){
     600      if(!DeleteDragitemStrHandles(pDInfo)) //)
     601          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     602                    "DeleteDragistr");
     603      DrgDeleteDraginfoStrHandles (pDInfo);
     604      if(!DrgFreeDraginfo(pDInfo));             /* Free DRAGINFO struct  */
     605          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     606                    "DrgFreeDraginfo");
     607      }
    533608      free(padiIcon);
    534609      padiIcon = NULL;
     
    601676        ditem.hstrContainerName = DrgAddStrHandle(szDir);
    602677        ditem.hstrSourceName = DrgAddStrHandle(szFile);
     678        if(!ditem.hstrSourceName)
     679        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     680                 "DrgAddStrHandle");
    603681        ditem.hstrTargetName = DrgAddStrHandle(szFile);
    604682        ditem.fsControl = 0;
  • trunk/dll/droplist.c

    r593 r603  
    1313  21 Jul 06 SHL Drop dup code
    1414  22 Jul 06 SHL Check more run time errors
     15  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     16  06 Apr 07 GKY Add some error checking in drag/drop
    1517
    1618***********************************************************************/
     
    99101
    100102    blen = DrgQueryStrName(pDItem->hstrContainerName, buflen, buffer);
    101     if (blen) {
     103    if(!blen)
     104        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     105              "DrgQueryStrName");
     106    else {
    102107      if (*(buffer + (blen - 1)) != '\\') {
    103108        *(buffer + blen) = '\\';
     
    107112    buffer[blen] = 0;
    108113    len = DrgQueryStrName(pDItem->hstrSourceName,
    109                           buflen - blen, buffer + blen);
     114                          buflen - blen, buffer + blen);
     115    if(!len)
     116       // printf("%s %d\n %s\n %d %X\n", pszSrcFile, __LINE__,  pDItem->hstrSourceName,
     117        //                  buflen - blen, buffer + blen); fflush(stdout);
     118       // Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     119         //         "DrgQueryStrName");
    110120    buffer[blen + len] = 0;
    111121    {                                   /* be sure we get full pathname of file/directory */
     
    144154  register ULONG x;
    145155  BOOL ret = FALSE;
     156  APIRET rc;
    146157
    147158  if (buffer && buflen)
     
    168179                         MPFROMLONG(DMFL_TARGETFAIL));
    169180    }
    170     DrgDeleteDraginfoStrHandles(pDInfo);
    171     DrgFreeDraginfo(pDInfo);            /* Free DRAGINFO */
     181    rc = DeleteDragitemStrHandles(pDInfo); //
     182    if(!rc)
     183        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     184                  "DeleteDragitemStrHandles");
     185    DrgDeleteDraginfoStrHandles (pDInfo);
     186    rc = DrgFreeDraginfo(pDInfo);               /* Free DRAGINFO */
     187    if(!rc)
     188          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     189                 "DrgFreeDraginfo");
    172190  }
    173191
     
    180198  PDRAGINFO pDInfo;             /* Pointer to DRAGINFO   */
    181199  BOOL ret = FALSE;
     200  APIRET rc;
    182201
    183202  pDInfo = (PDRAGINFO) mp1;             /* Get DRAGINFO pointer  */
     
    190209                     NULL))             /* formats               */
    191210      ret = TRUE;
    192     DrgFreeDraginfo(pDInfo);
     211    rc = DeleteDragitemStrHandles(pDInfo); //
     212    if(!rc)
     213         Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     214                   "DeleteDragitemStrHandles");
     215    DrgDeleteDraginfoStrHandles(pDInfo);
     216    rc = DrgFreeDraginfo(pDInfo);
     217    if(!rc)
     218          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     219                 "DrgFreeDraginfo");
    193220  }
    194221  return ret;
     
    199226  PDRAGINFO pDInfo;
    200227  ULONG numitems;
     228  APIRET rc;
    201229
    202230  pDInfo = mp1;
     
    204232    DrgAccessDraginfo(pDInfo);
    205233    numitems = DrgQueryDragitemCount(pDInfo);
     234    rc = DeleteDragitemStrHandles(pDInfo); //
     235    if(!rc)
     236         Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     237                   "DeleteDragitemStrHandles");
    206238    DrgDeleteDraginfoStrHandles(pDInfo);
    207     DrgFreeDraginfo(pDInfo);
     239    rc = DrgFreeDraginfo(pDInfo);
     240    if(!rc)
     241          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     242                 "DrgFreeDraginfo");
    208243  }
    209244  return numitems;
     
    236271  ARC_TYPE *arcinfo = NULL;
    237272  USHORT Operation;
     273  APIRET rc;
    238274
    239275  *szArc = 0;
     
    242278  if (!pDInfo)
    243279    return NULL;
    244   DrgAccessDraginfo(pDInfo);
     280  rc = DrgAccessDraginfo(pDInfo);
     281  if(!rc)
     282      Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     283              "DrgAccessDraginfo");
    245284  Operation = pDInfo->usOperation;
    246285  pDItem = DrgQueryDragitemPtr(pDInfo, 0L);
     286  if(!pDItem)
     287      Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     288              "DrgQueryDragitemPtr");
    247289  if (Operation == DO_MOVE && !(pDItem->fsSupportedOps & DO_MOVEABLE)) {
    248290    saymsg(MB_ENTER, HWND_DESKTOP, GetPString(IDS_WARNINGTEXT),
     
    424466      FreeList(files);
    425467  }
     468  rc = DeleteDragitemStrHandles(pDInfo);  //
     469  if(!rc)
     470        Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     471                 "DeleteDragitemStrHandles");
    426472  DrgDeleteDraginfoStrHandles(pDInfo);
    427473  DrgFreeDraginfo(pDInfo);
  • trunk/dll/fm3dll.h

    r593 r603  
    4040  18 Mar 07 GKY Add MM import typedefines for fix for files misindentified as multimedia
    4141  30 Mar 07 GKY Defined golbals for removing GetPString for window class names
     42  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits fexceedpmgrglimit & DeleteDragitemStrHandles
     43  06 Apr 07 GKY Add some error checking in drag/drop
    4244
    4345***********************************************************************/
     
    10561058LISTINFO *DoFileDrop(HWND hwndCnr, CHAR * directory, BOOL arcfilesok,
    10571059                     MPARAM mp1, MPARAM mp2);
     1060BOOL DeleteDragitemStrHandles (PDRAGINFO pDInfo);
    10581061
    10591062/* shadow.c */
     
    13421345  fCustomFileDlg, fSaveMiniCmds, fSaveBigCmds, fNoTileUpdate,
    13431346  fFM2Deletes, fAutoAddAllDirs, fConfirmTarget, fChangeTarget,
    1344   fFirstTime, fShowTarget, fNoFinger, fDrivebarHelp, fCheckMM;
     1347  fFirstTime, fShowTarget, fNoFinger, fDrivebarHelp, fCheckMM, fexceedpmdrglimit;
    13451348DATADEF BOOL detailsladate, detailslatime, detailscrdate, detailscrtime,
    13461349  detailslongname, detailsea, detailssize, detailssubject,
  • trunk/dll/fm3dll.str

    r593 r603  
    3535Error!
    3636Can't start %s %s
    37 
     37Your Drag request exceeds the PM limit\n (For compatibility with 16 bit apps)\n The unprocessed objects are still selected in the\n source directory for additional processing\n See Drag & Drop in the help file for additional information
    3838
    3939 You are here --> x
  • trunk/dll/fm3str.h

    r593 r603  
    1515  07 JAN 07 GKY Add new
    1616  31 Mar 07 GKY Removed IDS_WC window class names
     17  06 Apr 07 GKY Add error message for drg work around
    1718
    1819***********************************************************************/
     
    6263#define IDS_ERRORTEXT                                         34
    6364#define IDS_CANTSTARTTEXT                                     35
     65#define IDS_EXCEEDPMDRGLMT                                    36
    6466#define IDS_YOUAREHERETEXT                                    38
    6567#define IDS_FORCINGCOPYTEXT                                   39
  • trunk/dll/inis.c

    r593 r603  
    1616  22 Mar 07 GKY Use QWL_USER
    1717  30 Mar 07 GKY Remove GetPString for window class names
     18  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     19  06 Apr 07 GKY Add some error checking in drag/drop
    1820
    1921***********************************************************************/
     
    14841486  PFNWP oldproc = (PFNWP) WinQueryWindowPtr(hwnd, QWL_USER);
    14851487  static HWND hwndPopup = (HWND) 0;
     1488  APIRET rc;
    14861489
    14871490  switch (msg) {
     
    15341537      HPOINTER hptrINI;
    15351538      USHORT id;
     1539      HWND hDrop = 0;
    15361540
    15371541      id = WinQueryWindowUShort(hwnd, QWS_ID);
     
    15671571      pDInfo = DrgAllocDraginfo(1L);
    15681572      DrgSetDragitem(pDInfo, &DItem, sizeof(DRAGITEM), 0L);
    1569       DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
     1573      hDrop = DrgDrag(hwnd, pDInfo, &DIcon, 1L, VK_ENDDRAG, (PVOID) NULL);
     1574      DeleteDragitemStrHandles(pDInfo); //
     1575      DrgDeleteDraginfoStrHandles (pDInfo);
    15701576      DrgFreeDraginfo(pDInfo);
    15711577      WinDestroyPointer(hptrINI);
     
    16731679        curitem++;
    16741680      }
     1681      rc = DeleteDragitemStrHandles(pDInfo); //
     1682
     1683      if(!rc)
     1684          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     1685                    "DrgDeleteDraginfoStrHandles");
    16751686      DrgDeleteDraginfoStrHandles(pDInfo);
    1676       DrgFreeDraginfo(pDInfo);
     1687      rc = DrgFreeDraginfo(pDInfo);
     1688      if(!rc)
     1689          Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     1690                 "DrgFreeDraginfo");
    16771691    }
    16781692    return 0;
  • trunk/dll/mainwnd.c

    r593 r603  
    2828  09 Mar 07 SHL RestoreDirCnrState/SaveDirCnrState: optimize and avoid overflows
    2929  30 Mar 07 GKY Remove GetPString for window class names
     30  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     31  06 Apr 07 GKY Add some error checking in drag/drop
    3032
    3133***********************************************************************/
     
    12311233      cdi.pDragInfo = mp1;
    12321234      li = DoFileDrop(hwnd, NULL, FALSE, mp1, MPFROMP(&cdi));
     1235      if(fexceedpmdrglimit)
     1236             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     1237                   hwnd,
     1238                   GetPString(IDS_ERRORTEXT),
     1239                   GetPString(IDS_EXCEEDPMDRGLMT));
    12331240      if (li) {
    12341241        li->type = id;
     
    17991806                      NULL,
    18001807                      TRUE, MPFROM2SHORT(TREE_CNR, CN_DROP), MPFROMP(&cnd));
     1808      if(fexceedpmdrglimit)
     1809             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     1810                   hwnd,
     1811                   GetPString(IDS_ERRORTEXT),
     1812                   GetPString(IDS_EXCEEDPMDRGLMT));
    18011813      if (li) {
    18021814        strcpy(li->targetpath, szDrv);
  • trunk/dll/makelist.c

    r551 r603  
    1212  22 Jul 06 SHL Use Runtime_Error
    1313  22 Jul 06 SHL AddToList optimize
     14  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
    1415
    1516***********************************************************************/
     
    7475      FreeList(li->list);
    7576    free(li);
     77    fexceedpmdrglimit = FALSE;
    7678  }
    7779}
  • trunk/dll/select.c

    r551 r603  
    1616  29 Jul 06 SHL Use xfgets_bstripcr
    1717  15 Aug 06 SHL Rework SetMask args and logic
     18  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
    1819
    1920***********************************************************************/
     
    4243{
    4344  PCNRITEM pci;
    44   INT numfiles = 0, numalloc = 0;
     45  INT numfiles = 0, numalloc = 0, x = 0;
    4546  INT attribute = CRA_CURSORED;
    4647
     
    6061                 MPFROM2SHORT(FALSE, CRA_SELECTED));
    6162      if (!all)
    62         break;
     63          break;
     64      if(fexceedpmdrglimit && x == 1499){
     65          fexceedpmdrglimit = FALSE;
     66          break;
     67      }
    6368      if (list)
    6469        AddToList(pci->szFileName, list, &numfiles, &numalloc);
    6570      pci = (PCNRITEM) WinSendMsg(hwndCnr, CM_QUERYRECORDEMPHASIS,
    6671                                  MPFROMP(pci), MPFROMSHORT(CRA_SELECTED));
     72      x++;
    6773    }
    6874  }
  • trunk/dll/treecnr.c

    r593 r603  
    2626  09 Mar 07 GKY Use SelectDriveIcon
    2727  30 Mar 07 GKY Remove GetPString for window class names
     28  06 Apr 07 GKY Work around PM DragInfo and DrgFreeDISH limits
     29  06 Apr 07 GKY Add some error checking in drag/drop
    2830
    2931***********************************************************************/
     
    542544      cni.pDragInfo = (PDRAGINFO) mp1;
    543545      li = DoFileDrop(dcd->hwndCnr,
    544                       dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
     546                      dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
     547      if(fexceedpmdrglimit)
     548             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     549                   hwnd,
     550                   GetPString(IDS_ERRORTEXT),
     551                   GetPString(IDS_EXCEEDPMDRGLMT));
    545552      if (li) {
    546553        li->type = ((fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE);
     
    13671374          ULONG action = UM_ACTION;
    13681375
    1369           li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     1376          li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     1377          if(fexceedpmdrglimit)
     1378             saymsg(MB_CANCEL | MB_ICONEXCLAMATION,
     1379                   hwnd,
     1380                   GetPString(IDS_ERRORTEXT),
     1381                   GetPString(IDS_EXCEEDPMDRGLMT));
    13701382          if (li) {
    13711383            if (!*li->targetpath) {
Note: See TracChangeset for help on using the changeset viewer.