]> source.dussan.org Git - vaadin-framework.git/commitdiff
ComboBox fixes: select newitem, entered item exists, etc issues
authorMarc Englund <marc.englund@itmill.com>
Tue, 11 Dec 2007 13:46:41 +0000 (13:46 +0000)
committerMarc Englund <marc.englund@itmill.com>
Tue, 11 Dec 2007 13:46:41 +0000 (13:46 +0000)
svn changeset:3218/svn branch:trunk

src/com/itmill/toolkit/terminal/gwt/client/ui/IFilterSelect.java
src/com/itmill/toolkit/ui/Select.java

index 947d3dff377f072fd61f6e08795b9ebd2b4a43d8..36a3379f60af7cefbad351cf6685db691354393e 100644 (file)
@@ -354,27 +354,31 @@ public class IFilterSelect extends Composite implements Paintable,
 
         public void doSelectedItemAction() {
             final MenuItem item = getSelectedItem();
-            if (item != null
-                    && item.getText().toLowerCase().startsWith(
-                            lastFilter.toLowerCase())) {
-                doItemAction(item, true);
-            } else if (allowNewItem) {
+            if (allowNewItem) {
                 final String newItemValue = tb.getText();
                 // check for exact match in menu
-                if (getItems().size() == 1) {
-                    final MenuItem potentialExactMatch = (MenuItem) getItems()
-                            .get(0);
-                    if (potentialExactMatch.getText().equals(newItemValue)) {
-                        selectItem(potentialExactMatch);
-                        doSelectedItemAction();
-                        return;
-                    }
-                } else {
-                    if (!newItemValue.equals("")) {
-                        client.updateVariable(paintableId, "newitem",
-                                newItemValue, true);
+                int p = getItems().size();
+                if (p > 0) {
+                    for (int i = 0; i < p; i++) {
+                        final MenuItem potentialExactMatch = (MenuItem) getItems()
+                                .get(i);
+                        if (potentialExactMatch.getText().equals(newItemValue)) {
+                            selectItem(potentialExactMatch);
+                            doItemAction(potentialExactMatch, true);
+                            suggestionPopup.hide();
+                            return;
+                        }
                     }
                 }
+
+                if (!newItemValue.equals("")) {
+                    client.updateVariable(paintableId, "newitem", newItemValue,
+                            true);
+                }
+            } else if (item != null
+                    && item.getText().toLowerCase().startsWith(
+                            lastFilter.toLowerCase())) {
+                doItemAction(item, true);
             }
             suggestionPopup.hide();
         }
index 775d8614dda40f7c44a46dbfcd0570e96461b412..0eb18f0929b8852128755bf89bfd2d43f960576d 100644 (file)
@@ -310,7 +310,7 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering {
                 }
                 setValue(newitem);
                 // rebuild list
-                filterstring = newitem;
+                filterstring = null;
                 prevfilterstring = null;
             }
         }