117 // invert the wheelRotation for the peer 118 peer.dispatchMouseWheelEvent(when, x, y, modifiers, scrollType, 119 scrollAmount, -wheelRotation, -delta, null); 120 } 121 122 /** 123 * Handles key events. 124 */ 125 void handleKeyEvent(int eventType, int modifierFlags, String chars, 126 short keyCode, boolean needsKeyTyped) { 127 boolean isFlagsChangedEvent = 128 isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) : 129 (eventType == CocoaConstants.NSFlagsChanged); 130 131 int jeventType = KeyEvent.KEY_PRESSED; 132 int jkeyCode = KeyEvent.VK_UNDEFINED; 133 int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN; 134 boolean postsTyped = false; 135 136 char testChar = KeyEvent.CHAR_UNDEFINED; 137 char testDeadChar = 0; 138 139 if (isFlagsChangedEvent) { 140 int[] in = new int[] {modifierFlags, keyCode}; 141 int[] out = new int[3]; // [jkeyCode, jkeyLocation, jkeyType] 142 143 NSEvent.nsKeyModifiersToJavaKeyInfo(in, out); 144 145 jkeyCode = out[0]; 146 jkeyLocation = out[1]; 147 jeventType = out[2]; 148 } else { 149 if (chars != null && chars.length() > 0) { 150 testChar = chars.charAt(0); 151 } 152 153 int[] in = new int[] {testChar, testDeadChar, modifierFlags, keyCode}; 154 int[] out = new int[2]; // [jkeyCode, jkeyLocation] 155 156 postsTyped = NSEvent.nsToJavaKeyInfo(in, out); 157 if (!postsTyped) { 158 testChar = KeyEvent.CHAR_UNDEFINED; 159 } 160 161 jkeyCode = out[0]; 162 jkeyLocation = out[1]; 163 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) : 164 NSEvent.nsToJavaEventType(eventType); 165 } 166 167 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags); 168 // Some keys may generate a KEY_TYPED, but we can't determine 169 // what that character is. That's likely a bug, but for now we 170 // just check for CHAR_UNDEFINED. 171 if (javaChar == KeyEvent.CHAR_UNDEFINED) { 172 postsTyped = false; 173 } 174 175 176 int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags); 177 long when = System.currentTimeMillis(); 178 179 peer.dispatchKeyEvent(jeventType, when, jmodifiers, 180 jkeyCode, javaChar, jkeyLocation); | 117 // invert the wheelRotation for the peer 118 peer.dispatchMouseWheelEvent(when, x, y, modifiers, scrollType, 119 scrollAmount, -wheelRotation, -delta, null); 120 } 121 122 /** 123 * Handles key events. 124 */ 125 void handleKeyEvent(int eventType, int modifierFlags, String chars, 126 short keyCode, boolean needsKeyTyped) { 127 boolean isFlagsChangedEvent = 128 isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) : 129 (eventType == CocoaConstants.NSFlagsChanged); 130 131 int jeventType = KeyEvent.KEY_PRESSED; 132 int jkeyCode = KeyEvent.VK_UNDEFINED; 133 int jkeyLocation = KeyEvent.KEY_LOCATION_UNKNOWN; 134 boolean postsTyped = false; 135 136 char testChar = KeyEvent.CHAR_UNDEFINED; 137 boolean isDeadChar = (chars!= null && chars.length() == 0); 138 139 if (isFlagsChangedEvent) { 140 int[] in = new int[] {modifierFlags, keyCode}; 141 int[] out = new int[3]; // [jkeyCode, jkeyLocation, jkeyType] 142 143 NSEvent.nsKeyModifiersToJavaKeyInfo(in, out); 144 145 jkeyCode = out[0]; 146 jkeyLocation = out[1]; 147 jeventType = out[2]; 148 } else { 149 if (chars != null && chars.length() > 0) { 150 testChar = chars.charAt(0); 151 } 152 153 int[] in = new int[] {testChar, isDeadChar ? 1 : 0, modifierFlags, keyCode}; 154 int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar] 155 156 postsTyped = NSEvent.nsToJavaKeyInfo(in, out); 157 if (!postsTyped) { 158 testChar = KeyEvent.CHAR_UNDEFINED; 159 } 160 161 if(isDeadChar){ 162 testChar = (char) out[2]; 163 } 164 165 jkeyCode = out[0]; 166 jkeyLocation = out[1]; 167 jeventType = isNpapiCallback ? NSEvent.npToJavaEventType(eventType) : 168 NSEvent.nsToJavaEventType(eventType); 169 } 170 171 char javaChar = NSEvent.nsToJavaChar(testChar, modifierFlags); 172 // Some keys may generate a KEY_TYPED, but we can't determine 173 // what that character is. That's likely a bug, but for now we 174 // just check for CHAR_UNDEFINED. 175 if (javaChar == KeyEvent.CHAR_UNDEFINED) { 176 postsTyped = false; 177 } 178 179 180 int jmodifiers = NSEvent.nsToJavaKeyModifiers(modifierFlags); 181 long when = System.currentTimeMillis(); 182 183 peer.dispatchKeyEvent(jeventType, when, jmodifiers, 184 jkeyCode, javaChar, jkeyLocation); |