diff options
author | Eric Williams | 2018-08-15 18:21:51 +0000 |
---|---|---|
committer | Eric Williams | 2018-08-15 19:05:32 +0000 |
commit | 6228520a024e8d324316da4d3234714a05ef7d1b (patch) | |
tree | 4cdecf44e897f077f47dd81a24705cdc3c7a4892 | |
parent | f241cc874342ce675ac143bbdd287a607962252e (diff) | |
download | eclipse.platform.swt-6228520a024e8d324316da4d3234714a05ef7d1b.tar.gz eclipse.platform.swt-6228520a024e8d324316da4d3234714a05ef7d1b.tar.xz eclipse.platform.swt-6228520a024e8d324316da4d3234714a05ef7d1b.zip |
Bug 528819: [GTK3] StyledText draws carets if unfocused
Only draw the caret if it has focus: this logic existed for GTK3.20- but
was removed in a fix for Wayland. Restoring this behaviour fixes the bug
for GTK3.22 as well.
Tested with the snippet attached and in the IDE. No reduction in Caret
performance is observed.
Change-Id: I91d78217e90ce7ac7d1ab3e0898b0dda6fad44d2
Signed-off-by: Eric Williams <ericwill@redhat.com>
2 files changed, 56 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java index cdfb57c867..ebbb60fbce 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java @@ -180,8 +180,10 @@ long /*int*/ gtk_draw (long /*int*/ widget, long /*int*/ cairo) { * blink is needed to be checked as gtk_draw() signals sent from other parts of the canvas * can interfere with the blinking state. This will ensure that we are only draw/redrawing the * caret when it is intended to. See Bug 517487. + * + * Additionally, only draw the caret if it has focus. See bug 528819. */ - if (caret != null && blink == true) { + if (caret != null && blink == true && caret.isFocusCaret()) { drawCaret(widget,cairo); blink = false; } diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug528819_StyledTextCaretDraw.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug528819_StyledTextCaretDraw.java new file mode 100644 index 0000000000..ce011d9215 --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug528819_StyledTextCaretDraw.java @@ -0,0 +1,53 @@ +/******************************************************************************* + * Copyright (c) 2018 Thomas Singer and others. All rights reserved. + * The contents of this file are made available under the terms + * of the GNU Lesser General Public License (LGPL) Version 2.1 that + * accompanies this distribution (lgpl-v21.txt). The LGPL is also + * available at http://www.gnu.org/licenses/lgpl.html. If the version + * of the LGPL at http://www.gnu.org is different to the version of + * the LGPL accompanying this distribution and there is any conflict + * between the two license versions, the terms of the LGPL accompanying + * this distribution shall govern. + * + * Contributors: + * Thomas Singer - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.layout.FillLayout; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +public class Bug528819_StyledTextCaretDraw { + + public static void main(String[] args) { + final Display display = new Display(); + + final Shell shell = new Shell(display); + shell.setLayout(new FillLayout()); + + final Text text = new Text(shell, SWT.MULTI | SWT.WRAP); + text.setText("Resize the shell and what for the styled text controls that paint carets."); + createStyledText(shell); + createStyledText(shell); + + shell.setSize(500, 400); + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) { + display.sleep(); + } + } + + display.dispose(); + } + + private static void createStyledText(Shell shell) { + final StyledText st = new StyledText(shell, SWT.BORDER); + st.setEditable(false); + } +} |