From c41f3d342054c07ecfb90891f652a815260f79f0 Mon Sep 17 00:00:00 2001 From: Sven Strickroth Date: Tue, 29 Jul 2014 14:54:40 +0200 Subject: [PATCH] Sync markedlines stuff with TortoiseMerge Based on TortoiseMerge revision #25712. Signed-off-by: Sven Strickroth --- src/TortoiseMerge/BaseView.cpp | 12 +++++++++++- src/TortoiseMerge/Undo.cpp | 5 +++++ src/TortoiseMerge/Undo.h | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/TortoiseMerge/BaseView.cpp b/src/TortoiseMerge/BaseView.cpp index c4fceaabf..6146a8299 100644 --- a/src/TortoiseMerge/BaseView.cpp +++ b/src/TortoiseMerge/BaseView.cpp @@ -5001,6 +5001,7 @@ void CBaseView::SetViewLineEnding( int index, EOL ending ) void CBaseView::SetViewMarked( int index, bool marked ) { + m_pState->markedlines[index] = m_pViewData->GetMarked(index); m_pViewData->SetMarked(index, marked); } @@ -5893,7 +5894,7 @@ void CBaseView::UseViewBlock(CBaseView * pwndView, int nFirstViewLine, int nLast for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++) { - if (skipMarked && GetViewMarked(viewLine)) + if (skipMarked && (GetViewMarked(viewLine) || GetViewState(viewLine) == DIFFSTATE_EDITED)) continue; viewdata line = pwndView->GetViewData(viewLine); if (line.ending != EOL_NOENDING) @@ -5996,8 +5997,17 @@ void CBaseView::UseViewBlock(CBaseView * pwndView, int nFirstViewLine, int nLast void CBaseView::MarkBlock(bool marked, int nFirstViewLine, int nLastViewLine) { + if (!IsWritable()) + return; + CUndo::GetInstance().BeginGrouping(); + for (int viewLine = nFirstViewLine; viewLine <= nLastViewLine; viewLine++) SetViewMarked(viewLine, marked); + + SetModified(); + SaveUndoStep(); + CUndo::GetInstance().EndGrouping(); + BuildAllScreen2ViewVector(); Invalidate(); RefreshViews(); diff --git a/src/TortoiseMerge/Undo.cpp b/src/TortoiseMerge/Undo.cpp index 098153c38..69cddbc83 100644 --- a/src/TortoiseMerge/Undo.cpp +++ b/src/TortoiseMerge/Undo.cpp @@ -41,6 +41,7 @@ void viewstate::Clear() linestates.clear(); linelines.clear(); linesEOL.clear(); + markedlines.clear(); addedlines.clear(); removedlines.clear(); @@ -258,6 +259,10 @@ void CUndo::Undo(const viewstate& state, CBaseView * pView, const POINT& pt) { viewData->SetLineEnding(it->first, (EOL)it->second); } + for (std::map::const_iterator it = state.markedlines.begin(); it != state.markedlines.end(); ++it) + { + viewData->SetMarked(it->first, (EOL)it->second); + } for (std::map::const_iterator it = state.difflines.begin(); it != state.difflines.end(); ++it) { viewData->SetLine(it->first, it->second); diff --git a/src/TortoiseMerge/Undo.h b/src/TortoiseMerge/Undo.h index ed4302464..e9841242f 100644 --- a/src/TortoiseMerge/Undo.h +++ b/src/TortoiseMerge/Undo.h @@ -34,6 +34,7 @@ typedef struct viewstate std::map linestates; std::map linelines; std::map linesEOL; + std::map markedlines; std::list addedlines; std::map removedlines; -- 2.11.4.GIT