From 1c6976f60fbb508a96a3bf5435880f86a5f5a306 Mon Sep 17 00:00:00 2001 From: Christopher Hermann Date: Mon, 16 Sep 2024 09:17:42 +0200 Subject: [PATCH] Fix "Show line numbers" settings is not correctly handled When changing the "Show line numbers" setting for the editor, the sticky scrolling control should also react on the setting and hide the line numbers. Fixes #2269 --- .../stickyscroll/StickyScrollingControl.java | 9 +++---- .../META-INF/MANIFEST.MF | 4 ++- .../StickyScrollingControlTest.java | 25 ++++++++++++++++--- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControl.java b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControl.java index baea54934cd..414abd5c19c 100644 --- a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControl.java +++ b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControl.java @@ -150,6 +150,8 @@ public void applySettings(StickyScrollingControlSettings newSettings) { bottomSeparator.setBackground(settings.stickyLinesSeparatorColor()); updateStickyScrollingControls(); + styleStickyLines(); + layoutStickyLines(); } public void dispose() { @@ -298,15 +300,12 @@ private void layoutLineNumbers() { return; } + LineNumberColumn lineNumberColumn= getLineNumberColumn(verticalRuler); if (!settings.showLineNumbers()) { stickyLineNumber.setRightMargin(verticalRuler.getWidth()); ((GridData) stickyLineNumber.getLayoutData()).widthHint= 0; stickyLineNumber.setLeftMargin(0); - return; - } - - LineNumberColumn lineNumberColumn= getLineNumberColumn(verticalRuler); - if (lineNumberColumn == null) { + } else if (lineNumberColumn == null) { ((GridData) stickyLineNumber.getLayoutData()).widthHint= verticalRuler.getWidth(); GC gc= new GC(stickyLinesCanvas); gc.setFont(sourceViewer.getTextWidget().getFont()); diff --git a/tests/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF index 74a27a2c7f8..b7ea072acac 100644 --- a/tests/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.ui.editors.tests/META-INF/MANIFEST.MF @@ -25,7 +25,9 @@ Require-Bundle: org.eclipse.jface.text;bundle-version="3.19.0", org.eclipse.ui;bundle-version="3.119.100", org.eclipse.ui.tests.harness;bundle-version="1.8.0", - org.mockito.mockito-core;bundle-version="5.12.0" + org.mockito.mockito-core;bundle-version="5.13.0", + net.bytebuddy.byte-buddy;bundle-version="1.15.1", + net.bytebuddy.byte-buddy-agent;bundle-version="1.15.1" Bundle-RequiredExecutionEnvironment: JavaSE-17 Eclipse-BundleShape: dir Bundle-ActivationPolicy: lazy diff --git a/tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControlTest.java b/tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControlTest.java index a61bfdbad40..031e3cfa623 100644 --- a/tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControlTest.java +++ b/tests/org.eclipse.ui.editors.tests/src/org/eclipse/ui/internal/texteditor/stickyscroll/StickyScrollingControlTest.java @@ -17,6 +17,8 @@ import static org.hamcrest.Matchers.greaterThan; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.util.List; @@ -41,7 +43,7 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.jface.text.Document; -import org.eclipse.jface.text.source.CompositeRuler; +import org.eclipse.jface.text.source.IVerticalRuler; import org.eclipse.jface.text.source.SourceViewer; public class StickyScrollingControlTest { @@ -53,14 +55,14 @@ public class StickyScrollingControlTest { private Color backgroundColor; private Color separatorColor; private StickyScrollingControl stickyScrollingControl; - private CompositeRuler ruler; + private IVerticalRuler ruler; @Before public void setup() { shell = new Shell(Display.getDefault()); shell.setSize(200, 200); shell.setLayout(new FillLayout()); - ruler = new CompositeRuler(); + ruler = mock(IVerticalRuler.class); sourceViewer = new SourceViewer(shell, ruler, SWT.V_SCROLL | SWT.H_SCROLL); sourceViewer.setDocument(new Document()); sourceViewer.getTextWidget().setBounds(0, 0, 200, 200); @@ -153,6 +155,23 @@ public void testWithoutVerticalRuler() { assertFalse(stickyLineNumber.isVisible()); } + @Test + public void testWithoutLineNumber() { + when(ruler.getWidth()).thenReturn(20); + List stickyLines = List.of(new StickyLine("line 10", 9), new StickyLine("line 20", 19)); + stickyScrollingControl.setStickyLines(stickyLines); + + StyledText stickyLineNumber = getStickyLineNumber(); + assertThat(stickyLineNumber.getLeftMargin(), greaterThan(0)); + + StickyScrollingControlSettings settings = new StickyScrollingControlSettings(5, lineNumberColor, hoverColor, + backgroundColor, separatorColor, false); + stickyScrollingControl.applySettings(settings); + + stickyLineNumber = getStickyLineNumber(); + assertEquals(0, stickyLineNumber.getLeftMargin()); + } + @Test public void testStyling() { Font font = new Font(shell.getDisplay(), new FontData("Arial", 12, SWT.BOLD));