JDK-4394257 : Mouse Events (except entered/exited) have BUTTON1_MASK modifier set.
  • Type: Bug
  • Component: client-libs
  • Sub-Component: java.awt
  • Affected Version: 1.3.0
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: linux
  • CPU: x86
  • Submitted: 2000-12-01
  • Updated: 2001-02-01
  • Resolved: 2001-02-01
Related Reports
Duplicate :  
Description

Name: boT120536			Date: 12/01/2000


java version "1.3.0beta_refresh"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0beta_refresh-b09)
Java HotSpot(TM) Client VM (build 1.3.0beta-b07, mixed mode)


The following code displays the mouse events that are produced:

import java.awt.*;
import java.awt.event.*;

import java.util.Vector;
import java.util.Enumeration;

public class MouseEvents extends Frame implements MouseListener,
MouseMotionListener {


    public static void main(String argv[]) {
        MouseEvents st = new MouseEvents();
        st.setSize(100,100);
	st.setResizable(false);
        st.show();

    }

    String name;

    public MouseEvents() {
        addMouseListener(this);
	addMouseMotionListener(this);
        
    }


    

    //---------------------------------------------
    // MouseListener

    public void mouseClicked(MouseEvent e){
        System.out.println("mouseClicked "+e);
	System.out.println("clickCount "+e.getClickCount());
	printButtons(e);
    }

    public void mousePressed(MouseEvent e) {
        System.out.println("mousePressed " + e);
	printButtons(e);
    }

    public void mouseReleased(MouseEvent e){
        System.out.println("mouseReleased "+e);
	printButtons(e);
    }

    public void mouseEntered(MouseEvent e){
        System.out.println("mouseEntered "+e);
	printButtons(e);
    }

    public void mouseExited(MouseEvent e){
        System.out.println("mouseExited "+e);
	printButtons(e);
    }

    //---------------------------------------------
    // MouseMotionListener

    public void mouseMoved(MouseEvent e) {
	System.out.println("mouseMoved "+e);
	printButtons(e);
    }

    public void mouseDragged(MouseEvent e) {
	System.out.println("mouseDragged "+e);
	printButtons(e);
    }

    private void printButtons(MouseEvent e) {
        if ((e.getModifiers() & InputEvent.BUTTON1_MASK) != 0)
            System.out.println("Button 1");

        if ((e.getModifiers() & InputEvent.BUTTON2_MASK) != 0)
            System.out.println("Button 2");

        if ((e.getModifiers() & InputEvent.BUTTON3_MASK) != 0)
            System.out.println("Button 3");
    }
}


Example output 1 (no buttons pressed):

mouseEntered
java.awt.event.MouseEvent[MOUSE_ENTERED,(101,27),mods=0,clickCount=0] on frame0
mouseMoved java.awt.event.MouseEvent[MOUSE_MOVED,(101,28),mods=16,clickCount=0]
on frame0
Button 1
mouseExited java.awt.event.MouseEvent[MOUSE_EXITED,(102,28),mods=0,clickCount=0]
on frame0


Example output 2 (button 1 pressed):

mouseEntered
java.awt.event.MouseEvent[MOUSE_ENTERED,(49,19),mods=0,clickCount=0] on frame0
mousePressed
java.awt.event.MouseEvent[MOUSE_PRESSED,(49,19),mods=16,clickCount=1] on frame0
Button 1
mouseReleased
java.awt.event.MouseEvent[MOUSE_RELEASED,(49,19),mods=16,clickCount=1] on frame0
Button 1
mouseClicked
java.awt.event.MouseEvent[MOUSE_CLICKED,(49,19),mods=16,clickCount=1] on frame0
clickCount 1
Button 1
mouseExited java.awt.event.MouseEvent[MOUSE_EXITED,(49,18),mods=0,clickCount=0]
on frame0


Example output 3 (button 3 pressed):

mouseEntered java.awt.event.MouseEvent[MOUSE_ENTERED,(4,54),mods=0,clickCount=0]
on frame0
mousePressed
java.awt.event.MouseEvent[MOUSE_PRESSED,(4,54),mods=20,clickCount=1] on frame0
Button 1
Button 3
mouseReleased
java.awt.event.MouseEvent[MOUSE_RELEASED,(4,54),mods=20,clickCount=1] on frame0
Button 1
Button 3
mouseClicked
java.awt.event.MouseEvent[MOUSE_CLICKED,(4,54),mods=20,clickCount=1] on frame0
clickCount 1
Button 1
Button 3
mouseExited java.awt.event.MouseEvent[MOUSE_EXITED,(3,54),mods=0,clickCount=0]
on frame0



JDK 1.3 Beta Refresh on Linux sets BUTTON1_MASK (0x16) for every mouse event
except mouse entered and mouse exited.  Pressing or releasing mouse button 1 has
no effect on the modifiers, but does fire the correct events.  If button 2 or 3
are pressed, the modifiers indicate that both button 1 and the actually pressed
mouse button are pressed.


JDK 1.2.2 Linux does not display this problem.  This behaviour is not observed
on Windows using JDK 1.1.8, JDK 1.2.2 or JDK 1.3.
(Review ID: 108707) 
======================================================================

Comments
EVALUATION Commit to fix in Merlin (regression test failing). eric.hawkes@eng 2000-12-01 According to the responsible engineer, ###@###.###, this is a duplicate of 4353201. I have verified that it is not reproducible in Merlin build 49. eric.hawkes@eng 2001-01-31
11-06-2004