summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2009-10-01 14:54:07 +0000
committerFelipe Heidrich <fheidric>2009-10-01 14:54:07 +0000
commit13a2c5260ef71dd3f193e16d904229bb747939ad (patch)
tree870694406437d00840ffef736998ec13964d29b5
parent50a4e1e7fe807db84a5f96e95903cf0a5a2afde4 (diff)
downloadeclipse.platform.swt-13a2c5260ef71dd3f193e16d904229bb747939ad.tar.gz
eclipse.platform.swt-13a2c5260ef71dd3f193e16d904229bb747939ad.tar.xz
eclipse.platform.swt-13a2c5260ef71dd3f193e16d904229bb747939ad.zip
Bug 143911 - differentiate left and right modifier keys in keyPressed event
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java1
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java37
2 files changed, 38 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
index 90075f94ad..87b829b092 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Control.java
@@ -1214,6 +1214,7 @@ void flagsChanged (int /*long*/ id, int /*long*/ sel, int /*long*/ theEvent) {
if (type == SWT.KeyDown) s.keyInputHappened = true;
Event event = new Event();
event.keyCode = keyCode;
+ setLocationMask(event, nsEvent);
setInputState (event, nsEvent, type);
if (!sendKeyEvent (type, event)) return;
}
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
index 847f663406..7fbe75358b 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Widget.java
@@ -1589,10 +1589,47 @@ boolean setKeyState (Event event, int type, NSEvent nsEvent) {
if (event.keyCode == 0 && event.character == 0) {
if (!isNull) return false;
}
+ setLocationMask (event, nsEvent);
setInputState (event, nsEvent, type);
return true;
}
+void setLocationMask (Event event, NSEvent nsEvent) {
+ switch (nsEvent.keyCode ()) {
+ case 55: /* LEFT COMMAND */
+ case 56: /* LEFT SHIFT */
+ case 58: /* LEFT ALT */
+ case 59: /* LEFT CONTROL */
+ event.stateMask |= SWT.LOCATION_LEFT;
+ break;
+ case 54: /* RIGHT COMMAND */
+ case 60: /* RIGHT SHIFT */
+ case 61: /* RIGHT ALT */
+ case 62: /* RIGHT CONTROL */
+ event.stateMask |= SWT.LOCATION_RIGHT;
+ break;
+ case 67: /* KEYPAD_MULTIPLY */
+ case 69: /* KEYPAD_ADD */
+ case 76: /* KEYPAD_CR */
+ case 78: /* KEYPAD_SUBTRACT */
+ case 65: /* KEYPAD_DECIMAL */
+ case 75: /* KEYPAD_DIVIDE */
+ case 82: /* KEYPAD_0 */
+ case 83: /* KEYPAD_1 */
+ case 84: /* KEYPAD_2 */
+ case 85: /* KEYPAD_3 */
+ case 86: /* KEYPAD_4 */
+ case 87: /* KEYPAD_5 */
+ case 88: /* KEYPAD_6 */
+ case 89: /* KEYPAD_7 */
+ case 91: /* KEYPAD_8 */
+ case 92: /* KEYPAD_9 */
+ case 81: /* KEYPAD_EQUAL */
+ event.stateMask |= SWT.LOCATION_KEYPAD;
+ break;
+ }
+}
+
boolean setMarkedText_selectedRange (int /*long*/ id, int /*long*/ sel, int /*long*/ string, int /*long*/ range) {
return true;
}