Fixes #197 dead accent characters at end of line Project: http://git-wip-us.apache.org/repos/asf/incubator-wave/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-wave/commit/3dc20d6a Tree: http://git-wip-us.apache.org/repos/asf/incubator-wave/tree/3dc20d6a Diff: http://git-wip-us.apache.org/repos/asf/incubator-wave/diff/3dc20d6a
Branch: refs/heads/master Commit: 3dc20d6ac46e65be91002eb8db8dc1b3085405ce Parents: 614d94b Author: Pablo Ojanguren <pablo...@gmail.com> Authored: Fri Nov 4 18:08:19 2016 +0100 Committer: Pablo Ojanguren <pablo...@gmail.com> Committed: Tue Dec 6 12:24:28 2016 +0100 ---------------------------------------------------------------------- .../wave/client/common/util/FakeSignalEvent.java | 7 +++++++ .../wave/client/common/util/SignalEvent.java | 6 +++++- .../wave/client/common/util/SignalEventImpl.java | 17 +++++++++++++---- .../client/editor/event/EditorEventHandler.java | 7 ++++++- 4 files changed, 31 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/3dc20d6a/wave/src/main/java/org/waveprotocol/wave/client/common/util/FakeSignalEvent.java ---------------------------------------------------------------------- diff --git a/wave/src/main/java/org/waveprotocol/wave/client/common/util/FakeSignalEvent.java b/wave/src/main/java/org/waveprotocol/wave/client/common/util/FakeSignalEvent.java index 9dce0aa..a3c4b37 100644 --- a/wave/src/main/java/org/waveprotocol/wave/client/common/util/FakeSignalEvent.java +++ b/wave/src/main/java/org/waveprotocol/wave/client/common/util/FakeSignalEvent.java @@ -20,6 +20,7 @@ package org.waveprotocol.wave.client.common.util; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; import java.util.EnumSet; @@ -93,6 +94,12 @@ public class FakeSignalEvent extends SignalEventImpl { public void stopPropagation() { propagationStopped = true; } + + @Override + public EventTarget getEventTarget() { + // TODO Auto-generated method stub + return null; + } } public static FakeSignalEvent createKeyPress( http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/3dc20d6a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEvent.java ---------------------------------------------------------------------- diff --git a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEvent.java b/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEvent.java index 91dff61..67f6044 100644 --- a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEvent.java +++ b/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEvent.java @@ -19,7 +19,6 @@ package org.waveprotocol.wave.client.common.util; -import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.user.client.Event; @@ -358,4 +357,9 @@ public interface SignalEvent { * See also {@link #stopPropagation()}. */ public void preventDefault(); + + /** + * @return true if it is a DOMCharacterDataModified event + */ + boolean isDOMCharacterEvent(); } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/3dc20d6a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEventImpl.java ---------------------------------------------------------------------- diff --git a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEventImpl.java b/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEventImpl.java index 1189ccd..005b842 100644 --- a/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEventImpl.java +++ b/wave/src/main/java/org/waveprotocol/wave/client/common/util/SignalEventImpl.java @@ -20,6 +20,7 @@ package org.waveprotocol.wave.client.common.util; import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.EventTarget; import com.google.gwt.user.client.Event; import org.waveprotocol.wave.client.common.util.SignalKeyLogic.OperatingSystem; @@ -79,7 +80,8 @@ public class SignalEventImpl implements SignalEvent { boolean getAltKey(); boolean getShiftKey(); void preventDefault(); - void stopPropagation(); + void stopPropagation(); + EventTarget getEventTarget(); } /** @@ -146,6 +148,8 @@ public class SignalEventImpl implements SignalEvent { private static final StringSet MOUSE_BUTTONLESS_EVENTS = CollectionUtils.createStringSet(); private static final StringSet FOCUS_EVENTS = CollectionUtils.createStringSet(); private static final StringSet CLIPBOARD_EVENTS = CollectionUtils.createStringSet(); + + private static final String DOM_CHARDATAMOD_EVENT = "DOMCharacterDataModified"; /** * Events affected by @@ -321,7 +325,7 @@ public class SignalEventImpl implements SignalEvent { }-*/; public static native String getKeyIdentifier(Event event) /*-{ - return event.keyIdentifier + return event.keyIdentifier; }-*/; public static native String getKey(Event event) /*-{ @@ -336,10 +340,10 @@ public class SignalEventImpl implements SignalEvent { } /** - * @return The target element of the event + * @return The target element of the event. */ public Element getTarget() { - return asEvent().getTarget(); + return Element.as(nativeEvent.getEventTarget()); } /** @@ -670,4 +674,9 @@ public class SignalEventImpl implements SignalEvent { nativeEvent.stopPropagation(); } } + + @Override + public final boolean isDOMCharacterEvent() { + return DOM_CHARDATAMOD_EVENT.equalsIgnoreCase(nativeEvent.getType()); + } } http://git-wip-us.apache.org/repos/asf/incubator-wave/blob/3dc20d6a/wave/src/main/java/org/waveprotocol/wave/client/editor/event/EditorEventHandler.java ---------------------------------------------------------------------- diff --git a/wave/src/main/java/org/waveprotocol/wave/client/editor/event/EditorEventHandler.java b/wave/src/main/java/org/waveprotocol/wave/client/editor/event/EditorEventHandler.java index 05a0e51..f32a903 100644 --- a/wave/src/main/java/org/waveprotocol/wave/client/editor/event/EditorEventHandler.java +++ b/wave/src/main/java/org/waveprotocol/wave/client/editor/event/EditorEventHandler.java @@ -293,7 +293,12 @@ public final class EditorEventHandler { } else if (event.isMutationEvent()) { selectionAffinityMaybeChanged = false; if (!editorInteractor.isExpectingMutationEvents()) { - if (DomHelper.isTextNode(event.getTarget())) { + + // Don't trust in DomHelper.isTextNode(event.getTarget()) + // to detect DOM mutations in text because target property + // is inconsistent among browsers {@DOMImplWebkit#eventGetTarget} + if (event.isDOMCharacterEvent()) { + cachedSelection = editorInteractor.getSelectionPoints(); if (cachedSelection != null) { if (!cachedSelection.isCollapsed()) {