Hi,
the attached patch properly calculates the modifiers for mouse press
and release events.
Ok, to commit?
2007-05-22 Robert Schuster [EMAIL PROTECTED]
* gnu/java/awt/peer/x/XEventQueue.java:
(handleEvent): Calculate modifier value for mouse presse
and release events.
(buttonToModifier): New method.
* gnu/java/awt/peer/x/KeyboardMapping.java:
(mapModifiers): Added cases for alt gr and the meta key.
Regards
Robert
Index: gnu/java/awt/peer/x/KeyboardMapping.java
===
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/x/KeyboardMapping.java,v
retrieving revision 1.1
diff -u -r1.1 KeyboardMapping.java
--- gnu/java/awt/peer/x/KeyboardMapping.java 29 Jun 2006 15:15:56 - 1.1
+++ gnu/java/awt/peer/x/KeyboardMapping.java 22 May 2007 21:37:43 -
@@ -405,8 +405,12 @@
if ((xMods Input.SHIFT_MASK) != 0)
mods |= KeyEvent.SHIFT_MASK | KeyEvent.SHIFT_DOWN_MASK;
+if ((xMods Input.META_MASK) != 0)
+ mods |= KeyEvent.META_MASK | KeyEvent.META_DOWN_MASK;
if ((xMods Input.ALT_MASK) != 0)
mods |= KeyEvent.ALT_MASK | KeyEvent.ALT_DOWN_MASK;
+if ((xMods Input.MOD5_MASK) != 0)
+ mods |= KeyEvent.ALT_GRAPH_MASK | KeyEvent.ALT_GRAPH_DOWN_MASK;
if ((xMods Input.CONTROL_MASK) != 0)
mods |= KeyEvent.CTRL_MASK | KeyEvent.CTRL_DOWN_MASK;
Index: gnu/java/awt/peer/x/XEventPump.java
===
RCS file: /sources/classpath/classpath/gnu/java/awt/peer/x/XEventPump.java,v
retrieving revision 1.5
diff -u -r1.5 XEventPump.java
--- gnu/java/awt/peer/x/XEventPump.java 22 May 2007 18:45:13 - 1.5
+++ gnu/java/awt/peer/x/XEventPump.java 22 May 2007 21:37:43 -
@@ -48,6 +48,8 @@
import java.awt.event.PaintEvent;
import java.util.HashMap;
+import gnu.java.awt.EventModifier;
+
import gnu.x11.Display;
import gnu.x11.event.ButtonPress;
import gnu.x11.event.ButtonRelease;
@@ -162,10 +164,15 @@
awtWindow = (Window) windows.get(key);
// Create and post the mouse event.
int button = bp.detail();
+
+ // AWT cannot handle more than 3 buttons and expects 0 instead.
+ if (button = 3)
+button = 0;
drag = button;
MouseEvent mp = new MouseEvent(awtWindow, MouseEvent.MOUSE_PRESSED,
- System.currentTimeMillis(), 0,
+ System.currentTimeMillis(),
+ KeyboardMapping.mapModifiers(bp.state()) | buttonToModifier(button),
bp.event_x(), bp.event_y(),
1, false, button);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(mp);
@@ -174,11 +181,17 @@
ButtonRelease br = (ButtonRelease) xEvent;
key= new Integer(br.event_window_id);
awtWindow = (Window) windows.get(key);
+
+ button = br.detail();
+ // AWT cannot handle more than 3 buttons and expects 0 instead.
+ if (button = 3)
+button = 0;
drag = -1;
MouseEvent mr = new MouseEvent(awtWindow, MouseEvent.MOUSE_RELEASED,
- System.currentTimeMillis(), 0,
+ System.currentTimeMillis(),
+ KeyboardMapping.mapModifiers(br.state()) | buttonToModifier(button),
br.event_x(), br.event_y(),
- 1, false, br.detail());
+ 1, false, button);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(mr);
break;
case MotionNotify.CODE:
@@ -297,6 +310,23 @@
}
+ /** Translates an X button identifier to the AWT's MouseEvent modifier
+ * mask. As the AWT cannot handle more than 3 buttons those return
+ * code0/code.
+ */
+ static int buttonToModifier(int button)
+ {
+switch (button)
+{
+ case 1:
+return MouseEvent.BUTTON1_DOWN_MASK | MouseEvent.BUTTON1_MASK;
+ case 2:
+return MouseEvent.BUTTON2_DOWN_MASK | MouseEvent.BUTTON2_MASK;
+ case 3:
+return MouseEvent.BUTTON3_DOWN_MASK | MouseEvent.BUTTON3_MASK;
+}
-}
+return 0;
+ }
+}
signature.asc
Description: OpenPGP digital signature