From 0f327ddba2ef167e6d6596a8037c35739c3a2864 Mon Sep 17 00:00:00 2001 From: "edburns%acm.org" Date: Wed, 1 Dec 2004 15:46:23 +0000 Subject: [PATCH] This correctly implements the keyListener logic. I had the mapping between mozilla concepts and java concepts wrong before. The correct mapping is: Mozilla concept Java concept KeyDown keyPressed KeyUp keyReleased KeyPress keyTyped KeyCode keyCode CharCode keyChar M webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java - Force the keyCode to be VK_UNDEFINED if this is a KEY_TYPED event. - For security, log any exceptions thrown during ctor of KeyEvent. M webclient/src_moz/EmbedEventListener.cpp - remove unused automatic vars. M webclient/src_moz/NavigationImpl.cpp - roll back change done by Brian Ryner, since it doesn't make sense under mozilla 1.7. M webclient/src_share/jni_util.cpp - reverse mapping of CHAR_CODE and KEY_CODE to their java counterparts. M webclient/test/automated/src/classes/org/mozilla/webclient/KeyListenerTest.java - Add in some code to make it easier to run this testcase in a manual fashion. git-svn-id: svn://10.0.0.236/trunk@166056 18797224-902f-48f8-a5cc-f745e15eee43 --- .../wrapper_native/EventRegistrationImpl.java | 21 ++++++++++++--- .../webclient/src_moz/EmbedEventListener.cpp | 2 -- .../java/webclient/src_moz/NavigationImpl.cpp | 4 ++- mozilla/java/webclient/src_share/jni_util.cpp | 4 +-- .../mozilla/webclient/KeyListenerTest.java | 26 ++++++++++++++++++- 5 files changed, 47 insertions(+), 10 deletions(-) diff --git a/mozilla/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java b/mozilla/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java index a9f7b2d7a79..8fc58ee0837 100644 --- a/mozilla/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java +++ b/mozilla/java/webclient/classes_spec/org/mozilla/webclient/impl/wrapper_native/EventRegistrationImpl.java @@ -444,7 +444,12 @@ private EventObject createKeyEvent(long eventType, Object eventData) { } } if (null != (str = props.getProperty("KeyCode"))) { - keyCode = Integer.valueOf(str).intValue(); + if (0 == str.length() || KeyEvent.KEY_TYPED == eventType) { + keyCode = KeyEvent.VK_UNDEFINED; + } + else { + keyCode = Integer.valueOf(str).intValue(); + } } if (null != (str = props.getProperty("KeyChar"))) { if (0 == str.length()) { @@ -458,7 +463,6 @@ private EventObject createKeyEvent(long eventType, Object eventData) { long when = System.currentTimeMillis(); if (KeyEvent.KEY_TYPED == eventType) { - keyCode = KeyEvent.VK_UNDEFINED; // swalow events where the event is KEY_TYPED, but the keyChar // is undefined, since these would throw an // IllegalArgumentException. @@ -466,8 +470,17 @@ private EventObject createKeyEvent(long eventType, Object eventData) { return null; } } - keyEvent = new KeyEvent((Component) browserControlCanvas, (int) eventType, - when, modifiers, keyCode, keyChar); + try { + keyEvent = new KeyEvent((Component) browserControlCanvas, (int) eventType, + when, modifiers, keyCode, keyChar); + } + catch (Throwable e) { + String msg = e.getMessage(); + System.out.println(e.toString() + " " + e.getMessage() + + " eventType: " + eventType + + " keyCode: " + keyCode + + " keyChar: " + keyChar); + } WebclientEvent event = new WebclientEvent(browserControlCanvas, eventType, keyEvent); diff --git a/mozilla/java/webclient/src_moz/EmbedEventListener.cpp b/mozilla/java/webclient/src_moz/EmbedEventListener.cpp index dbf43cd7cd7..8426b307a2d 100644 --- a/mozilla/java/webclient/src_moz/EmbedEventListener.cpp +++ b/mozilla/java/webclient/src_moz/EmbedEventListener.cpp @@ -494,9 +494,7 @@ nsresult EmbedEventListener::addKeyEventDataToProperties(nsCOMPtr