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

Reply via email to