Bug 575277: [SourceEditor] Fix background color for preview and snippet
editors in dark theme

Change-Id: I35df96e427bc02a7f8bcd995fb2ad3a1d54587ff
diff --git a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
index 59b38c7..a4ff798 100644
--- a/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
+++ b/ltk/org.eclipse.statet.ltk.ui/META-INF/MANIFEST.MF
@@ -19,6 +19,8 @@
  org.eclipse.core.expressions,
  org.eclipse.ui,
  org.eclipse.jface.databinding,
+ org.eclipse.e4.ui.css.core,
+ org.eclipse.e4.ui.css.swt,
  org.eclipse.ui.editors;visibility:=reexport,
  org.eclipse.ui.workbench.texteditor;visibility:=reexport,
  org.eclipse.ui.views,
@@ -59,6 +61,8 @@
  org.eclipse.statet.ltk.ui.sourceediting.actions,
  org.eclipse.statet.ltk.ui.sourceediting.assist,
  org.eclipse.statet.ltk.ui.sourceediting.folding,
+ org.eclipse.statet.ltk.ui.sourceediting.swt,
+ org.eclipse.statet.ltk.ui.sourceediting.util,
  org.eclipse.statet.ltk.ui.templates,
  org.eclipse.statet.ltk.ui.templates.config,
  org.eclipse.statet.ltk.ui.util,
diff --git a/ltk/org.eclipse.statet.ltk.ui/plugin.xml b/ltk/org.eclipse.statet.ltk.ui/plugin.xml
index 8cfc621..031dfba 100644
--- a/ltk/org.eclipse.statet.ltk.ui/plugin.xml
+++ b/ltk/org.eclipse.statet.ltk.ui/plugin.xml
@@ -1173,6 +1173,46 @@
       </theme>
    </extension>
    <extension
