| Summary: | [Widgets] KeyUp dispatched while dragging mouse with SPACE pressed | ||
|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Seok-Ho, Yang <seokho.yang> |
| Component: | SWT | Assignee: | Platform-SWT-Inbox <platform-swt-inbox> |
| Status: | CLOSED WONTFIX | QA Contact: | Felipe Heidrich <eclipse.felipe> |
| Severity: | normal | ||
| Priority: | P3 | CC: | hudsonr, snorthov |
| Version: | 3.1.1 | Keywords: | triaged |
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Windows XP | ||
| Whiteboard: | stalebug | ||
|
Description
Seok-Ho, Yang
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. |