From bf4290500d98bd6d310748913dbd46edb97c7d70 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Mon, 9 Jul 2007 12:43:01 +0000 Subject: [PATCH] Workaround for 195808: ProjectionViewer: Toggling between segmented and projection mode can fail --- .../cdt/internal/ui/editor/CEditor.java | 1 + .../cdt/internal/ui/editor/CSourceViewer.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java index 5d9ab3e65ec..491af275cfe 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CEditor.java @@ -2592,6 +2592,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IC fOpenInViewGroup.fillActionBars(actionBars); fRefactoringActionGroup.fillActionBars(actionBars); fGenerateActionGroup.fillActionBars(actionBars); + fFoldingGroup.updateActionBars(); } /* diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java index 22d2223c15d..fe9279e41b5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/CSourceViewer.java @@ -99,6 +99,11 @@ public class CSourceViewer extends ProjectionViewer implements IPropertyChangeLi * @since 4.0 */ private boolean fIsSetVisibleDocumentDelayed; + /** + * Whether projection mode was enabled when switching to segmented mode. + * Workaround for https://bugs.eclipse.org/bugs/show_bug.cgi?id=195808 + */ + private boolean fWasProjectionMode; /** * Creates new source viewer. @@ -420,4 +425,26 @@ public class CSourceViewer extends ProjectionViewer implements IPropertyChangeLi return null; } + /* + * @see org.eclipse.jface.text.source.projection.ProjectionViewer#setVisibleRegion(int, int) + */ + public void setVisibleRegion(int start, int length) { + // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=195808 + if (!fWasProjectionMode && isProjectionMode()) { + fWasProjectionMode= true; + } + super.setVisibleRegion(start, length); + } + + /* + * @see org.eclipse.jface.text.source.projection.ProjectionViewer#resetVisibleRegion() + */ + public void resetVisibleRegion() { + super.resetVisibleRegion(); + // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=195808 + if (fWasProjectionMode) { + fWasProjectionMode= false; + enableProjection(); + } + } }