Changeset 687


Ignore:
Timestamp:
Jun 10, 2007, 8:41:52 PM (13 years ago)
Author:
Gregg Young
Message:

Add CheckPmDrgLimit? function to fix crash when dragging to FM/2 for other apps

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/HISTORY

    r668 r687  
    11New stuff's at the top.  This list is not necessarily complete.
    22
    3 3.05.09 (pending)
     33.05.09
    44 o Update readme to reflect warpin install and other code changes (David, John, Gregg)
    55 o Avoid spurious add_udir error reports (Steven)
     
    1111 o Correct FileInfoProc/IconProc race crash - ticket#77 (Steven)
    1212 o Convert to WarpIN installer - ticket #10 (David, John)
    13  o Work around for drag/drop limit in PM Bug 50 (Gregg, Steven)
     13 o Work around for drag/drop limit in PM ticket 50 (Gregg, Steven)
    1414 o Add RunFM2Utils function find utils in path or \utils (Gregg)
    1515 o Fix MMPM file scan to not try to play nonmedia files (Gregg)
  • trunk/dll/arccnrs.c

    r675 r687  
    11351135      li = DoFileDrop(dcd->hwndCnr,
    11361136                      dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
    1137       dcdsrc = INSTDATA(cni.pDragInfo->hwndSource);
    1138       if (dcdsrc->ulItemsToUnHilite) {
    1139         saymsg(MB_OK | MB_INFORMATION,
    1140                hwnd,
    1141                GetPString(IDS_ERRORTEXT),
    1142                GetPString(IDS_EXCEEDPMDRGLMT));
    1143       }
    1144 
     1137      CheckPmDrgLimit(cni.pDragInfo);
    11451138      if (li) {
    11461139        li->type = (msg == DM_DISCARDOBJECT) ? IDM_DELETE : IDM_PRINT;
     
    30433036          li = DoFileDrop(hwnd, dcd->arcname, FALSE, mp1, mp2);
    30443037          DosBeep(50, 100);             // fixme to know why beep?
    3045           dcdsrc = INSTDATA(((PCNRDRAGINFO)mp2)->pDragInfo->hwndSource);
    3046           if (dcdsrc->ulItemsToUnHilite) {
    3047             saymsg(MB_OK | MB_INFORMATION,
    3048                    hwnd,
    3049                    GetPString(IDS_ERRORTEXT),
    3050                    GetPString(IDS_EXCEEDPMDRGLMT));
    3051           }
     3038          CheckPmDrgLimit(((PCNRDRAGINFO)mp2)->pDragInfo);
    30523039          if (li) {
    30533040            li->type = li->type == DO_MOVE ? IDM_ARCHIVEM : IDM_ARCHIVE;
  • trunk/dll/collect.c

    r675 r687  
    462462      cni.pDragInfo = (PDRAGINFO) mp1;
    463463      li = DoFileDrop(dcd->hwndCnr, NULL, FALSE, MPVOID, MPFROMP(&cni));
    464       dcdsrc = INSTDATA(cni.pDragInfo->hwndSource);
    465       if (dcdsrc->ulItemsToUnHilite) {
    466         saymsg(MB_OK | MB_INFORMATION,
    467                hwnd,
    468                GetPString(IDS_ERRORTEXT),
    469                GetPString(IDS_EXCEEDPMDRGLMT));
    470       }
     464      CheckPmDrgLimit(cni.pDragInfo);
    471465      if (li) {
    472466        li->type = fDefaultDeletePerm ? IDM_PERMDELETE : IDM_DELETE;
     
    22632257          ULONG action = UM_ACTION;
    22642258
    2265           li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
    2266           dcdsrc = INSTDATA(((PCNRDRAGINFO)mp2)->pDragInfo->hwndSource);
    2267           if (dcdsrc->ulItemsToUnHilite) {
    2268             saymsg(MB_OK | MB_INFORMATION,
    2269                    hwnd,
    2270                    GetPString(IDS_ERRORTEXT),
    2271                    GetPString(IDS_EXCEEDPMDRGLMT));
    2272           }
     2259          li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     2260          CheckPmDrgLimit(((PCNRDRAGINFO)mp2)->pDragInfo);
    22732261          if (li) {
    22742262            if (!*li->targetpath) {
  • trunk/dll/dircnrs.c

    r675 r687  
    592592      li =
    593593        DoFileDrop(dcd->hwndCnr, dcd->directory, FALSE, MPVOID,
    594                    MPFROMP(&cni));
    595       dcdsrc = INSTDATA(cni.pDragInfo->hwndSource);
    596       if (dcdsrc->ulItemsToUnHilite) {
    597         saymsg(MB_OK | MB_INFORMATION,
    598                hwnd,
    599                GetPString(IDS_ERRORTEXT),
    600                GetPString(IDS_EXCEEDPMDRGLMT));
    601       }
     594                   MPFROMP(&cni));
     595      CheckPmDrgLimit(cni.pDragInfo);
    602596      if (li) {
    603597        li->type = (fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE;
     
    27432737              return (MRFROM2SHORT(DOR_NEVERDROP, 0));
    27442738          }
    2745           if (*dcd->directory &&
    2746               (driveflags[toupper(*dcd->directory) - 'A'] &
    2747                DRIVE_NOTWRITEABLE)) {
     2739          if (*dcd->directory &&
     2740             (driveflags[toupper(*dcd->directory) - 'A'] &
     2741              DRIVE_NOTWRITEABLE)) {
    27482742            DrgFreeDraginfo(pDInfo);
    27492743            return MRFROM2SHORT(DOR_DROP,       /* Return okay to link */
     
    28592853
    28602854          DbgMsg(pszSrcFile, __LINE__, "calling DoFileDrop");
    2861           li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2);
    2862           dcdsrc = INSTDATA(((PCNRDRAGINFO)mp2)->pDragInfo->hwndSource);
    2863 
    2864           if (dcdsrc->ulItemsToUnHilite) {
    2865             saymsg(MB_OK | MB_INFORMATION,
    2866                    hwnd,
    2867                    GetPString(IDS_ERRORTEXT),
    2868                    GetPString(IDS_EXCEEDPMDRGLMT));
    2869           }
    2870 
     2855          li = DoFileDrop(hwnd, dcd->directory, TRUE, mp1, mp2);
     2856          CheckPmDrgLimit(((PCNRDRAGINFO)mp2)->pDragInfo);
    28712857          if (li) {
    28722858            if (li->list && li->list[0] && IsRoot(li->list[0]))
  • trunk/dll/droplist.c

    r629 r687  
    3737static ULONG GetDropCount(HWND hwnd, MPARAM mp1);
    3838
    39 #pragma alloc_text(DROPLIST,DoFileDrop,FullDrgName,TwoDrgNames,GetOneDrop)
     39#pragma alloc_text(DROPLIST,DoFileDrop,FullDrgName,TwoDrgNames,GetOneDrop,CheckPmDrgLimit)
     40
     41BOOL CheckPmDrgLimit(PDRAGINFO pDInfo)
     42{
     43    /*
     44     * Checks for FM2 source window then checks window words
     45     * for ulItemsToUnHilite and if it is not zero displays a
     46     * message to the users that not all items are being dragged
     47     * returns TRUE on success
     48     */
     49          if (!DrgAccessDraginfo(pDInfo)) {
     50            Win_Error(HWND_DESKTOP, HWND_DESKTOP, pszSrcFile, __LINE__,
     51                      "DrgAccessDraginfo");
     52            return FALSE;
     53          }
     54          else if (IsFm2Window(pDInfo->hwndSource, FALSE)) {
     55            DIRCNRDATA *dcdsrc = INSTDATA(pDInfo->hwndSource);
     56            if (dcdsrc->ulItemsToUnHilite) {
     57            saymsg(MB_OK | MB_INFORMATION,
     58                   HWND_DESKTOP,
     59                   GetPString(IDS_ERRORTEXT),
     60                   GetPString(IDS_EXCEEDPMDRGLMT));
     61            }
     62            DrgFreeDraginfo(pDInfo);
     63          }
     64          return TRUE;
     65}
    4066
    4167BOOL TwoDrgNames(PDRAGITEM pDItem, CHAR * buffer1, ULONG buflen1,
  • trunk/dll/fm3dll.h

    r672 r687  
    678678
    679679/* misc.c */
     680BOOL IsFm2Window(HWND hwnd, BOOL chkTid);
    680681VOID SetShiftState(VOID);
    681682void EmphasizeButton(HWND hwnd, BOOL on);
     
    10681069                     MPARAM mp1, MPARAM mp2);
    10691070VOID FreeDragInfoData (HWND hwnd, PDRAGINFO pDInfo);
     1071BOOL CheckPmDrgLimit(PDRAGINFO pDInfo);
    10701072
    10711073/* shadow.c */
  • trunk/dll/mainwnd.c

    r675 r687  
    12411241      cdi.pDragInfo = mp1;
    12421242      li = DoFileDrop(hwnd, NULL, FALSE, mp1, MPFROMP(&cdi));
    1243       dcd = INSTDATA(cdi.pDragInfo->hwndSource);
    1244       if (dcd->ulItemsToUnHilite) {
    1245         saymsg(MB_OK | MB_INFORMATION,
    1246                hwnd,
    1247                GetPString(IDS_ERRORTEXT),
    1248                GetPString(IDS_EXCEEDPMDRGLMT));
    1249       }
     1243      CheckPmDrgLimit(cdi.pDragInfo);
    12501244      if (li) {
    12511245        li->type = id;
     
    18161810      li = DoFileDrop(hwnd,
    18171811                      NULL,
    1818                       TRUE, MPFROM2SHORT(TREE_CNR, CN_DROP), MPFROMP(&cnd));
    1819       dcd = INSTDATA(cnd.pDragInfo->hwndSource);
    1820       if (dcd && dcd->ulItemsToUnHilite) {
    1821         saymsg(MB_OK | MB_INFORMATION,
    1822                hwnd,
    1823                GetPString(IDS_ERRORTEXT),
    1824                GetPString(IDS_EXCEEDPMDRGLMT));
    1825       }
     1812                      TRUE, MPFROM2SHORT(TREE_CNR, CN_DROP), MPFROMP(&cnd));
     1813      CheckPmDrgLimit(cnd.pDragInfo);
    18261814      if (li) {
    18271815        strcpy(li->targetpath, szDrv);
  • trunk/dll/misc.c

    r555 r687  
    4747
    4848#pragma alloc_text(MAINWND5,SetSysMenu)
    49 #pragma alloc_text(MISC1,BoxWindow,PaintRecessedWindow,PostMsg,PaintSTextWindow)
     49#pragma alloc_text(MISC1,BoxWindow,PaintRecessedWindow,PostMsg,PaintSTextWindow,IsFm2Window)
    5050#pragma alloc_text(MISC1,FixSwitchList,FindDirCnr,CurrentRecord,SetShiftState,AddToListboxBottom)
    5151#pragma alloc_text(CNR_MISC1,AdjustCnrColVis,AdjustCnrColsForFSType)
     
    7474#define ORD_DOS32QUERYEXTLIBPATH 874
    7575#endif
     76
     77BOOL IsFm2Window(HWND hwnd, BOOL chkTid)
     78{
     79    PIB *ppib;
     80    TIB *ptib;
     81    APIRET rc;
     82
     83    rc = DosGetInfoBlocks(&ptib, &ppib);
     84    if (rc)
     85      Dos_Error(MB_CANCEL, rc, HWND_DESKTOP, pszSrcFile, __LINE__,
     86                "DosGetInfoBlocks");
     87    else {
     88      PID pid;
     89      TID tid;
     90
     91      if (WinQueryWindowProcess(hwnd, &pid, &tid))
     92        if (chkTid) {
     93          // If window owned by FM2 process on same thread?
     94          if (pid == ppib->pib_ulpid && tid == ptib->tib_ptib2->tib2_ultid)
     95            return TRUE;
     96        }
     97      //Window is owned by FM2
     98        else if (pid == ppib->pib_ulpid)
     99          return TRUE;
     100    }
     101    return FALSE;
     102}
    76103
    77104VOID SetShiftState(VOID)
     
    13641391
    13651392  if (!rc) {
    1366     PIB *ppib;
     1393   /* PIB *ppib;
    13671394    TIB *ptib;
    13681395
     
    13741401      if (WinQueryWindowProcess(h, &pid, &tid)) {
    13751402        // If window owned by some other process or some other thread?
    1376         if (pid != ppib->pib_ulpid || tid != ptib->tib_ptib2->tib2_ultid) {
     1403        if (pid != ppib->pib_ulpid || tid != ptib->tib_ptib2->tib2_ultid)*/
     1404      if(!IsFm2Window(h, 1)){
     1405          QMSG qmsg;
    13771406          for (;;) {
    13781407            DosSleep(1L);
     
    13861415          }                             // for
    13871416        }
    1388       }
    1389     }
    1390   }
     1417    }
    13911418  return rc;
    13921419}
  • trunk/dll/treecnr.c

    r675 r687  
    548548      cni.pDragInfo = (PDRAGINFO) mp1;
    549549      li = DoFileDrop(dcd->hwndCnr,
    550                       dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
    551       dcdsrc = INSTDATA(cni.pDragInfo->hwndSource);
    552       if (dcdsrc->ulItemsToUnHilite) {
    553         saymsg(MB_OK | MB_INFORMATION,
    554                hwnd,
    555                GetPString(IDS_ERRORTEXT),
    556                GetPString(IDS_EXCEEDPMDRGLMT));
    557       }
     550                      dcd->directory, FALSE, MPVOID, MPFROMP(&cni));
     551      CheckPmDrgLimit(cni.pDragInfo);
    558552      if (li) {
    559553        li->type = ((fDefaultDeletePerm) ? IDM_PERMDELETE : IDM_DELETE);
     
    12201214                                  MPFROMLONG(CMA_FIRST), MPFROMP(&pqr));
    12211215      if (!pci || (INT) pci == -1)
    1222         Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
     1216        break; //Probable B3 click on white space Runtime_Error2(pszSrcFile, __LINE__, IDS_NODATATEXT);
    12231217      else {
    12241218        memset(&nr, 0, sizeof(nr));
     
    13821376          ULONG action = UM_ACTION;
    13831377
    1384           li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
    1385           dcdsrc = INSTDATA(((PCNRDRAGINFO)mp2)->pDragInfo->hwndSource);
    1386           if (dcdsrc->ulItemsToUnHilite) {
    1387             saymsg(MB_OK | MB_INFORMATION,
    1388                    hwnd,
    1389                    GetPString(IDS_ERRORTEXT),
    1390                    GetPString(IDS_EXCEEDPMDRGLMT));
    1391           }
     1378          li = DoFileDrop(hwnd, NULL, TRUE, mp1, mp2);
     1379          CheckPmDrgLimit(((PCNRDRAGINFO)mp2)->pDragInfo);
    13921380          if (li) {
    13931381            if (!*li->targetpath) {
  • trunk/dll/version.h

    r684 r687  
    4848// Ensure VERREALMINOR nul for non-beta releases
    4949// #define VERREALMINOR   ""
    50 #define VERREALMINOR   "09 " __DATE__ " " __TIME__
     50#define VERREALMINOR   ".09 "
     51//#define VERREALMINOR   ".09 " __DATE__ " " __TIME__
    5152
    5253#define APPNAME         "FM2"
  • trunk/warpin/fm2.wis

    r681 r687  
    1919<HEAD>
    2020<REXX NAME=UtilsCheck>
    21    if stream(WirexxGetEnv('WI_ARCHIVE_PATH') || '\fm2utils-1-0.wpi', 'c', 'query exists') = '' then
     21   if stream(WirexxGetEnv('WI_ARCHIVE_PATH') || '\fm2utils-1-1.wpi', 'c', 'query exists') = '' then
    2222      return '3'
    2323   else
     
    7272  PACKAGEID="Netlabs\FM2 Utilities\FM2Utils\1\0\0"
    7373  TITLE="FM/2 Utilities"
    74   EXTERNAL="fm2utils-1-0.wpi"
     74  EXTERNAL="fm2utils-1-1.wpi"
    7575  TARGET="$(1)\Utils"
    7676  SELECT
Note: See TracChangeset for help on using the changeset viewer.