This fixes the MouseEvent constructor, to not call into
getLocationOnScreen(), because this might cause deadlocks. Instead, we
set the absX/absY fields to 0, just like the JDK does.

2007-10-15  Roman Kennke  <[EMAIL PROTECTED]>

        * java/awt/event/MouseEvent.java
        (MouseEvent): For the no-absX/absY constructor, set the
        absX/absY to 0, instead of calling into getLocationOnScreen(),
        which might cause nasty deadlocks.

/Roman

-- 
Dipl.-Inform. (FH) Roman Kennke, Software Engineer, http://kennke.org
aicas Allerton Interworks Computer Automated Systems GmbH
Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany
http://www.aicas.com   * Tel: +49-721-663 968-0
USt-Id: DE216375633, Handelsregister HRB 109481, AG Karlsruhe
Geschäftsführer: Dr. James J. Hunt
Index: java/awt/event/MouseEvent.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/awt/event/MouseEvent.java,v
retrieving revision 1.14
diff -u -1 -0 -r1.14 MouseEvent.java
--- java/awt/event/MouseEvent.java	25 Jun 2007 11:25:52 -0000	1.14
+++ java/awt/event/MouseEvent.java	15 Oct 2007 18:26:43 -0000
@@ -214,51 +214,22 @@
    * @param clickCount the number of mouse clicks for this event
    * @param popupTrigger true if this event triggers a popup menu
    * @param button the most recent mouse button to change state
    * @throws IllegalArgumentException if source is null or button is invalid
    * @since 1.4
    */
   public MouseEvent(Component source, int id, long when, int modifiers,
                     int x, int y, int clickCount, boolean popupTrigger,
                     int button)
   {
-    super(source, id, when, modifiers);
-
-    this.x = x;
-    this.y = y;
-    this.clickCount = clickCount;
-    this.popupTrigger = popupTrigger;
-    this.button = button;
-    if (button < NOBUTTON || button > BUTTON3)
-      throw new IllegalArgumentException();
-    if ((modifiers & EventModifier.OLD_MASK) != 0)
-      {
-        if ((modifiers & BUTTON1_MASK) != 0)
-          this.button = BUTTON1;
-        else if ((modifiers & BUTTON2_MASK) != 0)
-          this.button = BUTTON2;
-        else if ((modifiers & BUTTON3_MASK) != 0)
-          this.button = BUTTON3;
-      }
-    // clear the mouse button modifier masks if this is a button
-    // release event.
-    if (id == MOUSE_RELEASED)
-      this.modifiersEx &= ~(BUTTON1_DOWN_MASK
-			    | BUTTON2_DOWN_MASK
-			    | BUTTON3_DOWN_MASK);
-
-    if (source != null)
-      {
-        Point screenLoc = source.getLocationOnScreen();
-        absX = screenLoc.x + x;
-        absY = screenLoc.y + y;
-      }
+    this(source, id, when, modifiers, x, y, 0, 0, clickCount, popupTrigger,
+         button);
   }
 
   /**
    * Initializes a new instance of <code>MouseEvent</code> with the specified
    * information. Note that an invalid id leads to unspecified results.
    *
    * @param source the source of the event
    * @param id the event id
    * @param when the timestamp of when the event occurred
    * @param modifiers the modifier keys during the event, in old or new style

Reply via email to