diff options
author | Eric Williams | 2018-05-30 14:43:19 +0000 |
---|---|---|
committer | Eric Williams | 2018-06-12 19:50:06 +0000 |
commit | 9c3a2221fbf96861a67b63fdd282a92f830c49e3 (patch) | |
tree | 9d5bacb3028527260538d7b43a1c57507f4b9731 /tests/org.eclipse.swt.tests.gtk | |
parent | 394f4e7e26c263b24531e4e9007b110e0f35929d (diff) | |
download | eclipse.platform.swt-9c3a2221fbf96861a67b63fdd282a92f830c49e3.tar.gz eclipse.platform.swt-9c3a2221fbf96861a67b63fdd282a92f830c49e3.tar.xz eclipse.platform.swt-9c3a2221fbf96861a67b63fdd282a92f830c49e3.zip |
Bug 535323: [GTK3] Combo sizing problems
This is a two part fix:
1) Override resizeCalculationsGTK3 in Combo to use the GtkEntry for
non-READ_ONLY Combos. This prevents us from using the GtkComboBoxText's
preferred size which is usually way too large on GTK3.20+.
2) Update the patch from bug 500703 to support the case where one
Composite has multiple Combo widgets inside of it. We support this case
by setting fixClipHandle in the parent Composite, and then using a
HashMap to keep track of the individual Controls, and their respective
children who need to have their clips adjusted.
Tested on GTK3.22 on X11 and Wayland -- no ill effects. No AllNonBrowser
JUnit tests fail.
Change-Id: I1d262c9d321dc314c7f66966bd58fbd8e25ba77e
Signed-off-by: Eric Williams <ericwill@redhat.com>
Diffstat (limited to 'tests/org.eclipse.swt.tests.gtk')
2 files changed, 125 insertions, 0 deletions
diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535323_ComboSizing.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535323_ComboSizing.java new file mode 100644 index 0000000000..374ebecc51 --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535323_ComboSizing.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2018 Red Hat and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; + +public class Bug535323_ComboSizing { + + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + Rectangle clientArea = shell.getClientArea(); + Combo combo1 = new Combo(shell, SWT.BORDER); + combo1.setItems("Alpha", "Bravo", "Charlie"); + Point prefSize = combo1.computeSize(SWT.DEFAULT, SWT.DEFAULT); + combo1.setBounds(clientArea.x, clientArea.y, prefSize.x, prefSize.y); + Combo combo2 = new Combo(shell, SWT.BORDER); + combo2.setItems("Alpha", "Bravo", "Charlie"); + combo2.setBounds(clientArea.x, clientArea.y, prefSize.x, prefSize.y); + combo2.setBounds(clientArea.x, clientArea.y + prefSize.y, (prefSize.x / 2) - 1, prefSize.y); + Combo combo3 = new Combo(shell, SWT.BORDER); + combo3.setItems("Alpha", "Bravo", "Charlie"); + combo3.setBounds(clientArea.x, clientArea.y + prefSize.y * 2, (prefSize.x / 2) + 1, prefSize.y); + shell.pack(); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } + +}
\ No newline at end of file diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535657_MultipleComboOverlap.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535657_MultipleComboOverlap.java new file mode 100644 index 0000000000..de17159453 --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug535657_MultipleComboOverlap.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2018 Red Hat and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Shell; + +public class Bug535657_MultipleComboOverlap { + + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + shell.setSize(400, 200); + shell.setText("Bug_odd_combos_on_resize"); + shell.setLayout(new GridLayout()); + + createGroup(shell); + + shell.open(); + + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + } + + private static void createGroup(Composite parent) { + Group group = new Group(parent, SWT.SHADOW_IN); + + group.setText("some group"); + GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, false); + gridData.horizontalSpan = 2; + group.setLayoutData(gridData); + + GridLayout gridLayout = new GridLayout(2, false); + group.setLayout(gridLayout); + + class LabelAndText { + String labelText; + String comboItem; + + LabelAndText(String labelText, String comboItem) { + this.labelText = labelText; + this.comboItem = comboItem; + } + } + + LabelAndText[] texts = { + new LabelAndText("Some label text: ", "some text"), + new LabelAndText("Some label text: ", "some long combo text"), + new LabelAndText("Some label text: ", "some text"), + }; + + for (LabelAndText text : texts) { + Label label = new Label(group, SWT.NONE); + label.setText(text.labelText); + Combo combo = new Combo(group, SWT.READ_ONLY | SWT.DROP_DOWN); + GridData comboGridData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); + combo.setLayoutData(comboGridData); + combo.add(text.comboItem); + } + } +}
\ No newline at end of file |