Changeset 606 for trunk/dll/draglist.c
- Timestamp:
- Apr 13, 2007, 11:30:27 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/dll/draglist.c
r603 r606 31 31 32 32 #pragma alloc_text(DRAGLIST,DragOne,DoFileDrag,DragList,PickUp,DeleteDragitemStrHandles) 33 33 /* work around for DrgDeleteDraginfoStrHandles 34 which seems to fail with a large number of strings */ 34 35 BOOL DeleteDragitemStrHandles (PDRAGINFO pDInfo) 35 36 { 36 PDRAGITEM pDItem = NULL;37 PDRAGITEM pDItem; 37 38 ULONG cDitem; 38 INT i = 0; 39 UINT i = 0; 40 APIRET rc; 41 39 42 cDitem = DrgQueryDragitemCount(pDInfo); 40 while (i < (INT) cDitem){43 for (; i < (UINT)cDitem; i++){ 41 44 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); 45 if (!pDItem) 46 return FALSE; 47 else { 48 DrgDeleteStrHandle(pDItem->hstrType); 49 DrgDeleteStrHandle(pDItem->hstrRMF); 50 DrgDeleteStrHandle(pDItem->hstrContainerName); 51 rc = DrgDeleteStrHandle(pDItem->hstrSourceName); 52 if (!rc) 53 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 54 "DrgDeleteStrHandle"); 55 DrgDeleteStrHandle(pDItem->hstrTargetName); 50 56 } 51 else 52 return FALSE; 53 i++; 54 } 55 return TRUE; 57 } // for 58 return TRUE; 56 59 } 57 60 … … 99 102 DItem.hstrContainerName = DrgAddStrHandle(szDir); 100 103 DItem.hstrSourceName = DrgAddStrHandle(szFile); 101 if (!DItem.hstrSourceName)104 if (!DItem.hstrSourceName) 102 105 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 103 106 "DrgQueryStrName"); … … 142 145 &fakeicon, 1L, VK_ENDDRAG, /* End of drag indicator */ 143 146 (PVOID) NULL); /* Reserved */ 144 if(hDrop == NULLHANDLE){145 if (!DeleteDragitemStrHandles(pDInfo)) //)147 //if (hDrop == NULLHANDLE) 148 if (!DeleteDragitemStrHandles(pDInfo)) //) 146 149 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 147 150 "DeleteDragistr"); 148 151 DrgDeleteDraginfoStrHandles (pDInfo); 149 152 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 150 }151 153 WinSetWindowPos(hwndCnr, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE); 152 154 } … … 174 176 APIRET rc; 175 177 176 f exceedpmdrglimit = FALSE;178 fExceedPMDrgLimit = 0; 177 179 if (!pciRec && directory && *directory) 178 180 return DragOne(hwndCnr, hwndObj, directory, moveok); … … 267 269 padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6); 268 270 } 269 memset(ppDItem[ulNumfiles], 0, sizeof(DRAGITEM)); 270 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 271 ppDItem[ulNumfiles]->hwndItem = hwndCnr; 272 ppDItem[ulNumfiles]->ulItemID = (ULONG) pci; 273 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 274 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST); 275 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 276 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 277 if (!ppDItem[ulNumfiles]->hstrSourceName) 278 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 279 "DrgAddStrHandle"); 271 memset(ppDItem[ulNumfiles], 0, sizeof(DRAGITEM)); 272 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 273 ppDItem[ulNumfiles]->hwndItem = hwndCnr; 274 ppDItem[ulNumfiles]->ulItemID = (ULONG) pci; 275 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 276 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST); 277 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 278 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 279 if (!ppDItem[ulNumfiles]->hstrSourceName){ 280 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrType); 281 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrRMF); 282 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrContainerName); 283 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrSourceName); 284 xfree(ppDItem[ulNumfiles]); 285 fExceedPMDrgLimit = ulNumfiles - 1; 286 break; 287 } 288 /*Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 289 "DrgAddStrHandle");*/ 280 290 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 281 291 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; … … 292 302 rooting = TRUE; 293 303 } 294 if(ulNumfiles >= 1500){295 296 fexceedpmdrglimit = TRUE;297 298 }304 //if (ulNumfiles >= 2000){ 305 // pDInfo = DrgAllocDraginfo(ulNumfiles); 306 // fExceedPMDrgLimit = TRUE; 307 // goto Thatsall; 308 // } 299 309 ulNumfiles++; 300 310 ppDItem[ulNumfiles] = NULL; … … 329 339 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 330 340 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 331 if(!ppDItem[ulNumfiles]->hstrSourceName) 332 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 333 "DrgAddStrHandle"); 341 if (!ppDItem[ulNumfiles]->hstrSourceName){ 342 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrType); 343 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrRMF); 344 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrContainerName); 345 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrSourceName); 346 xfree(ppDItem[ulNumfiles]); 347 fExceedPMDrgLimit = ulNumfiles - 1; 348 break; 349 } 334 350 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 335 351 ppDItem[ulNumfiles]->fsControl = DC_PREPARE; … … 350 366 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 351 367 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 352 if(!ppDItem[ulNumfiles]->hstrSourceName) 353 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 354 "DrgAddStrHandle"); 368 if (!ppDItem[ulNumfiles]->hstrSourceName){ 369 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrType); 370 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrRMF); 371 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrContainerName); 372 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrSourceName); 373 xfree(ppDItem[ulNumfiles]); 374 fExceedPMDrgLimit = ulNumfiles - 1; 375 break; 376 } 355 377 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 356 378 ppDItem[ulNumfiles]->fsControl = 0; … … 359 381 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 360 382 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE; 361 if(ulNumfiles >= 1500){ 362 pDInfo = DrgAllocDraginfo(ulNumfiles); 363 goto Thatsall; 364 } 383 //if (ulNumfiles >= 1000){ 384 // pDInfo = DrgAllocDraginfo(ulNumfiles); 385 // fexceedpmdrglimit = TRUE; 386 // goto Thatsall; 387 // } 365 388 ulNumfiles++; 366 389 } … … 378 401 MPFROMSHORT(attribute)); 379 402 } // while 380 403 if (fExceedPMDrgLimit) 404 ulNumfiles = ulNumfiles - 1; 381 405 if (ulNumfiles) { 382 406 pDInfo = DrgAllocDraginfo(ulNumfiles); /* Allocate DRAGINFO */ 383 Thatsall:384 407 if (pDInfo) { 385 408 if ((arcfile && *arcfile) || (IsFullName(szBuffer) && … … 398 421 sizeof(DRAGITEM), /* Size of DRAGITEM */ 399 422 Select); /* Index of DRAGITEM */ 400 free(ppDItem[Select]);423 xfree(ppDItem[Select]); 401 424 } 402 425 #ifdef __DEBUG_ALLOC__ 403 426 _heap_check(); 404 427 #endif 405 free(ppDItem);428 xfree(ppDItem); 406 429 ppDItem = NULL; 407 430 DosPostEventSem(CompactSem); … … 431 454 padiIcon, ulNumIcon, VK_ENDDRAG, /* End of drag indicator */ 432 455 (PVOID) NULL); /* Reserved */ 433 if(hDrop == NULLHANDLE){ 434 rc = DeleteDragitemStrHandles(pDInfo); // 435 if(!rc) 456 rc = DeleteDragitemStrHandles(pDInfo); 457 if (!rc) 436 458 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 437 459 "DeleteDragistr"); 438 460 DrgDeleteDraginfoStrHandles (pDInfo); 439 461 rc = DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 440 if (!rc)462 if (!rc) 441 463 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 442 464 "DrgFreeDraginfo"); 443 }444 465 if (padiIcon && padiIcon != &diFakeIcon) 445 free(padiIcon);466 xfree(padiIcon); 446 467 padiIcon = NULL; 447 468 WinSetWindowPos(hwndCnr, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE); … … 450 471 } 451 472 if (ppDItem) 452 free(ppDItem);473 xfree(ppDItem); 453 474 if (padiIcon && padiIcon != &diFakeIcon) 454 free(padiIcon);475 xfree(padiIcon); 455 476 MarkAll(hwndCnr, TRUE, FALSE, TRUE); 456 477 return hDrop; … … 543 564 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 544 565 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 545 if(!ppDItem[ulNumfiles]->hstrSourceName) 546 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 547 "DrgAddStrHandle"); 566 if (!ppDItem[ulNumfiles]->hstrSourceName){ 567 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrType); 568 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrRMF); 569 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrContainerName); 570 DrgDeleteStrHandle(ppDItem[ulNumfiles]->hstrSourceName); 571 xfree(ppDItem[ulNumfiles]); 572 fExceedPMDrgLimit = ulNumfiles - 1; 573 break; 574 } 548 575 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 549 576 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; … … 562 589 } 563 590 } // for 564 591 if (fExceedPMDrgLimit) 592 ulNumfiles = ulNumfiles - 1; 565 593 if (ulNumfiles) { 566 594 pDInfo = DrgAllocDraginfo(ulNumfiles); /* Allocate DRAGINFO */ … … 597 625 padiIcon, ulNumIcon, VK_ENDDRAG, /* End of drag indicator */ 598 626 (PVOID) NULL); /* Reserved */ 599 if(hDrop == NULLHANDLE){ 600 if(!DeleteDragitemStrHandles(pDInfo)) //) 601 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 602 "DeleteDragistr"); 627 if (!DeleteDragitemStrHandles(pDInfo)) 628 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 629 "DeleteDragistr"); 603 630 DrgDeleteDraginfoStrHandles (pDInfo); 604 if(!DrgFreeDraginfo(pDInfo)); /* Free DRAGINFO struct */ 605 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 606 "DrgFreeDraginfo"); 607 } 608 free(padiIcon); 631 if (!DrgFreeDraginfo(pDInfo)); /* Free DRAGINFO struct */ 632 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 633 "DrgFreeDraginfo"); 634 xfree(padiIcon); 609 635 padiIcon = NULL; 610 636 WinSetWindowPos(hwnd, HWND_TOP, 0, 0, 0, 0, SWP_ACTIVATE); … … 676 702 ditem.hstrContainerName = DrgAddStrHandle(szDir); 677 703 ditem.hstrSourceName = DrgAddStrHandle(szFile); 678 if (!ditem.hstrSourceName)704 if (!ditem.hstrSourceName) 679 705 Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__, 680 706 "DrgAddStrHandle");
Note:
See TracChangeset
for help on using the changeset viewer.