summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2009-09-30 19:46:50 +0000
committerFelipe Heidrich <fheidric>2009-09-30 19:46:50 +0000
commitb208a5b118143351a54d2a097fbada213ab70b31 (patch)
tree28450e5b3a1a19ba4beb49e51e4573e75831d42f
parentdc152e64e56e6b5c4aff8256b1da103c72fdac41 (diff)
downloadeclipse.platform.swt-b208a5b118143351a54d2a097fbada213ab70b31.tar.gz
eclipse.platform.swt-b208a5b118143351a54d2a097fbada213ab70b31.tar.xz
eclipse.platform.swt-b208a5b118143351a54d2a097fbada213ab70b31.zip
Bug 143911 - differentiate left and right modifier keys in keyPressed event
-rwxr-xr-xbundles/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java51
1 files changed, 51 insertions, 0 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java b/bundles/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java
index de1353482c..435ce39e39 100755
--- a/bundles/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/motif/org/eclipse/swt/widgets/Widget.java
@@ -798,6 +798,7 @@ boolean setKeyState (Event event, XKeyEvent xEvent) {
int [] keysym = new int [1];
OS.XLookupString (xEvent, buffer, buffer.length, keysym, null);
boolean isNull = display.fixKey (keysym, buffer, xEvent.state);
+ setLocationState (event, keysym [0]);
if (keysym [0] != 0) {
event.keyCode = Display.translateKey (keysym [0]);
}
@@ -822,6 +823,56 @@ boolean setKeyState (Event event, XKeyEvent xEvent) {
}
return setInputState (event, xEvent.state);
}
+void setLocationState (Event event, int keysym) {
+ switch (keysym) {
+ case OS.XK_Alt_L:
+ case OS.XK_Meta_L:
+ case OS.XK_Control_L:
+ case OS.XK_Shift_L:
+ event.stateMask |= SWT.LOCATION_LEFT;
+ break;
+ case OS.XK_Alt_R:
+ case OS.XK_Meta_R:
+ case OS.XK_Control_R:
+ case OS.XK_Shift_R:
+ event.stateMask |= SWT.LOCATION_RIGHT;
+ break;
+ case OS.XK_KP_Enter:
+ case OS.XK_KP_F1:
+ case OS.XK_KP_F2:
+ case OS.XK_KP_F3:
+ case OS.XK_KP_F4:
+ case OS.XK_KP_Home:
+ case OS.XK_KP_Left:
+ case OS.XK_KP_Up:
+ case OS.XK_KP_Right:
+ case OS.XK_KP_Down:
+ case OS.XK_KP_Page_Up:
+ case OS.XK_KP_Page_Down:
+ case OS.XK_KP_End:
+ case OS.XK_KP_Insert:
+ case OS.XK_KP_Delete:
+ case OS.XK_KP_Equal:
+ case OS.XK_KP_Multiply:
+ case OS.XK_KP_Add:
+ case OS.XK_KP_Subtract:
+ case OS.XK_KP_Decimal:
+ case OS.XK_KP_Divide:
+ case OS.XK_KP_0:
+ case OS.XK_KP_1:
+ case OS.XK_KP_2:
+ case OS.XK_KP_3:
+ case OS.XK_KP_4:
+ case OS.XK_KP_5:
+ case OS.XK_KP_6:
+ case OS.XK_KP_7:
+ case OS.XK_KP_8:
+ case OS.XK_KP_9:
+ case OS.XK_Num_Lock:
+ event.stateMask |= SWT.LOCATION_KEYPAD;
+ break;
+ }
+}
void sendEvent (Event event) {
Display display = event.display;
if (!display.filterEvent (event)) {