Changeset 1060


Ignore:
Timestamp:
Jul 8, 2008, 10:09:33 PM (17 years ago)
Author:
John Small
Message:

Ticket 242: Ensure that obsolete INI keys are deleted when re-saving
a directory container state with fewer open windows than those in the
previous state.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/dll/mainwnd.c

    r1056 r1060  
    9696static BOOL CloseDirCnrChildren(HWND hwndClient);
    9797static BOOL RestoreDirCnrState(HWND hwndClient, PSZ pszStateName, BOOL noview);
     98static VOID DeletePresParams(PSZ pszKeyroot);
    9899
    99100static MRESULT EXPENTRY MainObjectWndProc(HWND hwnd, ULONG msg, MPARAM mp1,
     
    27932794  HWND hwndChild, hwndDir, hwndC;
    27942795  ULONG numsaves = 0, flWindowAttr;
     2796  ULONG previous_numsaves, ulTemp = sizeof(ULONG);
    27952797  CHAR szPrefix[STATE_NAME_MAX_BYTES + 1];
    27962798  CHAR szKey[STATE_NAME_MAX_BYTES + 80];
    27972799  CHAR szDir[CCHMAXPATH];
    27982800  SWP swp;
    2799   INT nSaved = 0;
    28002801  DIRCNRDATA *dcd;
    28012802  BOOL fIsShutDownState;
     
    29012902            sprintf(szKey, "%sDirCnrDir.%lu", szPrefix, numsaves++);
    29022903            PrfWriteProfileString(fmprof, FM3Str, szKey, szDir);
    2903             nSaved++;
    29042904          }
    29052905        }
     
    29092909  WinEndEnumWindows(henum);
    29102910
    2911   if (nSaved) {
    2912     if (WinQueryWindowPos(hwndTree, &swp)) {
    2913       sprintf(szKey, "%sLastTreePos", szPrefix);
    2914       PrfWriteProfileData(fmprof, FM3Str, szKey, (PVOID) & swp, sizeof(SWP));
    2915     }
    2916     sprintf(szKey, "%sNumDirsLastTime", szPrefix);
     2911  sprintf(szKey, "%sNumDirsLastTime", szPrefix);
     2912  if (PrfQueryProfileData(fmprof, FM3Str, szKey, (PVOID) &previous_numsaves, &ulTemp))
     2913    for (ulTemp = numsaves; ulTemp < previous_numsaves; ulTemp++) {
     2914      sprintf(szKey, "%sDirCnrPos.%lu", szPrefix, ulTemp);
     2915      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(SWP));
     2916      sprintf(szKey, "%sDirCnrSort.%lu", szPrefix, ulTemp);
     2917      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(INT));
     2918      sprintf(szKey, "%sDirCnrFilter.%lu", szPrefix, ulTemp);
     2919      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(MASK));
     2920      sprintf(szKey, "%sDirCnrView.%lu", szPrefix, ulTemp);
     2921      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(ULONG));
     2922      sprintf(szKey, "%sDirCnr.%lu.DetailsLongname", szPrefix, ulTemp);
     2923      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2924      sprintf(szKey, "%sDirCnr.%lu.DetailsSubject", szPrefix, ulTemp);
     2925      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2926      sprintf(szKey, "%sDirCnr.%lu.DetailsSize", szPrefix, ulTemp);
     2927      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2928      sprintf(szKey, "%sDirCnr.%lu.DetailsEA", szPrefix, ulTemp);
     2929      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2930      sprintf(szKey, "%sDirCnr.%lu.DetailsAttr", szPrefix, ulTemp);
     2931      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2932      sprintf(szKey, "%sDirCnr.%lu.DetailsIcon", szPrefix, ulTemp);
     2933      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2934      sprintf(szKey, "%sDirCnr.%lu.DetailsLWDate", szPrefix, ulTemp);
     2935      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2936      sprintf(szKey, "%sDirCnr.%lu.DetailsLWTime", szPrefix, ulTemp);
     2937      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2938      sprintf(szKey, "%sDirCnr.%lu.DetailsLADate", szPrefix, ulTemp);
     2939      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2940      sprintf(szKey, "%sDirCnr.%lu.DetailsLATime", szPrefix, ulTemp);
     2941      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2942      sprintf(szKey, "%sDirCnr.%lu.DetailsCRDate", szPrefix, ulTemp);
     2943      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2944      sprintf(szKey, "%sDirCnr.%lu.DetailsCRTime", szPrefix, ulTemp);
     2945      PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, sizeof(BOOL));
     2946      sprintf(szKey, "%sDirCnrDir.%lu", szPrefix, ulTemp);
     2947      PrfWriteProfileString(fmprof, FM3Str, szKey, NULL);
     2948      sprintf(szKey, "%sDirCnr.%lu.", szPrefix, ulTemp);
     2949      DeletePresParams(szKey);
     2950    }
     2951  sprintf(szKey, "%sNumDirsLastTime", szPrefix);
     2952  if (numsaves) {
    29172953    PrfWriteProfileData(fmprof, FM3Str, szKey, (PVOID) & numsaves, sizeof(ULONG));
    29182954    WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swp);
    29192955    sprintf(szKey, "%sMySizeLastTime", szPrefix);
    29202956    PrfWriteProfileData(fmprof, FM3Str, szKey, (PVOID) & swp, sizeof(SWP));
     2957    if (WinQueryWindowPos(hwndTree, &swp)) {
     2958      sprintf(szKey, "%sLastTreePos", szPrefix);
     2959      PrfWriteProfileData(fmprof, FM3Str, szKey, (PVOID) & swp, sizeof(SWP));
     2960    }
    29212961  }
    29222962  else if (fIsShutDownState) {
    2923     sprintf(szKey, "%sNumDirsLastTime", szPrefix);
    29242963    PrfWriteProfileData(fmprof, FM3Str, szKey, (PVOID) & numsaves, sizeof(ULONG));
    29252964  }
    29262965
    2927   return nSaved;
     2966  return numsaves;
    29282967}
    29292968
     
    30123051    WinQueryWindowPos(WinQueryWindow(hwndClient, QW_PARENT), &swpO);
    30133052  }
    3014   // If restoring saved shutdown state or internally saved state, forget info
     3053  // If restoring internally saved state, forget info
    30153054  if (fDeleteState)
    30163055    PrfWriteProfileData(fmprof, FM3Str, szKey, NULL, 0L);
     
    63676406}
    63686407
     6408VOID DeletePresParams(CHAR * pchKeyroot)
     6409// This code assumes that pchKeyroot points to a buffer large enough to
     6410// hold the full INI key: The state name.dircnr-number.PPName. The
     6411// PPNames are listed below.
     6412{
     6413  PSZ apszPPNames[] =
     6414  {
     6415    "Backgroundcolor",
     6416    "Foregroundcolor",
     6417    "Hilitebackgroundcolor",
     6418    "Hiliteforegroundcolor",
     6419    "Bordercolor",
     6420    "Fontnamesize"
     6421  };
     6422
     6423  ULONG ulSize, ulArraySize = sizeof(apszPPNames) / sizeof(PSZ), x;
     6424  CHAR * eos = pchKeyroot + strlen(pchKeyroot);
     6425
     6426  for (x = 0; x < ulArraySize; x++)
     6427  {
     6428    strcpy(eos, apszPPNames[x]);
     6429    if (PrfQueryProfileSize(fmprof, appname, pchKeyroot, &ulSize) && ulSize)
     6430    {
     6431      PrfWriteProfileData(fmprof, appname, pchKeyroot, NULL, ulSize);
     6432    }
     6433  }
     6434}
     6435
    63696436#pragma alloc_text(MISC8,SetToggleChecks,FindDirCnrByName,TopWindow)
    63706437#pragma alloc_text(MISC8,TopWindowName,CountDirCnrs)
Note: See TracChangeset for help on using the changeset viewer.