Community
Participate
Working Groups
PanningSelectionTool provides panning, it must happen when space bar is pressed, and mouse is dragged. But panning doesn't work because KEY_UP event occur when mouse button is pressed. I'm sure that space bar was holding pressed when mouse button was pressed.
Which platform? Which release of GEF and Eclipse?
(In reply to comment #1) > Which platform? Which release of GEF and Eclipse? Windows XP, GEF 3.1.1, Eclipse 3.1.1
This is working normally for me.
I found the reason and fixed it, but I don't know why that is not working for only me. I'm using Windows XP for Korean. Can be that the cause of this problem? My english is so poor, but I'll try to explain. ------------ MyPanningSelectionTool.java ----------- import org.eclipse.gef.tools.PanningSelectionTool; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyEvent; public class MyPanningSelectionToolEntry extends PanningSelectionTool { protected boolean acceptSpaceBar(KeyEvent e) { return (e.keyCode!=0 && e.character == ' ' && (e.stateMask & SWT.MODIFIER_MASK) == 0); } } ------------ MyPanningSelectionTool.java ----------- I added "e.keyCode!=0" to original code from PanningSelectionTool. When I try to pan, the following events occured 1. Press Space Bar -> KEY_DOWN Event (e.character=' ', e.keyCode=32) 2. Hold Space Bar and Mouse Drag -> KEY_UP Event (e.character=' ', e.keyCode=0) -> MOUSE_DRAG Event PanningSelectionTool checks only e.character, so KEY_UP event leads to state transition to STATE_INITIAL. MyPanningSelectionTool checks both e.character and e.keyCode, then the panning is working now. I tested GEF Logic Example, the panning isn't working in the same manner. I hope I'm not bothering you.
I assume SWT is sending the KeyUp event or we wouldn't be running the code you mention. Moving to SWT for comment.
This seems to be working for me too (tested on English XP). When the space key is released, the keyCode value should be 32.
Can you make it happen on your machine using this code? import org.eclipse.swt.*; import org.eclipse.swt.widgets.*; public class KeyTest { static String stateMask (int stateMask) { String string = ""; if ((stateMask & SWT.CTRL) != 0) string += " CTRL"; if ((stateMask & SWT.ALT) != 0) string += " ALT"; if ((stateMask & SWT.SHIFT) != 0) string += " SHIFT"; if ((stateMask & SWT.COMMAND) != 0) string += " COMMAND"; return string; } static String character (char character) { switch (character) { case 0: return "'\\0'"; case SWT.BS: return "'\\b'"; case SWT.CR: return "'\\r'"; case SWT.DEL: return "DEL"; case SWT.ESC: return "ESC"; case SWT.LF: return "'\\n'"; case SWT.TAB: return "'\\t'"; } return "'" + character +"'"; } static String keyCode (int keyCode) { switch (keyCode) { /* Keyboard and Mouse Masks */ case SWT.ALT: return "ALT"; case SWT.SHIFT: return "SHIFT"; case SWT.CONTROL: return "CONTROL"; case SWT.COMMAND: return "COMMAND"; /* Non-Numeric Keypad Keys */ case SWT.ARROW_UP: return "ARROW_UP"; case SWT.ARROW_DOWN: return "ARROW_DOWN"; case SWT.ARROW_LEFT: return "ARROW_LEFT"; case SWT.ARROW_RIGHT: return "ARROW_RIGHT"; case SWT.PAGE_UP: return "PAGE_UP"; case SWT.PAGE_DOWN: return "PAGE_DOWN"; case SWT.HOME: return "HOME"; case SWT.END: return "END"; case SWT.INSERT: return "INSERT"; /* Virtual and Ascii Keys */ case SWT.BS: return "BS"; case SWT.CR: return "CR"; case SWT.DEL: return "DEL"; case SWT.ESC: return "ESC"; case SWT.LF: return "LF"; case SWT.TAB: return "TAB"; /* Functions Keys */ case SWT.F1: return "F1"; case SWT.F2: return "F2"; case SWT.F3: return "F3"; case SWT.F4: return "F4"; case SWT.F5: return "F5"; case SWT.F6: return "F6"; case SWT.F7: return "F7"; case SWT.F8: return "F8"; case SWT.F9: return "F9"; case SWT.F10: return "F10"; case SWT.F11: return "F11"; case SWT.F12: return "F12"; case SWT.F13: return "F13"; case SWT.F14: return "F14"; case SWT.F15: return "F15"; /* Numeric Keypad Keys */ case SWT.KEYPAD_ADD: return "KEYPAD_ADD"; case SWT.KEYPAD_SUBTRACT: return "KEYPAD_SUBTRACT"; case SWT.KEYPAD_MULTIPLY: return "KEYPAD_MULTIPLY"; case SWT.KEYPAD_DIVIDE: return "KEYPAD_DIVIDE"; case SWT.KEYPAD_DECIMAL: return "KEYPAD_DECIMAL"; case SWT.KEYPAD_CR: return "KEYPAD_CR"; case SWT.KEYPAD_0: return "KEYPAD_0"; case SWT.KEYPAD_1: return "KEYPAD_1"; case SWT.KEYPAD_2: return "KEYPAD_2"; case SWT.KEYPAD_3: return "KEYPAD_3"; case SWT.KEYPAD_4: return "KEYPAD_4"; case SWT.KEYPAD_5: return "KEYPAD_5"; case SWT.KEYPAD_6: return "KEYPAD_6"; case SWT.KEYPAD_7: return "KEYPAD_7"; case SWT.KEYPAD_8: return "KEYPAD_8"; case SWT.KEYPAD_9: return "KEYPAD_9"; case SWT.KEYPAD_EQUAL: return "KEYPAD_EQUAL"; /* Other keys */ case SWT.CAPS_LOCK: return "CAPS_LOCK"; case SWT.NUM_LOCK: return "NUM_LOCK"; case SWT.SCROLL_LOCK: return "SCROLL_LOCK"; case SWT.PAUSE: return "PAUSE"; case SWT.BREAK: return "BREAK"; case SWT.PRINT_SCREEN: return "PRINT_SCREEN"; case SWT.HELP: return "HELP"; } return character ((char) keyCode); } public static void main (String [] args) { Display display = new Display (); Shell shell = new Shell (display); Listener listener = new Listener() { public void handleEvent(Event e) { String string = e.type == SWT.KeyDown ? "DOWN:" : "UP :"; string += " stateMask=0x" + Integer.toHexString (e.stateMask) + stateMask (e.stateMask) + ","; string += " keyCode=0x" + Integer.toHexString (e.keyCode) + " " + keyCode (e.keyCode) + ","; string += " character=0x" + Integer.toHexString (e.character) + " " + character (e.character); System.out.println (string); } }; shell.addListener(SWT.KeyDown, listener); shell.addListener(SWT.KeyUp, listener); shell.setSize (200, 200); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); } }
I tested your code. I wish that this result helps you. --- Environment --- MS Windows XP Pro SP2 for Korean Intel Celeron 2.8G, 1G RAM JRE: Sun JDK 1.5.0_06 --- Result --- DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' <-- Press Spacebar UP : stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' <-- Release Spacebar in a short time DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' <-- Start to hold Spacebar DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' UP : stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' <-- Release Spacebar DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' '<-- Start to hold space DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' UP : stateMask=0x0, keyCode=0x0 '\0', character=0x20 ' ' <-- click mouse left-button DOWN: stateMask=0x80000, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x80000, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x80000, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x80000, keyCode=0x20 ' ', character=0x20 ' ' <-- release button DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' DOWN: stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' UP : stateMask=0x0, keyCode=0x20 ' ', character=0x20 ' ' <-- release space
Your bug has been moved to triage, visit http://www.eclipse.org/swt/triage.php for more info.
This is a one-off bulk update. (The last one in the triage migration). Moving bugs from swt-triaged@eclipse to platform-swt-inbox@eclipse.org and adding "triaged" keyword as per new triage process: https://wiki.eclipse.org/SWT/Devel/Triage See Bug 518478 for details. Tag for notification/mail filters: @TriageBulkUpdate
This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. As such, we're closing this bug. If you have further information on the current state of the bug, please add it and reopen this bug. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant. -- The automated Eclipse Genie.