Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 577472

Summary: Dark Theme resets the Text Editor "foreground color", ignoring preference settings
Product: [Eclipse Project] Platform Reporter: Mickael Istria <mistria>
Component: UIAssignee: Platform-UI-Inbox <Platform-UI-Inbox>
Status: CLOSED DUPLICATE QA Contact:
Severity: major    
Priority: P3 CC: Lars.Vogel
Version: 4.21   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:

Description Mickael Istria CLA 2021-11-25 14:44:24 EST
To reproduce
1. Open a file in the basic text editor (without any syntax highlighting)
2. Go to Preferences > General > Editor > Text Editors; change the "Foreground Color"; Apply and Close
  => See color changed in editor
3. move focus to another widget or window
  => EXPECTED: Text Color remains the same
  => GOT: Text Color modified.

a stacktrace to explain that change is
```
Thread [main] (Suspended (breakpoint at line 9279 in StyledText))	
	StyledText.setForeground(Color) line: 9279	
	CSSSWTColorHelper.setForeground(Control, Color) line: 366	
	CSSPropertyTextSWTHandler.applyCSSPropertyColor(Object, CSSValue, String, CSSEngine) line: 75	
	CSSPropertyTextSWTHandler(AbstractCSSPropertyTextHandler).applyCSSProperty(Object, String, CSSValue, String, CSSEngine) line: 34	
	CSSPropertyTextSWTHandler.applyCSSProperty(Object, String, CSSValue, String, CSSEngine) line: 41	
	CSSSWTEngineImpl(AbstractCSSEngine).applyCSSProperty(Object, String, CSSValue, String) line: 746	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyleDeclaration(Object, CSSStyleDeclaration, String) line: 552	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 426	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	AbstractCSSEngine.lambda$0(BiConsumer, boolean, Node) line: 258	
	0x00000001004337a0.accept(Object) line: not available	
	ForEachOps$ForEachOp$OfRef<T>.accept(T) line: 183	
	ReferencePipeline$3$1.accept(P_OUT) line: 197	
	Spliterators$ArraySpliterator<T>.forEachRemaining(Consumer<? super T>) line: 948	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).copyInto(Sink<P_IN>, Spliterator<P_IN>) line: 484	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).wrapAndCopyInto(S, Spliterator<P_IN>) line: 474	
	ForEachOps$ForEachOp$OfRef<T>(ForEachOps$ForEachOp<T>).evaluateSequential(PipelineHelper<T>, Spliterator<S>) line: 150	
	ForEachOps$ForEachOp$OfRef<T>.evaluateSequential(PipelineHelper, Spliterator) line: 173	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).evaluate(TerminalOp<E_OUT,R>) line: 234	
	ReferencePipeline$3(ReferencePipeline<P_IN,P_OUT>).forEach(Consumer<? super P_OUT>) line: 596	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 257	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	AbstractCSSEngine.lambda$0(BiConsumer, boolean, Node) line: 258	
	0x00000001004337a0.accept(Object) line: not available	
	ForEachOps$ForEachOp$OfRef<T>.accept(T) line: 183	
	ReferencePipeline$3$1.accept(P_OUT) line: 197	
	Spliterators$ArraySpliterator<T>.forEachRemaining(Consumer<? super T>) line: 948	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).copyInto(Sink<P_IN>, Spliterator<P_IN>) line: 484	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).wrapAndCopyInto(S, Spliterator<P_IN>) line: 474	
	ForEachOps$ForEachOp$OfRef<T>(ForEachOps$ForEachOp<T>).evaluateSequential(PipelineHelper<T>, Spliterator<S>) line: 150	
	ForEachOps$ForEachOp$OfRef<T>.evaluateSequential(PipelineHelper, Spliterator) line: 173	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).evaluate(TerminalOp<E_OUT,R>) line: 234	
	ReferencePipeline$3(ReferencePipeline<P_IN,P_OUT>).forEach(Consumer<? super P_OUT>) line: 596	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 257	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	AbstractCSSEngine.lambda$0(BiConsumer, boolean, Node) line: 258	
	0x00000001004337a0.accept(Object) line: not available	
	ForEachOps$ForEachOp$OfRef<T>.accept(T) line: 183	
	ReferencePipeline$3$1.accept(P_OUT) line: 197	
	Spliterators$ArraySpliterator<T>.forEachRemaining(Consumer<? super T>) line: 948	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).copyInto(Sink<P_IN>, Spliterator<P_IN>) line: 484	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).wrapAndCopyInto(S, Spliterator<P_IN>) line: 474	
	ForEachOps$ForEachOp$OfRef<T>(ForEachOps$ForEachOp<T>).evaluateSequential(PipelineHelper<T>, Spliterator<S>) line: 150	
	ForEachOps$ForEachOp$OfRef<T>.evaluateSequential(PipelineHelper, Spliterator) line: 173	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).evaluate(TerminalOp<E_OUT,R>) line: 234	
	ReferencePipeline$3(ReferencePipeline<P_IN,P_OUT>).forEach(Consumer<? super P_OUT>) line: 596	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 257	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	AbstractCSSEngine.lambda$0(BiConsumer, boolean, Node) line: 258	
	0x00000001004337a0.accept(Object) line: not available	
	ForEachOps$ForEachOp$OfRef<T>.accept(T) line: 183	
	ReferencePipeline$3$1.accept(P_OUT) line: 197	
	Spliterators$ArraySpliterator<T>.forEachRemaining(Consumer<? super T>) line: 948	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).copyInto(Sink<P_IN>, Spliterator<P_IN>) line: 484	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).wrapAndCopyInto(S, Spliterator<P_IN>) line: 474	
	ForEachOps$ForEachOp$OfRef<T>(ForEachOps$ForEachOp<T>).evaluateSequential(PipelineHelper<T>, Spliterator<S>) line: 150	
	ForEachOps$ForEachOp$OfRef<T>.evaluateSequential(PipelineHelper, Spliterator) line: 173	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).evaluate(TerminalOp<E_OUT,R>) line: 234	
	ReferencePipeline$3(ReferencePipeline<P_IN,P_OUT>).forEach(Consumer<? super P_OUT>) line: 596	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 257	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	AbstractCSSEngine.lambda$0(BiConsumer, boolean, Node) line: 258	
	0x00000001004337a0.accept(Object) line: not available	
	ForEachOps$ForEachOp$OfRef<T>.accept(T) line: 183	
	ReferencePipeline$3$1.accept(P_OUT) line: 197	
	Spliterators$ArraySpliterator<T>.forEachRemaining(Consumer<? super T>) line: 948	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).copyInto(Sink<P_IN>, Spliterator<P_IN>) line: 484	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).wrapAndCopyInto(S, Spliterator<P_IN>) line: 474	
	ForEachOps$ForEachOp$OfRef<T>(ForEachOps$ForEachOp<T>).evaluateSequential(PipelineHelper<T>, Spliterator<S>) line: 150	
	ForEachOps$ForEachOp$OfRef<T>.evaluateSequential(PipelineHelper, Spliterator) line: 173	
	ReferencePipeline$3(AbstractPipeline<E_IN,E_OUT,S>).evaluate(TerminalOp<E_OUT,R>) line: 234	
	ReferencePipeline$3(ReferencePipeline<P_IN,P_OUT>).forEach(Consumer<? super P_OUT>) line: 596	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 257	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	0x0000000100433568.accept(Object, Object) line: not available	
	CSSSWTEngineImpl(AbstractCSSEngine).processNodeList(NodeList, BiConsumer<Node,Boolean>, boolean) line: 263	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean, boolean) line: 443	
	CSSSWTEngineImpl(AbstractCSSEngine).applyStyles(Object, boolean) line: 374	
	ThemeEngine.applyStyles(Object, boolean) line: 553	
	PartRenderingEngine$7.setClassnameAndId(Object, String, String) line: 1319	
	WBWRenderer(SWTPartRenderer).setCSSInfo(MUIElement, Object) line: 114	
	WBWRenderer.updateNonFocusState(int, MWindow) line: 616	
...
```
Comment 1 Mickael Istria CLA 2021-11-25 14:59:02 EST
Forgot to mention that this is only happening with the Dark Theme.
The reason is that the e4-dark_globalstyle.css does hardcode a lot of colors instead of just changing the usual colors preferences and letting the platform honor those preferences, letting users tweak them.
Comment 2 Mickael Istria CLA 2021-12-16 12:28:29 EST

*** This bug has been marked as a duplicate of bug 558782 ***