summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarolyn MacLeod <Carolyn_MacLeod@ca.ibm.com>2012-05-01 16:19:31 -0400
committerCarolyn MacLeod <Carolyn_MacLeod@ca.ibm.com>2012-05-01 16:19:53 -0400
commitd7a6612b3248b775bccac31a7a2075f7133d0316 (patch)
tree3bc8febb4fc7a0dcabadd0dbbda8dcaf3447017a
parent3d7e9efdafdd63c6f019a7bc97c67f514df9a8ee (diff)
downloadeclipse.platform.swt-d7a6612b3248b775bccac31a7a2075f7133d0316.tar.gz
eclipse.platform.swt-d7a6612b3248b775bccac31a7a2075f7133d0316.tar.xz
eclipse.platform.swt-d7a6612b3248b775bccac31a7a2075f7133d0316.zip
Bug 378116 - Tracker not forwarding keyboard events while in Tracker
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java48
1 files changed, 44 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
index fdc5a4d039..3d295d135a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/cocoa/org/eclipse/swt/widgets/Tracker.java
@@ -550,12 +550,52 @@ void mouse (NSEvent nsEvent) {
}
void key (NSEvent nsEvent) {
- //TODO send event
-// if (!sendKeyEvent (SWT.KeyDown, theEvent)) return OS.noErr;
+ int nsType = (int)/*64*/nsEvent.type();
int /*long*/ modifierFlags = nsEvent.modifierFlags();
+ int nsKeyCode = nsEvent.keyCode();
+ int keyCode = Display.translateKey (nsKeyCode);
+
+ switch (nsType) {
+ case OS.NSKeyDown:
+ case OS.NSKeyUp: {
+ Event event = new Event();
+ event.keyCode = keyCode;
+ int type = nsType == OS.NSKeyDown ? SWT.KeyDown : SWT.KeyUp;
+ if (!setKeyState (event, type, nsEvent)) break;
+ sendKeyEvent (type, event);
+ break;
+ }
+ case OS.NSFlagsChanged: {
+ int mask = 0;
+ switch (keyCode) {
+ case SWT.ALT: mask = OS.NSAlternateKeyMask; break;
+ case SWT.CONTROL: mask = OS.NSControlKeyMask; break;
+ case SWT.COMMAND: mask = OS.NSCommandKeyMask; break;
+ case SWT.SHIFT: mask = OS.NSShiftKeyMask; break;
+ case SWT.CAPS_LOCK:
+ Event event = new Event();
+ event.keyCode = keyCode;
+ setInputState (event, nsEvent, SWT.KeyDown);
+ sendKeyEvent (SWT.KeyDown, event);
+ setInputState (event, nsEvent, SWT.KeyUp);
+ sendKeyEvent (SWT.KeyUp, event);
+ break;
+ }
+ if (mask != 0) {
+ int type = (mask & modifierFlags) != 0 ? SWT.KeyDown : SWT.KeyUp;
+ Event event = new Event();
+ event.keyCode = keyCode;
+ setLocationMask(event, nsEvent);
+ setInputState (event, nsEvent, type);
+ if (!sendKeyEvent (type, event)) return;
+ }
+ break;
+ }
+ }
+
int stepSize = (modifierFlags & OS.NSControlKeyMask) != 0 ? STEPSIZE_SMALL : STEPSIZE_LARGE;
int xChange = 0, yChange = 0;
- switch (nsEvent.keyCode()) {
+ switch (nsKeyCode) {
case 53: /* Esc */
cancelled = true;
tracking = false;
@@ -814,7 +854,7 @@ public boolean open () {
mouse(event);
break;
case OS.NSKeyDown:
-// case OS.NSKeyUp:
+ case OS.NSKeyUp:
case OS.NSFlagsChanged:
key(event);
break;