diff options
author | Tomasz Zarna | 2009-12-07 16:04:51 +0000 |
---|---|---|
committer | Tomasz Zarna | 2009-12-07 16:04:51 +0000 |
commit | 8952b2f2bbe4401d893c24d01215df0a9b7f1166 (patch) | |
tree | 58ea17d154918c444c261b848e278aa47b50546e | |
parent | 76ae3cddf096425658251c967983ff4d8f9f576f (diff) | |
download | eclipse.platform.team-8952b2f2bbe4401d893c24d01215df0a9b7f1166.tar.gz eclipse.platform.team-8952b2f2bbe4401d893c24d01215df0a9b7f1166.tar.xz eclipse.platform.team-8952b2f2bbe4401d893c24d01215df0a9b7f1166.zip |
bug 296580: [compare] Java Compare Editor: 'Copy Current Change from Right to Left' garbles contents
-rw-r--r-- | bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java index 95543c348..ef292c32d 100644 --- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java +++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java @@ -760,13 +760,7 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable { if (document == null) return; - // Add a position updater to the document - document.addPositionCategory(DIFF_RANGE_CATEGORY); - if (this.fViewer.fPositionUpdater == null) - this.fViewer.fPositionUpdater= this.fViewer.new ChildPositionUpdater(DIFF_RANGE_CATEGORY); - else - document.removePositionUpdater(this.fViewer.fPositionUpdater); - document.addPositionUpdater(this.fViewer.fPositionUpdater); + connectPositionUpdater(document); // install new document tp.setRegion(range); @@ -781,6 +775,15 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable { tp.rememberDocument(document); } + + void connectPositionUpdater(IDocument document) { + document.addPositionCategory(DIFF_RANGE_CATEGORY); + if (this.fViewer.fPositionUpdater == null) + this.fViewer.fPositionUpdater= this.fViewer.new ChildPositionUpdater(DIFF_RANGE_CATEGORY); + else + document.removePositionUpdater(this.fViewer.fPositionUpdater); + document.addPositionUpdater(this.fViewer.fPositionUpdater); + } private void unsetDocument(MergeSourceViewer tp) { IDocument oldDoc= internalGetDocument(tp); @@ -2821,9 +2824,9 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable { fAncestorContributor.setEncodingIfAbsent(fLeftContributor); if (!isConfigured) { - configureSourceViewer(fAncestor.getSourceViewer(), false); - configureSourceViewer(fLeft.getSourceViewer(), cc.isLeftEditable() && cp.isLeftEditable(input)); - configureSourceViewer(fRight.getSourceViewer(), cc.isRightEditable() && cp.isRightEditable(input)); + configureSourceViewer(fAncestor.getSourceViewer(), false, null); + configureSourceViewer(fLeft.getSourceViewer(), cc.isLeftEditable() && cp.isLeftEditable(input), fLeftContributor); + configureSourceViewer(fRight.getSourceViewer(), cc.isRightEditable() && cp.isRightEditable(input), fRightContributor); isConfigured = true; // configure once } @@ -2878,9 +2881,14 @@ public class TextMergeViewer extends ContentMergeViewer implements IAdaptable { } - private void configureSourceViewer(SourceViewer sourceViewer, boolean editable) { + private void configureSourceViewer(SourceViewer sourceViewer, boolean editable, ContributorInfo contributor) { setEditable(sourceViewer, editable); configureTextViewer(sourceViewer); + if (editable && contributor != null) { + IDocument document = sourceViewer.getDocument(); + if (document != null) + contributor.connectPositionUpdater(document); + } if (!isCursorLinePainterInstalled(sourceViewer)) getSourceViewerDecorationSupport(sourceViewer).install(fPreferenceStore); } |