+         point="org.eclipse.e4.ui.css.core.elementProvider">
+      <provider
+             class="org.eclipse.statet.internal.ltk.ui.css.CustomSwtElementProvider">
+         <widget
+               class="org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText"/>
+      </provider>
+   </extension>
+   <extension
+         point="org.eclipse.e4.ui.css.core.propertyHandler">
+      <handler
+            adapter="org.eclipse.statet.internal.ltk.ui.css.EnhStyledTextElement"
+            handler="org.eclipse.statet.internal.ltk.ui.css.NoopCssPropertyHandler">
+         <property-name
+               name="background-color"/>
+         <property-name
+               name="color"/>
+      </handler>
+      <handler
+            adapter="org.eclipse.statet.internal.ltk.ui.css.EnhStyledTextElement"
+            handler="org.eclipse.statet.internal.ltk.ui.css.NoopCssPropertyHandler"
+            composite="true">
+         <property-name
+               name="font"/>
+         <property-name
+               name="font-family"/>
+         <property-name
+               name="font-size"/>
+         <property-name
+               name="font-adjust"/>
+         <property-name
+               name="font-stretch"/>
+         <property-name
+               name="font-style"/>
+         <property-name
+               name="font-variant"/>
+         <property-name
+               name="font-weight"/>
+      </handler>
+   </extension>
+   <extension
          point="org.eclipse.e4.ui.css.swt.theme">
       <stylesheet
             uri="css/e4_dark.css">
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java
deleted file mode 100644
index 30b2e3a..0000000
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/TextViewerEditorColorUpdater.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2011, 2021 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.ecommons.text.ui;
-
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND;
-import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.PreferenceConverter;
-import org.eclipse.jface.text.source.ISourceViewer;
-import org.eclipse.jface.text.source.SourceViewer;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-import org.eclipse.statet.ecommons.ui.util.UIAccess;
-
-
-@NonNullByDefault
-public class TextViewerEditorColorUpdater {
-	
-	
-	protected final ISourceViewer viewer;
-	protected final IPreferenceStore preferenceStore;
-	
-	private @Nullable IPropertyChangeListener listener;
-	
-	
-	public TextViewerEditorColorUpdater(final SourceViewer viewer, final IPreferenceStore preferenceStore) {
-		assert (viewer != null);
-		assert (preferenceStore != null);
-		
-		this.viewer= viewer;
-		this.preferenceStore= preferenceStore;
-		
-		viewer.getTextWidget().addDisposeListener(new DisposeListener() {
-			@Override
-			public void widgetDisposed(final DisposeEvent e) {
-				dispose();
-			}
-		});
-		
-		this.listener= new IPropertyChangeListener() {
-			@Override
-			public void propertyChange(final PropertyChangeEvent event) {
-				if (PREFERENCE_COLOR_FOREGROUND.equals(event.getProperty())
-						|| PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
-						|| PREFERENCE_COLOR_BACKGROUND.equals(event.getProperty())
-						|| PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
-						|| PREFERENCE_COLOR_SELECTION_FOREGROUND.equals(event.getProperty())
-						|| PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT.equals(event.getProperty())
-						|| PREFERENCE_COLOR_SELECTION_BACKGROUND.equals(event.getProperty())
-						|| PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT.equals(event.getProperty()) ) {
-					updateColors();
-				}
-			}
-		};
-		this.preferenceStore.addPropertyChangeListener(this.listener);
-		
-		updateColors();
-	}
-	
-	
-	protected void updateColors() {
-		final var viewer= this.viewer;
-		final StyledText styledText= viewer.getTextWidget();
-		if (styledText != null && !styledText.isDisposed()) {
-			update(viewer, styledText);
-		}
-	}
-	
-	protected void update(final ISourceViewer viewer, final StyledText styledText) {
-		{	// foreground color
-			final Color color= this.preferenceStore.getBoolean(
-					PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT) ? null :
-							createColor(this.preferenceStore, PREFERENCE_COLOR_FOREGROUND);
-			styledText.setForeground(color);
-		}
-		{	// background color
-			final Color color= this.preferenceStore.getBoolean(
-					PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT) ? null :
-							createColor(this.preferenceStore, PREFERENCE_COLOR_BACKGROUND);
-			styledText.setBackground(color);
-		}
-		{	// selection foreground color
-			final Color color= this.preferenceStore.getBoolean(
-					PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT) ? null :
-							createColor(this.preferenceStore, PREFERENCE_COLOR_SELECTION_FOREGROUND);
-			styledText.setSelectionForeground(color);
-		}
-		{	// selection background color
-			final Color color= this.preferenceStore.getBoolean(
-					PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT) ? null :
-							createColor(this.preferenceStore, PREFERENCE_COLOR_SELECTION_BACKGROUND);
-			styledText.setSelectionBackground(color);
-		}
-	}
-	
-	protected @Nullable Color createColor(final IPreferenceStore store, final String key) {
-		final RGB rgb= PreferenceConverter.getColor(store, key);
-		return (rgb != null) ? new Color(rgb) : null;
-	}
-	
-	
-	protected void dispose() {
-		{	final var listener= this.listener;
-			if (listener != null) {
-				this.listener= null;
-				this.preferenceStore.removePropertyChangeListener(listener);
-			}
-		}
-		
-		final StyledText styledText= this.viewer.getTextWidget();
-		if (UIAccess.isOkToUse(styledText)) {
-			styledText.setForeground(null);
-			styledText.setBackground(null);
-			styledText.setSelectionForeground(null);
-			styledText.setSelectionBackground(null);
-		}
-	}
-	
-}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
index 82e04a1..3189510 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ecommons/text/ui/presentation/AbstractTextStylesConfigurationBlock.java
@@ -82,8 +82,6 @@
 import org.eclipse.statet.ecommons.preferences.ui.OverlayStorePreference;
 import org.eclipse.statet.ecommons.preferences.ui.PreferenceStoreBeanWrapper;
 import org.eclipse.statet.ecommons.preferences.ui.RGBPref;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
 import org.eclipse.statet.ecommons.text.ui.presentation.AbstractTextStylesConfigurationBlock.SyntaxNode.UseStyle;
 import org.eclipse.statet.ecommons.text.ui.settings.JFaceTextStyleManager;
 import org.eclipse.statet.ecommons.text.ui.settings.PreferenceStoreTextStyleManager;
