Shahar Havivi has uploaded a new change for review. Change subject: UI: Prevent dialog close when pressing Enter in TextArea ......................................................................
UI: Prevent dialog close when pressing Enter in TextArea By default add/edit VM dialog close when pressing Enter (for fast navigation), This is a problem while edition TextArea when the enter key is used. Change-Id: I436d4ab656d2739a9681a6b3d2f80038eb0c2063 Signed-off-by: Shahar Havivi <[email protected]> --- A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnterIgnoringFocusHandler.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelTextAreaEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextAreaEditor.java 3 files changed, 90 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/11/24311/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnterIgnoringFocusHandler.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnterIgnoringFocusHandler.java new file mode 100644 index 0000000..22257e0 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnterIgnoringFocusHandler.java @@ -0,0 +1,56 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.event.dom.client.BlurEvent; +import com.google.gwt.event.dom.client.BlurHandler; +import com.google.gwt.event.dom.client.FocusEvent; +import com.google.gwt.event.dom.client.FocusHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.shared.HandlerRegistration; +import com.google.gwt.user.client.Event; + +/** + * If this handler is registered to focus and blur events of a widget, the enter key will be ignored while + * this widget has focus. The "enter will be ignored" means that any listener listening to enter will not be + * notifyed so the dialog will not get submitted. + * + * It is useful for widgets like textarea where the user should be able to press enter without submitting the dialog. + */ +public class EnterIgnoringFocusHandler implements FocusHandler, BlurHandler { + + private HandlerRegistration eventHandler; + + @Override + public void onFocus(FocusEvent event) { + eventHandler = Event.addNativePreviewHandler(new Event.NativePreviewHandler() { + @Override + public void onPreviewNativeEvent(Event.NativePreviewEvent event) { + NativeEvent nativeEvent = event.getNativeEvent(); + if (nativeEvent.getKeyCode() == KeyCodes.KEY_ENTER + && (event.getTypeInt() == Event.ONKEYPRESS || event.getTypeInt() == Event.ONKEYDOWN) + && !event.isCanceled()) { + + // swallow the enter key otherwise the whole dialog would get submitted + nativeEvent.preventDefault(); + nativeEvent.stopPropagation(); + event.cancel(); + + if (event.getTypeInt() == Event.ONKEYPRESS) { + enterPressed(); + } + } + } + }); + } + + @Override + public void onBlur(BlurEvent event) { + if (eventHandler != null) { + eventHandler.removeHandler(); + } + } + + protected void enterPressed() { + // any custom operation + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelTextAreaEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelTextAreaEditor.java index bfef08c..cc93205 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelTextAreaEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EntityModelTextAreaEditor.java @@ -11,9 +11,25 @@ public EntityModelTextAreaEditor() { super(new EntityModelTextArea()); + + registerEnterIgnoringHandlers(); } public EntityModelTextAreaEditor(Renderer<Object> renderer, Parser<Object> parser) { super(new EntityModelTextArea(renderer, parser)); + + registerEnterIgnoringHandlers(); + } + + private void registerEnterIgnoringHandlers() { + EnterIgnoringFocusHandler enterIgnoringFocusHandler = new EnterIgnoringFocusHandler() { + @Override + protected void enterPressed() { + super.enterPressed(); + getContentWidget().setText(getContentWidget().getText() + '\n'); //$NON-NLS-1$ + } + }; + getContentWidget().addFocusHandler(enterIgnoringFocusHandler); + getContentWidget().addBlurHandler(enterIgnoringFocusHandler); } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextAreaEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextAreaEditor.java index 5225b6b..ba38f630 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextAreaEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextAreaEditor.java @@ -3,14 +3,32 @@ import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; import org.ovirt.engine.ui.common.widget.editor.AbstractValueBoxWithLabelEditor; +import org.ovirt.engine.ui.common.widget.editor.EnterIgnoringFocusHandler; public class EntityModelTextAreaEditor<T> extends AbstractValueBoxWithLabelEditor<T, EntityModelTextArea<T>> { public EntityModelTextAreaEditor(Renderer<T> renderer, Parser<T> parser) { this(new EntityModelTextArea<T>(renderer, parser)); + + registerEnterIgnoringHandlers(); } public EntityModelTextAreaEditor(EntityModelTextArea<T> widget) { super(widget); + + registerEnterIgnoringHandlers(); + } + + private void registerEnterIgnoringHandlers() { + EnterIgnoringFocusHandler enterIgnoringFocusHandler = new EnterIgnoringFocusHandler() { + @Override + protected void enterPressed() { + super.enterPressed(); + getContentWidget().setText(getContentWidget().getText() + '\n'); //$NON-NLS-1$ + } + }; + + getContentWidget().addFocusHandler(enterIgnoringFocusHandler); + getContentWidget().addBlurHandler(enterIgnoringFocusHandler); } } -- To view, visit http://gerrit.ovirt.org/24311 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I436d4ab656d2739a9681a6b3d2f80038eb0c2063 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Shahar Havivi <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
