diff options
| author | Eric Williams | 2019-09-19 16:56:19 +0000 |
|---|---|---|
| committer | Eric Williams | 2019-09-19 19:58:02 +0000 |
| commit | 832213bb5bbc69bf725090388a341e391b16f27e (patch) | |
| tree | 87c844eee12e7e6e0d9190e90b754ec4bebfb7fa | |
| parent | 70b77a41a4d96e435aee4baa2230b6b70eac7681 (diff) | |
| download | eclipse.platform.swt-832213bb5bbc69bf725090388a341e391b16f27e.tar.gz eclipse.platform.swt-832213bb5bbc69bf725090388a341e391b16f27e.tar.xz eclipse.platform.swt-832213bb5bbc69bf725090388a341e391b16f27e.zip | |
Bug 302918: ToolItem setDisabledImage isn't used
Implement ToolItem.setDisabledImage() on GTK. Behaviour
should be in line with Mac/Windows. Attached is a JUnit
test and test snippet.
Tested on GTK3.24 on Fedora 30. No AllNonBrowser JUnit
tests fail.
Change-Id: I8c2d94bed014a7aca4783eb469bf96b62d75cd78
Signed-off-by: Eric Williams <ericwill@redhat.com>
5 files changed, 136 insertions, 3 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java index 663010be29..730e92c059 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolItem.java @@ -45,11 +45,12 @@ public class ToolItem extends Item { long eventHandle, proxyMenuItem, provider; ToolBar parent; Control control; - Image hotImage, disabledImage; + Image hotImage, disabledImage, enabledImage; String toolTipText; boolean drawHotImage; /** True iff map has been hooked for this ToolItem. See bug 546914. */ boolean mapHooked; + boolean enabled = true; /** * Constructs a new instance of this class given its parent @@ -856,7 +857,7 @@ void releaseWidget () { if (parent.currentFocusItem == this) parent.currentFocusItem = null; parent = null; control = null; - hotImage = disabledImage = null; + hotImage = disabledImage = enabledImage = null; toolTipText = null; } @@ -988,6 +989,19 @@ public void setDisabledImage (Image image) { checkWidget(); if ((style & SWT.SEPARATOR) != 0) return; disabledImage = image; + if (image != null) { + ImageList imageList = parent.imageList; + if (imageList == null) imageList = parent.imageList = new ImageList (); + int imageIndex = imageList.indexOf (image); + if (imageIndex == -1) { + imageIndex = imageList.add (image); + } else { + imageList.put (imageIndex, image); + } + } + if (!enabled) { + setImage(image); + } } /** @@ -1009,7 +1023,10 @@ public void setDisabledImage (Image image) { public void setEnabled (boolean enabled) { checkWidget(); long topHandle = topHandle (); - if (GTK.gtk_widget_get_sensitive (topHandle) == enabled) return; + if (this.enabled == enabled) return; + this.enabled = enabled; + if (!enabled && disabledImage != null) setImage (disabledImage); + if (enabled && enabledImage != null) setImage (enabledImage); GTK.gtk_widget_set_sensitive (topHandle, enabled); } @@ -1110,6 +1127,11 @@ public void setImage (Image image) { checkWidget(); if ((style & SWT.SEPARATOR) != 0) return; super.setImage (image); + if (enabled) enabledImage = image; + if (!enabled && disabledImage != image) { + enabledImage = image; + return; + } if (image != null) { ImageList imageList = parent.imageList; if (imageList == null) imageList = parent.imageList = new ImageList (); diff --git a/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug302918_ToolItemDisabled.java b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug302918_ToolItemDisabled.java new file mode 100644 index 0000000000..49d838088e --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/ManualTests/org/eclipse/swt/tests/gtk/snippets/Bug302918_ToolItemDisabled.java @@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2019 Red Hat and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Red Hat - initial API and implementation + *******************************************************************************/ +package org.eclipse.swt.tests.gtk.snippets; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.ImageLoader; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.CoolBar; +import org.eclipse.swt.widgets.CoolItem; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; + +public class Bug302918_ToolItemDisabled { + + public static void main(String[] args) { + Display display = new Display(); + Shell shell = new Shell(display); + CoolBar bar = new CoolBar(shell, SWT.BORDER); + for (int i = 0; i < 2; i++) { + CoolItem item = new CoolItem(bar, SWT.NONE); + Button button = new Button(bar, SWT.PUSH); + button.setText("Button " + i); + Point size = button.computeSize(SWT.DEFAULT, SWT.DEFAULT); + item.setPreferredSize(item.computeSize(size.x, size.y)); + item.setControl(button); + } + ImageLoader loader = new ImageLoader (); + loader.load("./images/next_nav.gif"); + Image nav = new Image (display, loader.data[0]); + loader.load("./images/next_nav_dis.gif"); + Image nav_dis = new Image (display, loader.data[0]); + + ToolBar toolbar = new ToolBar(bar, SWT.NONE); + ToolItem item1 = new ToolItem(toolbar, SWT.PUSH); + // Image displayed should be nav + item1.setImage(nav); + item1.setDisabledImage(nav_dis); + ToolItem item2 = new ToolItem(toolbar, SWT.PUSH); + // Image displayed should be nav_dis + item2.setImage(nav_dis); + item2.setDisabledImage(nav); + ToolItem item3 = new ToolItem(toolbar, SWT.PUSH); + // Image displayed should nav_dis + item3.setImage(nav); + item3.setDisabledImage(nav_dis); + item3.setEnabled(false); + item3.setImage(nav); + ToolItem item4 = new ToolItem(toolbar, SWT.PUSH); + // Image displayed should be nav + item4.setImage(nav_dis); + item4.setDisabledImage(nav); + item4.setEnabled(false); + toolbar.pack(); + + CoolItem citem = new CoolItem(bar, SWT.NONE); + Point tsize = toolbar.computeSize(SWT.DEFAULT, SWT.DEFAULT); + citem.setPreferredSize(tsize.x+15, tsize.y); + citem.setControl(toolbar); + + bar.pack(); + shell.open(); + while (!shell.isDisposed()) { + if (!display.readAndDispatch()) + display.sleep(); + } + nav.dispose(); + nav_dis.dispose(); + display.dispose(); + } +} diff --git a/tests/org.eclipse.swt.tests.gtk/images/next_nav.gif b/tests/org.eclipse.swt.tests.gtk/images/next_nav.gif Binary files differnew file mode 100644 index 0000000000..ce1e02f57c --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/images/next_nav.gif diff --git a/tests/org.eclipse.swt.tests.gtk/images/next_nav_dis.gif b/tests/org.eclipse.swt.tests.gtk/images/next_nav_dis.gif Binary files differnew file mode 100644 index 0000000000..954a83ca02 --- /dev/null +++ b/tests/org.eclipse.swt.tests.gtk/images/next_nav_dis.gif diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java index 2d657c2c59..89b61c618f 100644 --- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java +++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_widgets_ToolItem.java @@ -14,6 +14,7 @@ package org.eclipse.swt.tests.junit; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -62,6 +63,31 @@ public void test_getToolTipText() { public void test_setImageLorg_eclipse_swt_graphics_Image() { } +@Test +public void test_setDisabledImage() { + toolItem.setImage(images[0]); + toolItem.setDisabledImage(images[1]); + toolItem.setEnabled(false); + assertEquals(images[1], item.getImage()); + toolItem.setEnabled(true); + assertEquals(images[0], item.getImage()); + toolItem.setDisabledImage(images[0]); + assertEquals(images[0], item.getImage()); + toolItem.setEnabled(false); + assertEquals(images[0], item.getImage()); + toolItem.setImage(images[0]); + toolItem.setEnabled(true); + assertEquals(images[0], item.getImage()); + toolItem.setDisabledImage(images[2]); + toolItem.setEnabled(false); + assertEquals(images[2], item.getImage()); + toolItem.setEnabled(true); + toolItem.setDisabledImage(null); + toolItem.setEnabled(false); + assertEquals(images[0], item.getImage()); + +} + @Override @Test public void test_setTextLjava_lang_String() { |
