Changeset 38 for trunk/dll/draglist.c
- Timestamp:
- Oct 17, 2002, 8:59:51 PM (22 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/dll/draglist.c ¶
r2 r38 1 2 /*********************************************************************** 3 4 $Id$ 5 6 Drag drop support 7 8 Copyright (c) 1993-98 M. Kimes 9 Copyright (c) 2001, 2002 Steven H.Levine 10 11 Revisions 16 Oct 02 SHL - DoFileDrag: don't free stack 12 13 ***********************************************************************/ 14 1 15 #define INCL_DOS 2 16 #define INCL_WIN … … 48 62 memset(&DItem,0,sizeof(DRAGITEM)); 49 63 DItem.hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 50 //DItem.hwndItem = hwndCnr;64 // DItem.hwndItem = hwndCnr; 51 65 DItem.ulItemID = 1; 52 66 DItem.hstrType = DrgAddStrHandle(DRT_UNKNOWN); … … 85 99 pDInfo->usOperation = DO_LINK; 86 100 pDInfo->hwndSource = (hwndObj) ? hwndObj : hwndCnr; 87 //pDInfo->hwndSource = hwndCnr;101 // pDInfo->hwndSource = hwndCnr; 88 102 DrgSetDragitem(pDInfo, /* Set item in DRAGINFO */ 89 103 &DItem, /* Pointer to DRAGITEM */ … … 108 122 109 123 HWND DoFileDrag (HWND hwndCnr,HWND hwndObj,PCNRDRAGINIT pcd,CHAR *arcfile, 110 CHAR *directory,BOOL moveok) {111 124 CHAR *directory,BOOL moveok) 125 { 112 126 /* drag files from a container */ 113 127 114 128 BOOL isdir,rooting = FALSE; 115 129 PCNRITEM pci; 116 register CHAR *p;130 register CHAR *p; 117 131 INT attribute = CRA_CURSORED; 118 132 PDRAGINFO pDInfo = NULL; 119 DRAGITEM **DItem = NULL,**test;120 PCNRITEM pc s= (PCNRITEM)pcd->pRecord;133 DRAGITEM **ppDItem = NULL,**ppTest; 134 PCNRITEM pciRec = (PCNRITEM)pcd->pRecord; 121 135 HWND hDrop = 0; 122 136 register ULONG ulNumfiles = 0L,numdragalloc = 0L,Select,ulNumIcon = 0; 123 137 CHAR szFile[CCHMAXPATH],szBuffer[CCHMAXPATH]; 124 DRAGIMAGE *icon = NULL,*itest,fakeicon;125 126 if(!pc s&& directory && *directory)138 DRAGIMAGE *padiIcon = NULL,*padiTest,diFakeIcon; 139 140 if(!pciRec && directory && *directory) 127 141 return DragOne(hwndCnr,hwndObj,directory,moveok); 128 142 129 if(!pc s) {143 if(!pciRec) { 130 144 pci = (PCNRITEM)WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS, 131 145 MPFROMLONG(CMA_FIRST), … … 140 154 } 141 155 else { 142 pci = pc s;156 pci = pciRec; 143 157 attribute = (pci->rc.flRecordAttr & CRA_SELECTED) ? CRA_SELECTED : 0; 144 158 if(attribute) { … … 168 182 } 169 183 if(!arcfile) { 184 // Filesystem object 170 185 isdir = ((pci->attrFile & FILE_DIRECTORY) != 0); 171 186 if(ulNumfiles + 2L > numdragalloc) { 172 if(! icon) {173 itest = realloc(icon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));174 if( itest)175 icon = itest;187 if(!padiIcon) { 188 padiTest = realloc(padiIcon,sizeof(DRAGIMAGE) * (numdragalloc + 4L)); 189 if(padiTest) 190 padiIcon = padiTest; 176 191 else 177 192 break; 178 193 } 179 194 else if(!ulNumIcon) { 180 icon[ulNumfiles].cb = sizeof(DRAGIMAGE);181 icon[ulNumfiles].cptl = 0;182 icon[ulNumfiles].hImage = hptrLast;183 icon[ulNumfiles].fl = DRG_ICON;184 icon[ulNumfiles].sizlStretch.cx = 32;185 icon[ulNumfiles].sizlStretch.cy = 32;186 icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);187 icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);195 padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE); 196 padiIcon[ulNumfiles].cptl = 0; 197 padiIcon[ulNumfiles].hImage = hptrLast; 198 padiIcon[ulNumfiles].fl = DRG_ICON; 199 padiIcon[ulNumfiles].sizlStretch.cx = 32; 200 padiIcon[ulNumfiles].sizlStretch.cy = 32; 201 padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4); 202 padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7); 188 203 ulNumIcon = ulNumfiles + 1; 189 204 } 190 test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));191 if( test) {192 DItem = test;205 ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 4L)); 206 if(ppTest) { 207 ppDItem = ppTest; 193 208 numdragalloc += 4L; 194 209 } … … 196 211 break; 197 212 } 198 DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));199 if( DItem[ulNumfiles]) {213 ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 214 if(ppDItem[ulNumfiles]) { 200 215 if(!ulNumIcon) { 201 icon[ulNumfiles].cb = sizeof(DRAGIMAGE); 202 icon[ulNumfiles].cptl = 0; 203 icon[ulNumfiles].hImage = pci->rc.hptrIcon; 204 if(!icon[ulNumfiles].hImage) 205 icon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile; 206 icon[ulNumfiles].fl = DRG_ICON; 207 icon[ulNumfiles].sizlStretch.cx = 32; 208 icon[ulNumfiles].sizlStretch.cy = 32; 209 icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3); 210 icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6); 211 } 212 memset(DItem[ulNumfiles],0,sizeof(DRAGITEM)); 213 DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 214 DItem[ulNumfiles]->hwndItem = hwndCnr; 215 DItem[ulNumfiles]->ulItemID = (ULONG)pci; 216 DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 217 DItem[ulNumfiles]->hstrRMF = 218 DrgAddStrHandle(DRMDRFLIST); 219 DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 220 DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 221 DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 222 DItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; 216 padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE); 217 padiIcon[ulNumfiles].cptl = 0; 218 padiIcon[ulNumfiles].hImage = pci->rc.hptrIcon; 219 if(!padiIcon[ulNumfiles].hImage) 220 padiIcon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile; 221 padiIcon[ulNumfiles].fl = DRG_ICON; 222 padiIcon[ulNumfiles].sizlStretch.cx = 32; 223 padiIcon[ulNumfiles].sizlStretch.cy = 32; 224 padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3); 225 padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6); 226 } 227 memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM)); 228 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 229 ppDItem[ulNumfiles]->hwndItem = hwndCnr; 230 ppDItem[ulNumfiles]->ulItemID = (ULONG)pci; 231 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 232 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST); 233 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 234 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 235 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 236 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; 223 237 if(IsFullName(pci->szFileName) && 224 238 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_REMOVABLE)) 225 226 DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;239 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 240 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE; 227 241 if(moveok && IsFullName(pci->szFileName) && 228 242 !(driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE)) 229 243 ppDItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE; 230 244 if(IsRoot(pci->szFileName)) { 231 DItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE;245 ppDItem[ulNumfiles]->fsSupportedOps = DO_LINKABLE; 232 246 rooting = TRUE; 233 247 } 234 248 ulNumfiles++; 235 DItem[ulNumfiles] = NULL;249 ppDItem[ulNumfiles] = NULL; 236 250 } 237 251 else … … 239 253 } 240 254 else { 255 // Archive object 241 256 if(ulNumfiles + 3L > numdragalloc) { 242 test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 5L));243 if( test) {244 DItem = test;257 ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 5L)); 258 if(ppTest) { 259 ppDItem = ppTest; 245 260 numdragalloc += 5L; 246 261 } … … 248 263 break; 249 264 } 250 DItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 251 if(DItem[ulNumfiles]) { 252 fakeicon.hImage = hptrFile; 253 memset(DItem[ulNumfiles],0,sizeof(DRAGITEM)); 254 DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 255 DItem[ulNumfiles]->hwndItem = hwndCnr; 256 DItem[ulNumfiles]->ulItemID = (ULONG)pci; 257 DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 258 DItem[ulNumfiles]->hstrRMF = 259 DrgAddStrHandle(DRMDRFOS2FILE); 260 DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 261 DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 262 DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 263 DItem[ulNumfiles]->fsControl = DC_PREPARE; 265 ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 266 if(ppDItem[ulNumfiles]) { 267 diFakeIcon.hImage = hptrFile; 268 memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM)); 269 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 270 ppDItem[ulNumfiles]->hwndItem = hwndCnr; 271 ppDItem[ulNumfiles]->ulItemID = (ULONG)pci; 272 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 273 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFOS2FILE); 274 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 275 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 276 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 277 ppDItem[ulNumfiles]->fsControl = DC_PREPARE; 264 278 if(IsFullName(arcfile) && 265 279 (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE)) 266 DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;267 DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;280 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 281 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE; 268 282 ulNumfiles++; 269 DItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 270 if(DItem[ulNumfiles]) { 271 fakeicon.hImage = hptrFile; 272 memset(DItem[ulNumfiles],0,sizeof(DRAGITEM)); 273 DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 274 DItem[ulNumfiles]->hwndItem = hwndCnr; 275 DItem[ulNumfiles]->ulItemID = Select++; 276 DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 277 DItem[ulNumfiles]->hstrRMF = 278 DrgAddStrHandle(DRMDRFFM2ARC); 279 DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 280 DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 281 DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 282 DItem[ulNumfiles]->fsControl = 0; 283 ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 284 if(ppDItem[ulNumfiles]) { 285 diFakeIcon.hImage = hptrFile; 286 memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM)); 287 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwndCnr; /* Initialize DRAGITEM */ 288 ppDItem[ulNumfiles]->hwndItem = hwndCnr; 289 ppDItem[ulNumfiles]->ulItemID = Select++; 290 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 291 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFFM2ARC); 292 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(arcfile); 293 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 294 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 295 ppDItem[ulNumfiles]->fsControl = 0; 283 296 if(IsFullName(arcfile) && 284 297 (driveflags[toupper(*arcfile) - 'A'] & DRIVE_REMOVABLE)) 285 DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;286 DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE;298 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 299 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE; 287 300 ulNumfiles++; 288 301 } 289 DItem[ulNumfiles] = NULL;302 ppDItem[ulNumfiles] = NULL; 290 303 } 291 304 else … … 293 306 } 294 307 WinSendMsg(hwndCnr,CM_SETRECORDEMPHASIS,MPFROMP(pci), 295 308 MPFROM2SHORT(TRUE,CRA_SOURCE)); 296 309 297 310 Continuing: … … 301 314 pci = WinSendMsg(hwndCnr,CM_QUERYRECORDEMPHASIS,MPFROMP(pci), 302 315 MPFROMSHORT(attribute)); 303 } 316 } // while 304 317 305 318 if(ulNumfiles) { … … 314 327 pDInfo->usOperation = DO_LINK; 315 328 pDInfo->hwndSource = (hwndObj) ? hwndObj : hwndCnr; 316 //pDInfo->hwndSource = hwndCnr;329 // pDInfo->hwndSource = hwndCnr; 317 330 for(Select = 0L;Select < ulNumfiles;Select++) { 318 DrgSetDragitem(pDInfo, 319 DItem[Select],/* Pointer to DRAGITEM */320 sizeof(DRAGITEM), 321 Select); 322 free( DItem[Select]);331 DrgSetDragitem(pDInfo, /* Set item in DRAGINFO */ 332 ppDItem[Select], /* Pointer to DRAGITEM */ 333 sizeof(DRAGITEM), /* Size of DRAGITEM */ 334 Select); /* Index of DRAGITEM */ 335 free(ppDItem[Select]); 323 336 } 324 337 #ifdef __DEBUG_ALLOC__ 325 338 _heap_check(); 326 339 #endif 327 free( DItem);328 DItem = NULL;340 free(ppDItem); 341 ppDItem = NULL; 329 342 DosPostEventSem(CompactSem); 330 343 331 344 if(arcfile) { 332 fakeicon.cb = sizeof(DRAGIMAGE);333 fakeicon.cptl = 0;345 diFakeIcon.cb = sizeof(DRAGIMAGE); 346 diFakeIcon.cptl = 0; 334 347 if(ulNumfiles > 1) 335 fakeicon.hImage = hptrFile;336 fakeicon.fl = DRG_ICON;337 fakeicon.sizlStretch.cx = 32;338 fakeicon.sizlStretch.cy = 32;339 fakeicon.cxOffset = -16;340 fakeicon.cyOffset = 0;341 icon = &fakeicon;348 diFakeIcon.hImage = hptrFile; 349 diFakeIcon.fl = DRG_ICON; 350 diFakeIcon.sizlStretch.cx = 32; 351 diFakeIcon.sizlStretch.cy = 32; 352 diFakeIcon.cxOffset = -16; 353 diFakeIcon.cyOffset = 0; 354 padiIcon = &diFakeIcon; 342 355 } 343 356 if(!arcfile) { … … 351 364 hDrop = DrgDrag(hwndCnr, /* Initiate drag */ 352 365 pDInfo, /* DRAGINFO structure */ 353 icon,366 padiIcon, 354 367 ulNumIcon, 355 368 VK_ENDDRAG, /* End of drag indicator */ … … 357 370 358 371 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 359 free(icon); 360 icon = NULL; 372 if(padiIcon && padiIcon != &diFakeIcon) 373 free(padiIcon); 374 padiIcon = NULL; 361 375 WinSetWindowPos(hwndCnr,HWND_TOP,0,0,0,0,SWP_ACTIVATE); 362 376 DosPostEventSem(CompactSem); 363 377 } 364 378 } 365 if( DItem)366 free( DItem);367 if( icon)368 free( icon);379 if(ppDItem) 380 free(ppDItem); 381 if(padiIcon && padiIcon != &diFakeIcon) 382 free(padiIcon); 369 383 MarkAll(hwndCnr,TRUE,FALSE,TRUE); 370 384 return hDrop; … … 377 391 378 392 BOOL isdir; 379 register CHAR *p;393 register CHAR *p; 380 394 PDRAGINFO pDInfo = NULL; 381 DRAGITEM **DItem = NULL,**test;395 DRAGITEM **ppDItem = NULL,**ppTest; 382 396 HWND hDrop = (HWND)0; 383 397 register ULONG ulNumfiles = 0L,numdragalloc = 0L,Select,ulNumIcon = 0; 384 398 CHAR szFile[CCHMAXPATH],szBuffer[CCHMAXPATH]; 385 DRAGIMAGE *icon = NULL,*itest;399 DRAGIMAGE *padiIcon = NULL,*padiTest; 386 400 FILESTATUS3 fs3; 387 401 … … 405 419 ((fs3.attrFile & FILE_DIRECTORY) != 0); 406 420 if(ulNumfiles + 2L > numdragalloc) { 407 if(! icon) {408 itest = realloc(icon,sizeof(DRAGIMAGE) * (numdragalloc + 4L));409 if( itest)410 icon = itest;421 if(!padiIcon) { 422 padiTest = realloc(padiIcon,sizeof(DRAGIMAGE) * (numdragalloc + 4L)); 423 if(padiTest) 424 padiIcon = padiTest; 411 425 else 412 426 break; 413 427 } 414 428 else if(!ulNumIcon) { 415 icon[ulNumfiles].cb = sizeof(DRAGIMAGE);416 icon[ulNumfiles].cptl = 0;417 icon[ulNumfiles].hImage = hptrLast;418 icon[ulNumfiles].fl = DRG_ICON;419 icon[ulNumfiles].sizlStretch.cx = 32;420 icon[ulNumfiles].sizlStretch.cy = 32;421 icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4);422 icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7);429 padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE); 430 padiIcon[ulNumfiles].cptl = 0; 431 padiIcon[ulNumfiles].hImage = hptrLast; 432 padiIcon[ulNumfiles].fl = DRG_ICON; 433 padiIcon[ulNumfiles].sizlStretch.cx = 32; 434 padiIcon[ulNumfiles].sizlStretch.cy = 32; 435 padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 4); 436 padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 7); 423 437 ulNumIcon = ulNumfiles + 1; 424 438 } 425 test = realloc(DItem,sizeof(DRAGITEM *) * (numdragalloc + 4L));426 if( test) {427 DItem = test;439 ppTest = realloc(ppDItem,sizeof(DRAGITEM *) * (numdragalloc + 4L)); 440 if(ppTest) { 441 ppDItem = ppTest; 428 442 numdragalloc += 4L; 429 443 } … … 431 445 break; 432 446 } 433 DItem[ulNumfiles] = malloc(sizeof(DRAGITEM));434 if( DItem[ulNumfiles]) {447 ppDItem[ulNumfiles] = malloc(sizeof(DRAGITEM)); 448 if(ppDItem[ulNumfiles]) { 435 449 if(!ulNumIcon) { 436 icon[ulNumfiles].cb = sizeof(DRAGIMAGE); 437 icon[ulNumfiles].cptl = 0; 438 icon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile; 439 icon[ulNumfiles].fl = DRG_ICON; 440 icon[ulNumfiles].sizlStretch.cx = 32; 441 icon[ulNumfiles].sizlStretch.cy = 32; 442 icon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3); 443 icon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6); 444 } 445 memset(DItem[ulNumfiles],0,sizeof(DRAGITEM)); 446 DItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwnd; /* Initialize DRAGITEM */ 447 // DItem[ulNumfiles]->hwndItem = hwnd; 448 DItem[ulNumfiles]->ulItemID = (ULONG)Select; 449 DItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 450 DItem[ulNumfiles]->hstrRMF = 451 DrgAddStrHandle(DRMDRFLIST); 452 DItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 453 DItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 454 DItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 455 DItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; 450 padiIcon[ulNumfiles].cb = sizeof(DRAGIMAGE); 451 padiIcon[ulNumfiles].cptl = 0; 452 padiIcon[ulNumfiles].hImage = (isdir) ? hptrDir : hptrFile; 453 padiIcon[ulNumfiles].fl = DRG_ICON; 454 padiIcon[ulNumfiles].sizlStretch.cx = 32; 455 padiIcon[ulNumfiles].sizlStretch.cy = 32; 456 padiIcon[ulNumfiles].cxOffset = -16 + (ulNumfiles * 3); 457 padiIcon[ulNumfiles].cyOffset = 0 + (ulNumfiles * 6); 458 } 459 memset(ppDItem[ulNumfiles],0,sizeof(DRAGITEM)); 460 ppDItem[ulNumfiles]->hwndItem = (hwndObj) ? hwndObj : hwnd; /* Initialize DRAGITEM */ 461 // ppDItem[ulNumfiles]->hwndItem = hwnd; 462 ppDItem[ulNumfiles]->ulItemID = (ULONG)Select; 463 ppDItem[ulNumfiles]->hstrType = DrgAddStrHandle(DRT_UNKNOWN); 464 ppDItem[ulNumfiles]->hstrRMF = DrgAddStrHandle(DRMDRFLIST); 465 ppDItem[ulNumfiles]->hstrContainerName = DrgAddStrHandle(szBuffer); 466 ppDItem[ulNumfiles]->hstrSourceName = DrgAddStrHandle(szFile); 467 ppDItem[ulNumfiles]->hstrTargetName = DrgAddStrHandle(szFile); 468 ppDItem[ulNumfiles]->fsControl = (isdir) ? DC_CONTAINER : 0; 456 469 if(IsFullName(list[Select]) && 457 470 (driveflags[toupper(*list[Select]) - 'A'] & DRIVE_REMOVABLE)) 458 DItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA;459 DItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE;471 ppDItem[ulNumfiles]->fsControl |= DC_REMOVEABLEMEDIA; 472 ppDItem[ulNumfiles]->fsSupportedOps = DO_COPYABLE | DO_LINKABLE; 460 473 if(moveok && IsFullName(list[Select]) && 461 474 !(driveflags[toupper(*list[Select]) - 'A'] & DRIVE_NOTWRITEABLE)) 462 DItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE;475 ppDItem[ulNumfiles]->fsSupportedOps |= DO_MOVEABLE; 463 476 if(IsRoot(list[Select])) 464 DItem[ulNumfiles]->fsControl = DO_LINKABLE;477 ppDItem[ulNumfiles]->fsControl = DO_LINKABLE; 465 478 ulNumfiles++; 466 DItem[ulNumfiles] = NULL;479 ppDItem[ulNumfiles] = NULL; 467 480 } 468 481 else … … 482 495 pDInfo->usOperation = DO_LINK; 483 496 pDInfo->hwndSource = (hwndObj) ? hwndObj : hwnd; 484 //pDInfo->hwndSource = hwnd;497 // pDInfo->hwndSource = hwnd; 485 498 for(Select = 0L;Select < ulNumfiles;Select++) { 486 499 DrgSetDragitem(pDInfo, /* Set item in DRAGINFO */ 487 DItem[Select], /* Pointer to DRAGITEM */500 ppDItem[Select], /* Pointer to DRAGITEM */ 488 501 sizeof(DRAGITEM), /* Size of DRAGITEM */ 489 502 Select); /* Index of DRAGITEM */ 490 free( DItem[Select]);503 free(ppDItem[Select]); 491 504 } 492 505 #ifdef __DEBUG_ALLOC__ 493 506 _heap_check(); 494 507 #endif 495 free( DItem);496 DItem = NULL;508 free(ppDItem); 509 ppDItem = NULL; 497 510 DosPostEventSem(CompactSem); 498 511 … … 503 516 hDrop = DrgDrag(hwnd, /* Initiate drag */ 504 517 pDInfo, /* DRAGINFO structure */ 505 icon,518 padiIcon, 506 519 ulNumIcon, 507 520 VK_ENDDRAG, /* End of drag indicator */ … … 509 522 510 523 DrgFreeDraginfo(pDInfo); /* Free DRAGINFO struct */ 511 free( icon);512 icon = NULL;524 free(padiIcon); 525 padiIcon = NULL; 513 526 WinSetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_ACTIVATE); 514 527 DosPostEventSem(CompactSem); 515 528 } 516 529 } 517 if( DItem)518 free( DItem);519 if( icon)520 free( icon);530 if(ppDItem) 531 free(ppDItem); 532 if(padiIcon) 533 free(padiIcon); 521 534 return hDrop; 522 535 } … … 532 545 ULONG cditem = 0; 533 546 DRAGITEM ditem; 534 DRAGIMAGE fakeicon;547 DRAGIMAGE diFakeIcon; 535 548 CHAR szDir[CCHMAXPATH],szFile[CCHMAXPATH],*p; 536 549 … … 593 606 if(IsRoot(pci->szFileName)) 594 607 ditem.fsSupportedOps = DO_LINKABLE; 595 memset(& fakeicon,0,sizeof(DRAGIMAGE));596 fakeicon.hImage = pci->rc.hptrIcon;597 fakeicon.cb = sizeof(DRAGIMAGE);598 fakeicon.cptl = 0;599 fakeicon.fl = DRG_ICON;600 fakeicon.sizlStretch.cx = 32;601 fakeicon.sizlStretch.cy = 32;602 fakeicon.cxOffset = -16;603 fakeicon.cyOffset = 0;608 memset(&diFakeIcon,0,sizeof(DRAGIMAGE)); 609 diFakeIcon.hImage = pci->rc.hptrIcon; 610 diFakeIcon.cb = sizeof(DRAGIMAGE); 611 diFakeIcon.cptl = 0; 612 diFakeIcon.fl = DRG_ICON; 613 diFakeIcon.sizlStretch.cx = 32; 614 diFakeIcon.sizlStretch.cy = 32; 615 diFakeIcon.cxOffset = -16; 616 diFakeIcon.cyOffset = 0; 604 617 if(IsFullName(pci->szFileName) && 605 618 (driveflags[toupper(*pci->szFileName) - 'A'] & DRIVE_NOTWRITEABLE)) … … 621 634 } 622 635 if(pdinfoCurrent) 623 return DrgLazyDrag(hwndCnr,pdinfoCurrent,& fakeicon,1,NULL);636 return DrgLazyDrag(hwndCnr,pdinfoCurrent,&diFakeIcon,1,NULL); 624 637 } 625 638 return FALSE; 626 639 } 627 640 628 #endif 641 #endif // NEVER
Note:
See TracChangeset
for help on using the changeset viewer.