Fix to keep FocusWidget's setElement() implementation from clobbering tabindex when it's already set. This comes up in practice when calling, e.g., TextBox.wrap() on a static element that already had a perfectly good tabindex. Review at http://gwt-code-reviews.appspot.com/153815 git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7635 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/FocusWidget.java b/user/src/com/google/gwt/user/client/ui/FocusWidget.java index f7390f8..4f473f7 100644 --- a/user/src/com/google/gwt/user/client/ui/FocusWidget.java +++ b/user/src/com/google/gwt/user/client/ui/FocusWidget.java
@@ -272,7 +272,8 @@ // any calls made to FocusWidget.setTabIndex(int) by user code, because // FocusWidget.setTabIndex(int) cannot be called until setElement(elem) // has been called. - setTabIndex(0); + if (-1 == getTabIndex()) { + setTabIndex(0); + } } - }
diff --git a/user/test/com/google/gwt/user/client/ui/TextBoxTest.java b/user/test/com/google/gwt/user/client/ui/TextBoxTest.java index 42a6963..80b5f17 100644 --- a/user/test/com/google/gwt/user/client/ui/TextBoxTest.java +++ b/user/test/com/google/gwt/user/client/ui/TextBoxTest.java
@@ -15,6 +15,9 @@ */ package com.google.gwt.user.client.ui; +import com.google.gwt.dom.client.DivElement; +import com.google.gwt.dom.client.Document; + /** * Testing TextBox. */ @@ -32,7 +35,7 @@ // As our setText does not honor max length, no way to text it in the wild // here. } - + public void testMinLength() { TextBox b = createTextBoxBase(); b.setVisibleLength(5); @@ -44,4 +47,14 @@ // Now check visible length. assertEquals(5, b.getVisibleLength()); } + + public void testNoNukeTabIndex() { + Document doc = Document.get(); + DivElement div = doc.createDivElement(); + div.setInnerHTML("<input type='text' id='tb' tabindex='1'></input>"); + doc.getBody().appendChild(div); + + TextBox tb = TextBox.wrap(doc.getElementById("tb")); + assertEquals(1, tb.getTabIndex()); + } }