117 }
118 // invert the wheelRotation for the peer
119 eventNotifier.notifyMouseWheelEvent(when, x, y, absX, absY, modifiers,
120 scrollType, scrollAmount,
121 -wheelRotation, -delta, null);
122 }
123
124 /**
125 * Handles key events.
126 */
127 void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers,
128 short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) {
129 boolean isFlagsChangedEvent =
130 isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
131 (eventType == CocoaConstants.NSFlagsChanged);
132
133 int jeventType = KeyEvent.KEY_PRESSED;
134 int jkeyCode = KeyEvent.VK_UNDEFINED;
135 int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN;
136 boolean postsTyped = false;
137
138 char testChar = KeyEvent.CHAR_UNDEFINED;
139 boolean isDeadChar = (chars!= null && chars.length() == 0);
140
141 if (isFlagsChangedEvent) {
142 int[] in = new int[] {modifierFlags, keyCode};
143 int[] out = new int[3]; // [jkeyCode, jkeyLocation, jkeyType]
144
145 NSEvent.nsKeyModifiersToJavaKeyInfo(in, out);
146
147 jkeyCode = out[0];
148 jkeyLocation = out[1];
149 jeventType = out[2];
150 } else {
151 if (chars != null && chars.length() > 0) {
152 testChar = chars.charAt(0);
153 }
154
155 char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
156 charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED;
157
158 int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode};
159 int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar]
160
161 postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
162 if (!postsTyped) {
163 testChar = KeyEvent.CHAR_UNDEFINED;
164 }
165
166 if(isDeadChar){
167 testChar = (char) out[2];
168 if(testChar == 0){
169 return;
170 }
171 }
172
173 jkeyCode = out[0];
174 jkeyLocation = out[1];
175 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
176 NSEvent.nsToJavaEventType(eventType);
177 }
178
179 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags);
180 // Some keys may generate a KEY_TYPED, but we can't determine
181 // what that character is. That's likely a bug, but for now we
182 // just check for CHAR_UNDEFINED.
183 if (javaChar == KeyEvent.CHAR_UNDEFINED) {
184 postsTyped = false;
185 }
186
187 int jmodifiers = NSEvent.nsToJavaModifiers(modifierFlags);
188 long when = System.currentTimeMillis();
189
190 if (jeventType == KeyEvent.KEY_PRESSED) {
191 lastKeyPressCode = jkeyCode;
192 }
193 eventNotifier.notifyKeyEvent(jeventType, when, jmodifiers,
194 jkeyCode, javaChar, jkeyLocation);
195
196 // Current browser may be sending input events, so don't
197 // post the KEY_TYPED here.
198 postsTyped &= needsKeyTyped;
199
|
117 }
118 // invert the wheelRotation for the peer
119 eventNotifier.notifyMouseWheelEvent(when, x, y, absX, absY, modifiers,
120 scrollType, scrollAmount,
121 -wheelRotation, -delta, null);
122 }
123
124 /**
125 * Handles key events.
126 */
127 void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers,
128 short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) {
129 boolean isFlagsChangedEvent =
130 isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
131 (eventType == CocoaConstants.NSFlagsChanged);
132
133 int jeventType = KeyEvent.KEY_PRESSED;
134 int jkeyCode = KeyEvent.VK_UNDEFINED;
135 int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN;
136 boolean postsTyped = false;
137 boolean spaceKeyTyped = false;
138
139 char testChar = KeyEvent.CHAR_UNDEFINED;
140 boolean isDeadChar = (chars!= null && chars.length() == 0);
141
142 if (isFlagsChangedEvent) {
143 int[] in = new int[] {modifierFlags, keyCode};
144 int[] out = new int[3]; // [jkeyCode, jkeyLocation, jkeyType]
145
146 NSEvent.nsKeyModifiersToJavaKeyInfo(in, out);
147
148 jkeyCode = out[0];
149 jkeyLocation = out[1];
150 jeventType = out[2];
151 } else {
152 if (chars != null && chars.length() > 0) {
153 testChar = chars.charAt(0);
154
155 //Check if String chars contains SPACE character.
156 if ("".equals(chars.trim())) {
157 spaceKeyTyped = true;
158 }
159 }
160
161 char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
162 charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED;
163
164 int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode};
165 int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar]
166
167 postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
168 if (!postsTyped) {
169 testChar = KeyEvent.CHAR_UNDEFINED;
170 }
171
172 if(isDeadChar){
173 testChar = (char) out[2];
174 if(testChar == 0){
175 return;
176 }
177 }
178
179 jkeyCode = out[0];
180 jkeyLocation = out[1];
181 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) :
182 NSEvent.nsToJavaEventType(eventType);
183 }
184
185 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags, spaceKeyTyped);
186 // Some keys may generate a KEY_TYPED, but we can't determine
187 // what that character is. That's likely a bug, but for now we
188 // just check for CHAR_UNDEFINED.
189 if (javaChar == KeyEvent.CHAR_UNDEFINED) {
190 postsTyped = false;
191 }
192
193 int jmodifiers = NSEvent.nsToJavaModifiers(modifierFlags);
194 long when = System.currentTimeMillis();
195
196 if (jeventType == KeyEvent.KEY_PRESSED) {
197 lastKeyPressCode = jkeyCode;
198 }
199 eventNotifier.notifyKeyEvent(jeventType, when, jmodifiers,
200 jkeyCode, javaChar, jkeyLocation);
201
202 // Current browser may be sending input events, so don't
203 // post the KEY_TYPED here.
204 postsTyped &= needsKeyTyped;
205
|