OSDN Git Service

Fix issue #951: Reloading a file that was changed by another application does not...
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 22 Sep 2021 23:07:47 +0000 (08:07 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Wed, 22 Sep 2021 23:07:47 +0000 (08:07 +0900)
Externals/crystaledit/editlib/ccrystaltextbuffer.cpp
Externals/crystaledit/editlib/ccrystaltextbuffer.h
Src/MergeDoc.cpp

index 3767ef9..97dd5c5 100644 (file)
@@ -2049,6 +2049,12 @@ void CCrystalTextBuffer::SetColumnWidth (int nColumnIndex, int nColumnWidth)
   m_pSharedTableProps->m_aColumnWidths[nColumnIndex] = nColumnWidth;
 }
 
+void CCrystalTextBuffer::SetColumnWidths (const std::vector<int>& columnWidths)
+{
+  ASSERT( m_pSharedTableProps != nullptr );
+  m_pSharedTableProps->m_aColumnWidths = columnWidths;
+}
+
 int CCrystalTextBuffer::GetColumnCount (int nLineIndex) const
 {
   ASSERT( nLineIndex >= 0 );
index a02fd79..664ff46 100644 (file)
@@ -314,6 +314,8 @@ public :
     }
     int  GetColumnWidth (int nColumnIndex) const;
     void SetColumnWidth (int nColumnIndex, int nColumnWidth);
+    std::vector<int> GetColumnWidths () const { return m_pSharedTableProps->m_aColumnWidths; }
+    void SetColumnWidths (const std::vector<int>& columnWidths);
     int  GetColumnCount (int nLineIndex) const;
     void SetAllowNewlinesInQuotes (bool bAllowNewlinesInQuotes) { m_bAllowNewlinesInQuotes = bAllowNewlinesInQuotes; }
     TCHAR GetAllowNewlinesInQuotes () const { return m_bAllowNewlinesInQuotes; }
index 5ad01e1..75aba58 100644 (file)
@@ -3338,9 +3338,16 @@ void CMergeDoc::ChangeFile(int nBuffer, const String& path, int nLineIndex)
        strDesc[nBuffer] = _T("");
        fileloc[nBuffer].setPath(path);
        fileloc[nBuffer].encoding = codepage_detect::Guess(path, GetOptionsMgr()->GetInt(OPT_CP_DETECT));
+
+       bool filenameChanged = path != m_filePaths[nBuffer];
+       auto columnWidths = m_ptBuf[nBuffer]->GetColumnWidths();
        
        if (OpenDocs(m_nBuffers, fileloc, bRO, strDesc))
+       {
+               if (!filenameChanged)
+                       m_ptBuf[nBuffer]->SetColumnWidths(columnWidths);
                MoveOnLoad(nBuffer, nLineIndex);
+       }
 }
 
 /**
@@ -3567,8 +3574,12 @@ void CMergeDoc::OnFileReload()
                fileloc[pane].setPath(m_filePaths[pane]);
        }
        CPoint pt = GetActiveMergeView()->GetCursorPos();
+       auto columnWidths = m_ptBuf[0]->GetColumnWidths();
        if (OpenDocs(m_nBuffers, fileloc, bRO, m_strDesc))
+       {
+               m_ptBuf[0]->SetColumnWidths(columnWidths);
                MoveOnLoad(GetActiveMergeView()->m_nThisPane, pt.y);
+       }
 }
 
 /**