@@ -959,7 +959,8 @@ bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isSnapshotMode)
959959}
960960else
961961{
962- res = doSaveOrNot (buf->getFullPathName (), true );
962+ size_t nbDirtyFiles = MainFileManager.getNbDirtyBuffers ();
963+ res = doSaveOrNot (buf->getFullPathName (), nbDirtyFiles > 1 );
963964}
964965
965966if (res == IDYES)
@@ -1040,7 +1041,8 @@ bool Notepad_plus::fileCloseAll(bool doDeleteBackup, bool isSnapshotMode)
10401041}
10411042else
10421043{
1043- res = doSaveOrNot (buf->getFullPathName (), true );
1044+ size_t nbDirtyFiles = MainFileManager.getNbDirtyBuffers ();
1045+ res = doSaveOrNot (buf->getFullPathName (), nbDirtyFiles > 1 );
10441046}
10451047
10461048if (res == IDYES)
@@ -1096,6 +1098,17 @@ bool Notepad_plus::fileCloseAllGiven(const std::vector<int>& krvecBufferIndexes)
10961098bool saveToAll = false ;
10971099std::vector<int > bufferIndexesToClose;
10981100
1101+ // Count the number of dirty file
1102+ size_t nbDirtyFiles = 0 ;
1103+ for (const auto & index : krvecBufferIndexes)
1104+ {
1105+ BufferID id = _pDocTab->getBufferByIndex (index);
1106+ Buffer* buf = MainFileManager.getBufferByID (id);
1107+
1108+ if (buf->isDirty ())
1109+ ++nbDirtyFiles;
1110+ }
1111+
10991112for (const auto & index : krvecBufferIndexes)
11001113{
11011114BufferID id = _pDocTab->getBufferByIndex (index);
@@ -1126,8 +1139,9 @@ bool Notepad_plus::fileCloseAllGiven(const std::vector<int>& krvecBufferIndexes)
11261139* IDNO : No
11271140* IDIGNORE : No To All
11281141* IDCANCEL : Cancel Opration
1129- */
1130- int res = saveToAll ? IDYES : doSaveOrNot (buf->getFullPathName (), true );
1142+ */
1143+
1144+ int res = saveToAll ? IDYES : doSaveOrNot (buf->getFullPathName (), nbDirtyFiles > 1 );
11311145
11321146if (res == IDYES || res == IDRETRY)
11331147{
@@ -1245,7 +1259,13 @@ bool Notepad_plus::fileCloseAllButCurrent()
12451259}
12461260else
12471261{
1248- res = doSaveOrNot (buf->getFullPathName (), true );
1262+ size_t nbDirtyFiles = MainFileManager.getNbDirtyBuffers ();
1263+
1264+ // if current file is dirty, if should be removed from dirty files to make nbDirtyFiles accurate
1265+ Buffer* currentBuf = MainFileManager.getBufferByID (current);
1266+ nbDirtyFiles -= currentBuf->isDirty () ? 1 : 0 ;
1267+
1268+ res = doSaveOrNot (buf->getFullPathName (), nbDirtyFiles > 1 );
12491269}
12501270
12511271if (res == IDYES)
@@ -1309,7 +1329,13 @@ bool Notepad_plus::fileCloseAllButCurrent()
13091329}
13101330else
13111331{
1312- res = doSaveOrNot (buf->getFullPathName (), true );
1332+ size_t nbDirtyFiles = MainFileManager.getNbDirtyBuffers ();
1333+
1334+ // if current file is dirty, if should be removed from dirty files to make nbDirtyFiles accurate
1335+ Buffer* currentBuf = MainFileManager.getBufferByID (current);
1336+ nbDirtyFiles -= currentBuf->isDirty () ? 1 : 0 ;
1337+
1338+ res = doSaveOrNot (buf->getFullPathName (), nbDirtyFiles > 1 );
13131339}
13141340
13151341
0 commit comments