diff --git a/magnolia-ui-workbench/src/main/java/info/magnolia/ui/workbench/contenttool/search/SearchContentToolViewImpl.java b/magnolia-ui-workbench/src/main/java/info/magnolia/ui/workbench/contenttool/search/SearchContentToolViewImpl.java index 8c2f247..f9feb68 100644 --- a/magnolia-ui-workbench/src/main/java/info/magnolia/ui/workbench/contenttool/search/SearchContentToolViewImpl.java +++ b/magnolia-ui-workbench/src/main/java/info/magnolia/ui/workbench/contenttool/search/SearchContentToolViewImpl.java @@ -34,21 +34,19 @@ package info.magnolia.ui.workbench.contenttool.search; import info.magnolia.i18nsystem.SimpleTranslator; -import info.magnolia.ui.vaadin.extension.ShortcutProtector; import info.magnolia.ui.vaadin.icon.Icon; - -import java.util.Arrays; import javax.inject.Inject; import org.apache.commons.lang3.StringUtils; -import com.vaadin.data.Property; import com.vaadin.event.FieldEvents; -import com.vaadin.event.ShortcutAction; +import com.vaadin.event.ShortcutAction.KeyCode; +import com.vaadin.event.ShortcutListener; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; +import com.vaadin.ui.Panel; import com.vaadin.ui.TextField; /** @@ -58,14 +56,15 @@ private final SimpleTranslator i18n; - private TextField searchField; + private final TextField searchField; private SearchContentToolView.Listener listener; + + private final Panel sfListenerPanel = new Panel(); - private final Property.ValueChangeListener searchFieldListener = new Property.ValueChangeListener() { - + private final ShortcutListener searchFieldShortCutListener = new ShortcutListener("", KeyCode.ENTER, null) { @Override - public void valueChange(Property.ValueChangeEvent event) { + public void handleAction(Object sender, Object target) { listener.onSearch(searchField.getValue()); boolean hasSearchContent = !searchField.getValue().isEmpty(); @@ -74,7 +73,6 @@ } else { removeStyleName("has-content"); } - searchField.focus(); } }; @@ -103,8 +101,11 @@ searchField = buildSearchField(); + sfListenerPanel.setContent(searchField); + searchField.focus(); + setVisible(true); - addComponent(searchField); + addComponent(sfListenerPanel); addComponent(clearSearchBoxButton); addComponent(searchIcon); addComponent(searchArrow); @@ -113,7 +114,6 @@ private TextField buildSearchField() { final TextField field = new TextField(); - ShortcutProtector.extend(field, Arrays.asList(ShortcutAction.KeyCode.ENTER)); final String inputPrompt = i18n.translate("toolbar.search.prompt"); field.setInputPrompt(inputPrompt); @@ -122,7 +122,7 @@ // TextField has to be immediate to fire value changes when pressing Enter, avoiding ShortcutListener overkill. field.setImmediate(true); - field.addValueChangeListener(searchFieldListener); + sfListenerPanel.addShortcutListener(searchFieldShortCutListener); field.addFocusListener(new FieldEvents.FocusListener() { @Override @@ -147,8 +147,6 @@ if (searchField == null) { return; } - // turn off value change listener, so that presenter does not think there was user input and searches again - searchField.removeValueChangeListener(searchFieldListener); if (StringUtils.isNotBlank(searchQuery)) { searchField.setValue(searchQuery); searchField.focus(); @@ -156,7 +154,6 @@ searchField.setValue(""); removeStyleName("has-content"); } - searchField.addValueChangeListener(searchFieldListener); } @Override