From b841de3f98a34bf7e5a6c61f7cfe67ee77f6d11f Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Tue, 17 Sep 2013 14:37:55 +1000 Subject: [PATCH 1/2] rhbz1008253 - intercept ESC so that firefox won't close connection --- .../presenter/KeyShortcutPresenter.java | 2 +- .../ui/ShortcutContextAwareDialogBox.java | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/KeyShortcutPresenter.java b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/KeyShortcutPresenter.java index 55b624fb04..b63b0e5280 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/KeyShortcutPresenter.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/presenter/KeyShortcutPresenter.java @@ -200,7 +200,7 @@ public void onPreviewNativeEvent(NativePreviewEvent nativeEvent) .addKey(new Keys(Keys.NO_MODIFIER, KeyCodes.KEY_ESCAPE)) .setContext(ShortcutContext.Application) .setDescription(messages.closeShortcutView()) - .setKeyEvent(KeyEvent.KEY_UP) + .setKeyEvent(KeyEvent.KEY_DOWN) .setPreventDefault(true) .setStopPropagation(true) .setHandler(new KeyShortcutEventHandler() diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java index 64b2b7a194..9e07b06cad 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java @@ -1,7 +1,12 @@ package org.zanata.webtrans.client.ui; +import org.zanata.webtrans.client.events.KeyShortcutEvent; +import org.zanata.webtrans.client.events.KeyShortcutEventHandler; +import org.zanata.webtrans.client.keys.KeyShortcut; +import org.zanata.webtrans.client.keys.Keys; import org.zanata.webtrans.client.keys.ShortcutContext; import org.zanata.webtrans.client.presenter.KeyShortcutPresenter; +import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.user.client.ui.DialogBox; /** @@ -17,6 +22,22 @@ public ShortcutContextAwareDialogBox(boolean autoHide, boolean modal, ShortcutCo super(autoHide, modal); this.modalContext = modalContext; this.keyShortcutPresenter = keyShortcutPresenter; + // intercept esc key so that Firefox won't close event service connection + KeyShortcut hideSelfShortcut = KeyShortcut.Builder.builder() + .addKey(new Keys(Keys.NO_MODIFIER, KeyCodes.KEY_ESCAPE)) + .setContext(modalContext) + .setKeyEvent(KeyShortcut.KeyEvent.KEY_DOWN) + .setPreventDefault(true) + .setStopPropagation(true) + .setHandler(new KeyShortcutEventHandler() + { + @Override + public void onKeyShortcut(KeyShortcutEvent event) + { + hide(); + } + }).build(); + keyShortcutPresenter.register(hideSelfShortcut); } @Override From 9c8f1b9406aba68e1e2dc6e03c06a366a87857c5 Mon Sep 17 00:00:00 2001 From: Patrick Huang Date: Wed, 18 Sep 2013 11:14:31 +1000 Subject: [PATCH 2/2] rhbz1008253 - ESC only close dialog if autoHide and modal are true --- .../ui/ShortcutContextAwareDialogBox.java | 42 +++++++++++++++---- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java index 9e07b06cad..f09897e18b 100644 --- a/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java +++ b/zanata-war/src/main/java/org/zanata/webtrans/client/ui/ShortcutContextAwareDialogBox.java @@ -17,29 +17,53 @@ public class ShortcutContextAwareDialogBox extends DialogBox private final ShortcutContext modalContext; private final KeyShortcutPresenter keyShortcutPresenter; - public ShortcutContextAwareDialogBox(boolean autoHide, boolean modal, ShortcutContext modalContext, KeyShortcutPresenter keyShortcutPresenter) + public ShortcutContextAwareDialogBox(final boolean autoHide, final boolean modal, ShortcutContext modalContext, KeyShortcutPresenter keyShortcutPresenter) { super(autoHide, modal); this.modalContext = modalContext; this.keyShortcutPresenter = keyShortcutPresenter; // intercept esc key so that Firefox won't close event service connection + KeyShortcutEventHandler handler = createKeyShortcutEventHandler(autoHide, modal); KeyShortcut hideSelfShortcut = KeyShortcut.Builder.builder() .addKey(new Keys(Keys.NO_MODIFIER, KeyCodes.KEY_ESCAPE)) .setContext(modalContext) .setKeyEvent(KeyShortcut.KeyEvent.KEY_DOWN) .setPreventDefault(true) .setStopPropagation(true) - .setHandler(new KeyShortcutEventHandler() - { - @Override - public void onKeyShortcut(KeyShortcutEvent event) - { - hide(); - } - }).build(); + .setHandler(handler) + .build(); keyShortcutPresenter.register(hideSelfShortcut); } + private KeyShortcutEventHandler createKeyShortcutEventHandler(boolean autoHide, boolean modal) + { + KeyShortcutEventHandler handler; + if (autoHide && modal) + { + handler = new KeyShortcutEventHandler() + { + @Override + public void onKeyShortcut(KeyShortcutEvent event) + { + // no op + } + }; + + } + else + { + handler = new KeyShortcutEventHandler() + { + @Override + public void onKeyShortcut(KeyShortcutEvent event) + { + hide(); + } + }; + } + return handler; + } + @Override public void hide() {