Fix for issue 4595: "In TabLayoutPanel, inserting a tab before the currently
selected tab causes problems due to not incrementing selectedIndex".

Review at http://gwt-code-reviews.appspot.com/153816


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@7633 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
index 7b51a70..961bb0f 100644
--- a/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/TabLayoutPanel.java
@@ -474,6 +474,10 @@
 
     if (selectedIndex == -1) {
       selectTab(0);
+    } else if (selectedIndex >= beforeIndex) {
+      // If we inserted before the currently selected tab, its index has just
+      // increased.
+      selectedIndex++;
     }
   }
 
diff --git a/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
index 5962d09..e8c9f57 100644
--- a/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
@@ -59,6 +59,14 @@
     HasWidgetsTester.testAll(new TabLayoutPanel(1, Unit.EM), new Adder(), true);
   }
 
+  public void testInsertBeforeSelected() {
+    TabLayoutPanel p = new TabLayoutPanel(2, Unit.EM);
+    p.add(new Label("foo"), "foo");
+    p.selectTab(0);
+    p.insert(new Label("bar"), "bar", 0);
+    assertEquals(1, p.getSelectedIndex());
+  }
+
   public void testInsertMultipleTimes() {
     TabLayoutPanel p = new TabLayoutPanel(2, Unit.EM);