Repository :
https://github.com/FarGroup/FarManager
On branch : master
Link :
https://github.com/FarGroup/FarManager/commit/6d95444ce745dfeaf789fc2f7a742ca0ab455cb6
>---------------------------------------------------------------
commit 6d95444ce745dfeaf789fc2f7a742ca0ab455cb6
Author: Alex Alabuzhev <
alab...@gmail.com>
Date: Thu Apr 2 20:07:15 2026 +0100
Do not refresh viewer if there are no changes
>---------------------------------------------------------------
6d95444ce745dfeaf789fc2f7a742ca0ab455cb6
far/viewer.cpp | 31 +++++++++++++------------------
1 file changed, 13 insertions(+), 18 deletions(-)
diff --git a/far/viewer.cpp b/far/viewer.cpp
index 599bda543..4a25860cd 100644
--- a/far/viewer.cpp
+++ b/far/viewer.cpp
@@ -610,26 +610,20 @@ void Viewer::AdjustWidth()
bool Viewer::CheckChanged()
{
os::fs::find_data NewViewFindData;
- if (!os::fs::get_find_data(strFullFileName, NewViewFindData))
+
+ if (!ViewFile.GetTime({}, {}, &NewViewFindData.LastWriteTime, {}))
return true;
- // Smart file change check -- thanks Dzirt2005
- //
- bool changed = ViewFindData.LastWriteTime != NewViewFindData.LastWriteTime || ViewFindData.FileSize != NewViewFindData.FileSize;
- if (changed)
- {
- ViewFindData = NewViewFindData;
- }
- else
- {
- if (!ViewFile.GetSize(NewViewFindData.FileSize) || FileSize == static_cast<long long>(NewViewFindData.FileSize))
- return true;
+ if (!ViewFile.GetSize(NewViewFindData.FileSize))
+ return true;
- changed = FileSize > static_cast<long long>(NewViewFindData.FileSize); // true if file shrank
- }
+ if (ViewFindData.LastWriteTime == NewViewFindData.LastWriteTime && ViewFindData.FileSize == NewViewFindData.FileSize)
+ return false;
- SetFileSize();
- if (changed) // do not reset caches if file just enlarged [make sense on Win7, doesn't matter on XP]
+ const auto Shrunk = NewViewFindData.FileSize < ViewFindData.FileSize;
+ ViewFindData = NewViewFindData;
+
+ if (Shrunk) // do not reset caches if file just enlarged [make sense on Win7, doesn't matter on XP]
{
Reader.Clear(); // иначе зачем вся эта возня?
ViewFile.FlushBuffers();
@@ -637,7 +631,7 @@ bool Viewer::CheckChanged()
lcache_ready = false; // reset start-lines cache
}
- return changed;
+ return true;
}
void Viewer::ShowPage(int nMode)
@@ -1644,7 +1638,8 @@ bool Viewer::process_key(const Manager::Key& Key)
{
if (ViewFile)
{
- CheckChanged();
+ if (!CheckChanged())
+ return true;
if (FilePos > FileSize)
{