Browse Source

Merged: [9078] fix for #3027 combobox state when typing quickly

svn changeset:9079/svn branch:6.2
tags/6.7.0.beta1
Henri Sara 14 years ago
parent
commit
5cadd0efff
1 changed files with 39 additions and 11 deletions
  1. 39
    11
      src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java

+ 39
- 11
src/com/vaadin/terminal/gwt/client/ui/VFilterSelect.java View File

@@ -47,7 +47,7 @@ import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VTooltip;

/**
*
*
* TODO needs major refactoring (to be extensible etc)
*/
public class VFilterSelect extends Composite implements Paintable, Field,
@@ -286,7 +286,7 @@ public class VFilterSelect extends Composite implements Paintable, Field,

/*
* (non-Javadoc)
*
*
* @see
* com.google.gwt.user.client.ui.PopupPanel$PositionCallback#setPosition
* (int, int)
@@ -460,6 +460,19 @@ public class VFilterSelect extends Composite implements Paintable, Field,
suggestionPopup.hide();
return;
}

selecting = filtering;
if (!filtering) {
doPostFilterSelectedItemAction();
}
}

public void doPostFilterSelectedItemAction() {
final MenuItem item = getSelectedItem();
final String enteredItemValue = tb.getText();

selecting = false;

// check for exact match in menu
int p = getItems().size();
if (p > 0) {
@@ -567,6 +580,7 @@ public class VFilterSelect extends Composite implements Paintable, Field,
private String selectedOptionKey;

private boolean filtering = false;
private boolean selecting = false;

private String lastFilter = "";
private int lastIndex = -1; // last selected index when using arrows
@@ -791,6 +805,9 @@ public class VFilterSelect extends Composite implements Paintable, Field,

lastIndex = -1; // reset
}
if (selecting) {
suggestionPopup.menu.doPostFilterSelectedItemAction();
}
}

// Calculate minumum textarea width
@@ -818,6 +835,8 @@ public class VFilterSelect extends Composite implements Paintable, Field,
}

public void onSuggestionSelected(FilterSelectSuggestion suggestion) {
selecting = false;

currentSuggestion = suggestion;
String newKey;
if (suggestion.key.equals("")) {
@@ -881,15 +900,18 @@ public class VFilterSelect extends Composite implements Paintable, Field,
case KeyCodes.KEY_UP:
case KeyCodes.KEY_PAGEDOWN:
case KeyCodes.KEY_PAGEUP:
if (suggestionPopup.isAttached()) {
break;
} else {
if (!suggestionPopup.isAttached()) {
// open popup as from gadget
filterOptions(-1, "");
lastFilter = "";
tb.selectAll();
break;
}
break;
case KeyCodes.KEY_TAB:
if (suggestionPopup.isAttached()) {
filterOptions(currentPage, tb.getText());
}
break;
}

}
@@ -914,8 +936,16 @@ public class VFilterSelect extends Composite implements Paintable, Field,
filterOptions(currentPage - 1, lastFilter);
}
break;
case KeyCodes.KEY_ENTER:
case KeyCodes.KEY_TAB:
if (suggestionPopup.isAttached()) {
filterOptions(currentPage);
}
// onBlur() takes care of the rest
break;
case KeyCodes.KEY_ENTER:
if (suggestionPopup.isAttached()) {
filterOptions(currentPage);
}
suggestionPopup.menu.doSelectedItemAction();
break;
}
@@ -1016,10 +1046,8 @@ public class VFilterSelect extends Composite implements Paintable, Field,

public void onBlur(BlurEvent event) {
focused = false;
if (!suggestionPopup.isAttached() || suggestionPopup.isJustClosed()) {
// typing so fast the popup was never opened, or it's just closed
suggestionPopup.menu.doSelectedItemAction();
}
// much of the TAB handling takes place here
suggestionPopup.menu.doSelectedItemAction();
if (selectedOptionKey == null) {
setPromptingOn();
}

Loading…
Cancel
Save