diff options
8 files changed, 262 insertions, 5 deletions
diff --git a/src/com/google/gwt/dom/client/VaadinDOMImplSafari.java b/src/com/google/gwt/dom/client/VaadinDOMImplSafari.java new file mode 100644 index 0000000000..c68f80595d --- /dev/null +++ b/src/com/google/gwt/dom/client/VaadinDOMImplSafari.java @@ -0,0 +1,23 @@ +package com.google.gwt.dom.client;
+
+/**
+ * Overridden to workaround GWT issue #6194. Remove this when updating to a
+ * newer GWT that fixes the problem (2.3.0 possibly). Must be in this package as
+ * the whole DOMImpl hierarchy is package private and I really did not want to
+ * copy all the parent classes into this one...
+ */
+class VaadinDOMImplSafari extends DOMImplSafari {
+ @Override
+ public int getAbsoluteLeft(Element elem) {
+ // Chrome returns a float in certain cases (at least when zoom != 100%).
+ // The |0 ensures it is converted to an int.
+ return super.getAbsoluteLeft(elem) | 0;
+ }
+
+ @Override
+ public int getAbsoluteTop(Element elem) {
+ // Chrome returns a float in certain cases (at least when zoom != 100%).
+ // The |0 ensures it is converted to an int.
+ return super.getAbsoluteTop(elem) | 0;
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml index 929d35f364..66ab7202ed 100644 --- a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml +++ b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml @@ -12,7 +12,8 @@ <source path="client" /> - <!-- Use own Scheduler implementation to be able to track if commands are running --> + <!-- Use own Scheduler implementation to be able to track if commands are + running --> <replace-with class="com.vaadin.terminal.gwt.client.VSchedulerImpl"> <when-type-is class="com.google.gwt.core.client.impl.SchedulerImpl" /> </replace-with> @@ -51,6 +52,12 @@ </any> </replace-with> + <!-- Workaround for #6682. Remove when fixed in GWT. --> + <replace-with class="com.google.gwt.dom.client.VaadinDOMImplSafari"> + <when-type-is class="com.google.gwt.dom.client.DOMImpl" /> + <when-property-is name="user.agent" value="safari" /> + </replace-with> + <entry-point class="com.vaadin.terminal.gwt.client.ApplicationConfiguration" /> diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java b/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java index 2b996d5792..56b7d198e0 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java +++ b/src/com/vaadin/terminal/gwt/client/ui/VMenuBar.java @@ -985,7 +985,8 @@ public class VMenuBar extends SimpleFocusablePanel implements Paintable, int widthAvailable = diff + moreItemWidth; int widthGrowth = 0; - while (widthAvailable > widthGrowth) { + while (widthAvailable > widthGrowth + && collapsedRootItems.getItems().size() > 0) { // Move first item from collapsed menu to the root menu CustomMenuItem expand = collapsedRootItems.getItems() .get(0); diff --git a/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java b/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java new file mode 100644 index 0000000000..4a41f8d8dc --- /dev/null +++ b/tests/src/com/vaadin/tests/components/menubar/MenuBarInSplitPanel.java @@ -0,0 +1,47 @@ +package com.vaadin.tests.components.menubar; + +import com.vaadin.tests.components.AbstractTestCase; +import com.vaadin.ui.HorizontalSplitPanel; +import com.vaadin.ui.Label; +import com.vaadin.ui.MenuBar; +import com.vaadin.ui.Tree; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; + +public class MenuBarInSplitPanel extends AbstractTestCase { + + @Override + protected String getDescription() { + return "Move the splitter left so that some menu items are collapsed, then back right. The menu bar should always fill the available space."; + } + + @Override + protected Integer getTicketNumber() { + return 6590; + } + + @Override + public void init() { + Window mainWindow = new Window("MenuBar in SplitPanel", + new HorizontalSplitPanel()); + VerticalLayout left = new VerticalLayout(); + mainWindow.addComponent(left); + left.setSizeFull(); + MenuBar menu = new MenuBar(); + menu.setWidth("100%"); + menu.addItem("File", null); + menu.addItem("Edit", null); + menu.addItem("Help", null); + left.addComponent(menu); + Tree tree = new Tree(); + for (int i = 0; i < 10; i++) { + tree.addItem("Node " + i); + } + left.addComponent(tree); + left.setExpandRatio(tree, 1.0f); + Label label = new Label("Right"); + mainWindow.addComponent(label); + setMainWindow(mainWindow); + } + +} diff --git a/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java b/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java index 43500e8947..dbc66ff8c3 100644 --- a/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java +++ b/tests/src/com/vaadin/tests/components/select/AbstractSelectTestCase.java @@ -207,7 +207,34 @@ public abstract class AbstractSelectTestCase<T extends AbstractSelect> extends /* COMMANDS END */
public void itemClick(ItemClickEvent event) {
- log("ItemClick on itemId: " + event.getItemId() + ", propertyId: "
- + event.getPropertyId() + " using " + event.getButtonName());
+ String type = event.getButtonName();
+ if (event.isDoubleClick()) {
+ type += " double-click";
+ } else {
+ type += " click";
+ }
+
+ String target = "source: " + event.getSource();
+ target += ", client: [" + event.getClientX() + "," + event.getClientY()
+ + "];";
+ target += ", relative: [" + event.getRelativeX() + ","
+ + event.getRelativeY() + "]";
+ target += ", itemId: " + event.getItemId();
+ target += ", propertyId: " + event.getPropertyId();
+
+ String modifierKeys = "";
+ if (event.isCtrlKey()) {
+ modifierKeys += "CTRL ";
+ }
+ if (event.isAltKey()) {
+ modifierKeys += "ALT ";
+ }
+ if (event.isMetaKey()) {
+ modifierKeys += "META ";
+ }
+ if (event.isShiftKey()) {
+ modifierKeys += "SHIFT ";
+ }
+ log(modifierKeys + type + " on " + target);
}
}
diff --git a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java b/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java index 4934895aa5..76415844be 100644 --- a/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java +++ b/tests/src/com/vaadin/tests/components/table/TableMultiSelectSimple.java @@ -1,5 +1,8 @@ package com.vaadin.tests.components.table; +import java.util.Set; +import java.util.TreeSet; + import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.tests.components.TestBase; @@ -26,7 +29,9 @@ public class TableMultiSelectSimple extends TestBase { t.addListener(new ValueChangeListener() { public void valueChange(ValueChangeEvent event) { - log.log("Selected value: " + event.getProperty().getValue()); + TreeSet sorted = new TreeSet((Set) event.getProperty() + .getValue()); + log.log("Selected value: " + sorted); } }); diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html new file mode 100644 index 0000000000..bd8e944c32 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.html @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head profile="http://selenium-ide.openqa.org/profiles/test-case"> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<link rel="selenium.base" href="http://arturwin.office.itmill.com:8888/" /> +<title>New Test</title> +</head> +<body> +<table cellpadding="1" cellspacing="1" border="1"> +<thead> +<tr><td rowspan="1" colspan="3">New Test</td></tr> +</thead><tbody> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[4]</td> + <td>32,7</td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>epsilon-selected</td> +</tr> +<tr> + <td>scroll</td> + <td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td> + <td>256</td> +</tr> +<tr> + <td>pause</td> + <td>300</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[21]</td> + <td>18,-245</td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>scrolled-down-chi-selected</td> +</tr> +<tr> + <td>open</td> + <td>/run/com.vaadin.tests.components.tree.TreeScrollingOnSelection?restartApplication</td> + <td></td> +</tr> +<tr> + <td>scroll</td> + <td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/domChild[1]</td> + <td>500</td> +</tr> +<tr> + <td>pause</td> + <td>300</td> + <td></td> +</tr> +<tr> + <td>mouseClick</td> + <td>vaadin=runcomvaadintestscomponentstreeTreeScrollingOnSelection::/VVerticalLayout[0]/ChildComponentContainer[1]/VVerticalLayout[0]/ChildComponentContainer[0]/VPanel[0]/VVerticalLayout[0]/ChildComponentContainer[0]/VTree[0]#n[0]/n[11]</td> + <td>14,-248</td> +</tr> +<tr> + <td>screenCapture</td> + <td></td> + <td>scrolled-down-my-selected</td> +</tr> +</tbody></table> +</body> +</html> diff --git a/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java new file mode 100644 index 0000000000..0f06f23fe0 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/tree/TreeScrollingOnSelection.java @@ -0,0 +1,71 @@ +package com.vaadin.tests.components.tree; + +import com.vaadin.data.util.HierarchicalContainer; +import com.vaadin.event.ItemClickEvent; +import com.vaadin.event.ItemClickEvent.ItemClickListener; +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Label; +import com.vaadin.ui.Panel; +import com.vaadin.ui.Tree; + +public class TreeScrollingOnSelection extends TestBase { + private static final long serialVersionUID = 4082075610259697145L; + + private static final String GREEK_ALPHABET = "greek alphabet"; + + private static final String[] ALPHABET = { "Alpha", "Beta", "Gamma", + "Delta", "Epsilon", "Zeta", "Eta", "Theta", "Iota", "Kappa", + "Lambda", "My", "Ny", "Xi", "Omikron", "Pi", "Rho", "Sigma", "Tau", + "Ypsilon", "Phi", "Chi", "Psi", "Omega" }; + + @Override + public void setup() { + final Label charLabel = new Label(); + charLabel.setWidth("200px"); + + Tree tree = new Tree("alphabets", getContainer()); + tree.expandItem(GREEK_ALPHABET); + tree.addListener(new ItemClickListener() { + + private static final long serialVersionUID = 5955518276555388126L; + + public void itemClick(ItemClickEvent event) { + charLabel.setValue(event.getItemId().toString()); + } + }); + + Panel panel = new Panel(); + panel.setScrollable(true); + panel.addComponent(tree); + panel.setWidth("200px"); + panel.setHeight("300px"); + + addComponent(panel); + + addComponent(charLabel); + } + + private HierarchicalContainer getContainer() { + HierarchicalContainer container = new HierarchicalContainer(); + + container.addItem(GREEK_ALPHABET); + + for (String character : ALPHABET) { + container.addItem(character); + container.setChildrenAllowed(character, false); + container.setParent(character, GREEK_ALPHABET); + } + + return container; + } + + @Override + protected String getDescription() { + return "Selecting an item in the tree inside the Panel should not cause the panel scroll position to change."; + } + + @Override + protected Integer getTicketNumber() { + return 6731; + } +} |