@@ -95,6 +93,7 @@
 import org.eclipse.statet.ecommons.ui.viewers.ViewerUtils.Node;
 
 import org.eclipse.statet.internal.ecommons.text.ui.Messages;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfiguration;
 
 
@@ -701,12 +700,9 @@
 	private Control createPreviewer(final Composite parent) {
 		final IPreferenceStore store= new ChainedPreferenceStore(new IPreferenceStore[] {
 				this.fOverlayStore, EditorsUI.getPreferenceStore() });
-		this.previewViewer= new SourceViewer(parent, null, null, false, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);
-		this.previewViewer.setEditable(false);
+		this.previewViewer= new PreviewSourceViewer(parent, store);
 		this.configuration= getSourceViewerConfiguration(store);
 		this.previewViewer.configure(this.configuration);
-		new TextViewerJFaceUpdater(this.previewViewer, store);
-		new TextViewerEditorColorUpdater(this.previewViewer, store);
 		
 		final String content= loadPreviewContentFromFile(getPreviewFileName());
 		final IDocument document= new Document(content);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java
new file mode 100644
index 0000000..0fff330
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/PreviewSourceViewer.java
@@ -0,0 +1,67 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui;
+
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.editors.text.EditorsUI;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+import org.eclipse.statet.ltk.ui.sourceediting.util.SourceViewerEditorPreferenceUpdater;
+
+
+@NonNullByDefault
+public class PreviewSourceViewer extends SourceViewer {
+	
+	
+	public PreviewSourceViewer(final Composite parent,
+			final boolean manageFont,
+			final IPreferenceStore preferenceStore) {
+		super(parent, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+		
+		setEditable(false);
+		
+		final var textWidget= nonNullAssert(getTextWidget());
+		new SourceViewerEditorPreferenceUpdater(this, true, manageFont, preferenceStore);
+		if (!manageFont) {
+			textWidget.setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
+		}
+	}
+	
+	public PreviewSourceViewer(final Composite parent,
+			final IPreferenceStore preferenceStore) {
+		this(parent, true, preferenceStore);
+	}
+	
+	public PreviewSourceViewer(final Composite parent) {
+		this(parent, true, EditorsUI.getPreferenceStore());
+	}
+	
+	
+	@Override
+	protected StyledText createTextWidget(final Composite parent, final int styles) {
+		return EnhStyledText.forSourceEditor(parent, styles);
+	}
+	
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java
new file mode 100644
index 0000000..4799874
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/CustomSwtElementProvider.java
@@ -0,0 +1,45 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.dom.IElementProvider;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+
+import org.w3c.dom.Element;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class CustomSwtElementProvider implements IElementProvider {
+	
+	
+	public CustomSwtElementProvider() {
+	}
+	
+	
+	@Override
+	public @Nullable Element getElement(Object element, CSSEngine engine) {
+		if (element instanceof EnhStyledText) {
+			return new EnhStyledTextElement((EnhStyledText)element, engine);
+		}
+		return null;
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java
new file mode 100644
index 0000000..11bd5f1
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/EnhStyledTextElement.java
@@ -0,0 +1,35 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+import org.eclipse.e4.ui.css.swt.dom.ControlElement;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class EnhStyledTextElement extends ControlElement {
+	
+	
+	public EnhStyledTextElement(final EnhStyledText control, final CSSEngine engine) {
+		super(control, engine);
+	}
+	
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java
new file mode 100644
index 0000000..c97fcf6
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/internal/ltk/ui/css/NoopCssPropertyHandler.java
@@ -0,0 +1,43 @@
+/*=============================================================================#
+ # Copyright (c) 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.ltk.ui.css;
+
+import org.eclipse.e4.ui.css.core.dom.properties.ICSSPropertyHandler;
+import org.eclipse.e4.ui.css.core.engine.CSSEngine;
+
+import org.w3c.dom.css.CSSValue;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+
+@NonNullByDefault
+@SuppressWarnings("restriction")
+public class NoopCssPropertyHandler implements ICSSPropertyHandler {
+	
+	
+	public NoopCssPropertyHandler() {
+	}
+	
+	
+	@Override
+	public boolean applyCSSProperty(final Object element,
+			final String property, final CSSValue value, final @Nullable String pseudo,
+			final CSSEngine engine) throws Exception {
+		return true;
+	}
+	
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java
deleted file mode 100644
index 04e841a..0000000
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/ExtStyledText.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2021 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.ltk.ui.sourceediting;
-
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.widgets.Composite;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-
-
-@NonNullByDefault
-public class ExtStyledText extends StyledText {
-	
-	
-	private @Nullable Color customBackgroundColor;
-	private @Nullable Color customForegroundColor;
-	
-	private boolean inSetEnabled;
-	
-	
-	public ExtStyledText(final Composite parent, final int style) {
-		super(parent, style);
-	}
-	
-	
-	@Override
-	public void setEnabled(final boolean enabled) {
-		this.inSetEnabled= true;
-		try {
-			if (enabled) {
-				super.setEnabled(true);
-				applyCustomBackgroundColor();
-				applyCustomForegroundColor();
-			}
-			else {
-				super.setBackground(null);
-				super.setForeground(null);
-				super.setEnabled(false);
-			}
-		}
-		finally {
-			this.inSetEnabled= false;
-		}
-	}
-	
-	@Override
-	public void setBackground(final @Nullable Color color) {
-		if (this.inSetEnabled) {
-			super.setBackground(color);
-		}
-		else {
-			this.customBackgroundColor= color;
-			if (isEnabled()) {
-				applyCustomBackgroundColor();
-			}
-		}
-	}
-	
-	private void applyCustomBackgroundColor() {
-		super.setBackground(this.customBackgroundColor);
-		if (this.customBackgroundColor == null) { // workaround for bug 573707
-			super.setBackground(getBackground());
-		}
-	}
-	
-	@Override
-	public void setForeground(final @Nullable Color color) {
-		if (this.inSetEnabled) {
-			super.setForeground(color);
-		}
-		else {
-			this.customForegroundColor= color;
-			if (isEnabled()) {
-				applyCustomForegroundColor();
-			}
-		}
-	}
-	
-	private void applyCustomForegroundColor() {
-		super.setForeground(this.customForegroundColor);
-		if (this.customForegroundColor == null) { // workaround for bug 573707
-			super.setForeground(getForeground());
-		}
-	}
-	
-}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
index 8fed8ad..6ee3ad7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/SnippetEditor.java
@@ -50,8 +50,6 @@
 import org.eclipse.statet.ecommons.commands.core.HandlerCollection;
 import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
 import org.eclipse.statet.ecommons.text.ui.TextViewerAction;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
 import org.eclipse.statet.ecommons.ui.actions.ControlServicesUtil;
 import org.eclipse.statet.ecommons.ui.components.WidgetToolsButton;
 import org.eclipse.statet.ecommons.ui.util.LayoutUtils;
@@ -59,6 +57,9 @@
 import org.eclipse.statet.ecommons.ui.workbench.ContextHandlers;
 import org.eclipse.statet.ecommons.ui.workbench.texteditor.ActionHandler;
 
+import org.eclipse.statet.ltk.ui.sourceediting.swt.EnhStyledText;
+import org.eclipse.statet.ltk.ui.sourceediting.util.SourceViewerEditorPreferenceUpdater;
+
 
 /**
  * Text snippet editor (no Eclipse editor) supporting {@link SourceEditorViewerConfigurator}.
@@ -215,9 +216,7 @@
 		
 		final ViewerSourceEditorAdapter adapter= new ViewerSourceEditorAdapter(this.sourceViewer, this.configurator);
 		this.configurator.setTarget(adapter);
-		new TextViewerJFaceUpdater(this.sourceViewer,
-				this.configurator.getSourceViewerConfiguration().getPreferences() );
-		new TextViewerEditorColorUpdater(this.sourceViewer,
+		new SourceViewerEditorPreferenceUpdater(this.sourceViewer,
 				this.configurator.getSourceViewerConfiguration().getPreferences() );
 		new SettingsUpdater(this.configurator, this.sourceViewer.getControl());
 	}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java
similarity index 97%
rename from ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java
rename to ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java
index 16aabd0..ec7f6a7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/EnhStyledText.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/swt/EnhStyledText.java
@@ -12,7 +12,7 @@
  #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
  #=============================================================================*/
 
-package org.eclipse.statet.ltk.ui.sourceediting;
+package org.eclipse.statet.ltk.ui.sourceediting.swt;
 
 import org.eclipse.swt.custom.StyledText;
 import org.eclipse.swt.graphics.Color;
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java
new file mode 100644
index 0000000..72e7692
--- /dev/null
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/util/SourceViewerEditorPreferenceUpdater.java
@@ -0,0 +1,211 @@
+/*=============================================================================#
+ # Copyright (c) 2011, 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.ltk.ui.sourceediting.util;
+
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND;
+import static org.eclipse.ui.texteditor.AbstractTextEditor.PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT;
+
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.RGB;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+
+@NonNullByDefault
+public class SourceViewerEditorPreferenceUpdater {
+	
+	
+	protected final ISourceViewer viewer;
+	
+	private final boolean manageColors;
+	private final boolean manageFont;
+	
+	protected final IPreferenceStore preferenceStore;
+	private @Nullable IPropertyChangeListener preferenceStoreListener;
+	
+	private @Nullable IPropertyChangeListener fontRegistryListener;
+	
+	
+	public SourceViewerEditorPreferenceUpdater(final SourceViewer viewer,
+			final boolean manageColors, final boolean manageFont,
+			final IPreferenceStore preferenceStore ) {
+		this.viewer= nonNullAssert(viewer);
+		
+		this.manageColors= manageColors;
+		this.manageFont= manageColors;
+		
+		this.preferenceStore= nonNullAssert(preferenceStore);
+		
+		final var textWidget= nonNullAssert(viewer.getTextWidget());
+		textWidget.addDisposeListener(new DisposeListener() {
+			@Override
+			public void widgetDisposed(final DisposeEvent e) {
+				dispose();
+			}
+		});
+		
+		if (this.manageColors) {
+			final IPropertyChangeListener listener= new IPropertyChangeListener() {
+				@Override
+				public void propertyChange(final PropertyChangeEvent event) {
+					final String prefKey= event.getProperty();
+					final boolean updateColors= (SourceViewerEditorPreferenceUpdater.this.manageColors
+							&& (PREFERENCE_COLOR_FOREGROUND.equals(prefKey)
+									|| PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT.equals(prefKey)
+									|| PREFERENCE_COLOR_BACKGROUND.equals(prefKey)
+									|| PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT.equals(prefKey)
+									|| PREFERENCE_COLOR_SELECTION_FOREGROUND.equals(prefKey)
+									|| PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT.equals(prefKey)
+									|| PREFERENCE_COLOR_SELECTION_BACKGROUND.equals(prefKey)
+									|| PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT.equals(prefKey) ));
+					final boolean updateFont= false;
+					if (updateColors || updateFont) {
+						update(updateColors, updateFont);
+					}
+				}
+			};
+			this.preferenceStoreListener= listener;
+			this.preferenceStore.addPropertyChangeListener(listener);
+		}
+		if (this.manageFont) {
+			final var listener= new IPropertyChangeListener() {
+				@Override
+				public void propertyChange(final PropertyChangeEvent event) {
+					final String prefKey= event.getProperty();
+					final boolean updateFont= (getSymbolicFontName().equals(prefKey));
+					if (updateFont) {
+						update(false, updateFont);
+					}
+				}
+			};
+			this.fontRegistryListener= listener;
+			JFaceResources.getFontRegistry().addListener(listener);
+		}
+		
+		update(this.manageColors, this.manageFont);
+	}
+	
+	public SourceViewerEditorPreferenceUpdater(final SourceViewer viewer,
+			final IPreferenceStore preferenceStore) {
+		this(viewer, true, true, preferenceStore);
+	}
+	
+	
+	protected String getSymbolicFontName() {
+		return JFaceResources.TEXT_FONT;
+	}
+	
+	
+	protected void update(final boolean updateColors, final boolean updateFont) {
+		final var viewer= this.viewer;
+		final StyledText styledText= viewer.getTextWidget();
+		if (styledText != null && !styledText.isDisposed()) {
+			if (updateColors) {
+				updateColors(viewer, styledText);
+			}
+			if (updateFont) {
+				updateFont(viewer, styledText);
+			}
+		}
+	}
+	
+	protected void updateColors(final ISourceViewer viewer, final StyledText styledText) {
+		{	// foreground color
+			final Color color= this.preferenceStore.getBoolean(
+					PREFERENCE_COLOR_FOREGROUND_SYSTEM_DEFAULT) ? null :
+							createColor(this.preferenceStore, PREFERENCE_COLOR_FOREGROUND);
+			styledText.setForeground(color);
+		}
+		{	// background color
+			final Color color= this.preferenceStore.getBoolean(
+					PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT) ? null :
+							createColor(this.preferenceStore, PREFERENCE_COLOR_BACKGROUND);
+			styledText.setBackground(color);
+		}
+		{	// selection foreground color
+			final Color color= this.preferenceStore.getBoolean(
+					PREFERENCE_COLOR_SELECTION_FOREGROUND_SYSTEM_DEFAULT) ? null :
+							createColor(this.preferenceStore, PREFERENCE_COLOR_SELECTION_FOREGROUND);
+			styledText.setSelectionForeground(color);
+		}
+		{	// selection background color
+			final Color color= this.preferenceStore.getBoolean(
+					PREFERENCE_COLOR_SELECTION_BACKGROUND_SYSTEM_DEFAULT) ? null :
+							createColor(this.preferenceStore, PREFERENCE_COLOR_SELECTION_BACKGROUND);
+			styledText.setSelectionBackground(color);
+		}
+	}
+	
+	protected @Nullable Color createColor(final IPreferenceStore store, final String key) {
+		final RGB rgb= PreferenceConverter.getColor(store, key);
+		return (rgb != null) ? new Color(rgb) : null;
+	}
+	
+	protected void updateFont(final ISourceViewer viewer, final StyledText styledText) {
+		{	final Font font= JFaceResources.getFont(getSymbolicFontName());
+			styledText.setFont(font);
+		}
+	}
+	
+	
+	protected void dispose() {
+		{	final var listener= this.preferenceStoreListener;
+			if (listener != null) {
+				this.preferenceStoreListener= null;
+				this.preferenceStore.removePropertyChangeListener(listener);
+			}
+		}
+		{	final var listener= this.fontRegistryListener;
+			if (listener != null) {
+				this.fontRegistryListener= null;
+				JFaceResources.getFontRegistry().removeListener(listener);
+			}
+		}
+		
+		final var styledText= this.viewer.getTextWidget();
+		if (styledText != null && !styledText.isDisposed()) {
+			if (this.manageColors) {
+				styledText.setForeground(null);
+				styledText.setBackground(null);
+				styledText.setSelectionForeground(null);
+				styledText.setSelectionBackground(null);
+			}
+			if (this.manageFont) {
+				styledText.setFont(null);
+			}
+		}
+	}
+	
+}
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
index 6593053..9aa01b7 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/TemplatePreview.java
@@ -17,24 +17,22 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.source.SourceViewer;
 import org.eclipse.jface.text.templates.Template;
 import org.eclipse.jface.text.templates.TemplateContextType;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.text.templates.ContextTypeRegistry;
 import org.eclipse.ui.editors.text.EditorsUI;
 
 import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
 import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
 import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
 import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
@@ -62,10 +60,8 @@
 	}
 	
 	public SourceViewer createSourceViewer(final Composite parent) {
-		final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		viewer.setEditable(false);
-		viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
-		new TextViewerEditorColorUpdater(viewer, EditorsUI.getPreferenceStore());
+		final SourceViewer viewer= new PreviewSourceViewer(parent, false,
+				EditorsUI.getPreferenceStore() );
 		
 		final IDocument document= new Document();
 		viewer.setDocument(document);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
index 13c7e52..250820d 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractEditorTemplatesPage.java
@@ -21,7 +21,6 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.AbstractDocument;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.BadPartitioningException;
@@ -33,9 +32,7 @@
 import org.eclipse.jface.text.templates.TemplateContextType;
 import org.eclipse.jface.text.templates.persistence.TemplateStore;
 import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.editors.text.EditorsUI;
 import org.eclipse.ui.texteditor.ITextEditor;
 import org.eclipse.ui.texteditor.templates.AbstractTemplatesPage;
 import org.eclipse.ui.texteditor.templates.ITemplatesPage;
@@ -48,12 +45,12 @@
 import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
 import org.eclipse.statet.ecommons.text.core.util.TextUtils;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
 import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
 import org.eclipse.statet.ecommons.ui.ISettingsChangedHandler;
 import org.eclipse.statet.ecommons.ui.util.UIAccess;
 
 import org.eclipse.statet.internal.ltk.ui.LtkUIPlugin;
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
 import org.eclipse.statet.ltk.model.core.ModelManager;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
@@ -223,10 +220,7 @@
 	
 	@Override
 	protected SourceViewer createPatternViewer(final Composite parent) {
-		final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		viewer.setEditable(false);
-		viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
-		new TextViewerEditorColorUpdater(viewer, EditorsUI.getPreferenceStore());
+		final SourceViewer viewer= new PreviewSourceViewer(parent);
 		
 		final IDocument document= new Document();
 		viewer.setDocument(document);
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
index e4e5fb4..4760543 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/templates/config/AbstractTemplatesPreferencePage.java
@@ -15,7 +15,6 @@
 package org.eclipse.statet.ltk.ui.templates.config;
 
 import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.AbstractDocument;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
@@ -24,16 +23,14 @@
 import org.eclipse.jface.text.templates.TemplateContextType;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.window.Window;
-import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.text.templates.TemplatePersistenceData;
 import org.eclipse.ui.texteditor.templates.TemplatePreferencePage;
 
 import org.eclipse.statet.ecommons.preferences.ui.SettingsUpdater;
 import org.eclipse.statet.ecommons.templates.TemplateVariableProcessor;
-import org.eclipse.statet.ecommons.text.ui.TextViewerEditorColorUpdater;
-import org.eclipse.statet.ecommons.text.ui.TextViewerJFaceUpdater;
 
+import org.eclipse.statet.internal.ltk.ui.PreviewSourceViewer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
 import org.eclipse.statet.ltk.ui.sourceediting.ViewerSourceEditorAdapter;
 import org.eclipse.statet.ltk.ui.templates.EnhTemplateStore;
@@ -82,18 +79,13 @@
 	
 	@Override
 	protected SourceViewer createViewer(final Composite parent) {
-		final SourceViewer viewer= new SourceViewer(parent, null, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		viewer.setEditable(false);	
-		viewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));
+		final SourceViewer viewer= new PreviewSourceViewer(parent,
+				this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
 		
 		final ViewerSourceEditorAdapter adapter= new ViewerSourceEditorAdapter(viewer, null);
 		this.viewerConfigurator.setTarget(adapter);
 		// updater
 		new SettingsUpdater(this.viewerConfigurator, viewer.getControl());
-		new TextViewerJFaceUpdater(viewer, 
-				this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
-		new TextViewerEditorColorUpdater(viewer, 
-				this.viewerConfigurator.getSourceViewerConfiguration().getPreferences() );
 		
 		final IDocument document= new Document();
 		this.viewerConfigurator.getDocumentSetupParticipant().setup(document);