jdk/src/solaris/classes/sun/awt/X11/XWindow.java
changeset 2810 fa49c6a06baf
parent 2805 9f18d7e66042
child 3938 ef327bd847c0
child 4256 24d614d4764a
child 4191 ca8d3ef845c8
--- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java	Thu May 21 15:04:23 2009 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java	Fri May 22 16:09:45 2009 +0400
@@ -677,6 +677,14 @@
         int button=0;
         boolean wheel_mouse = false;
         int lbutton = xbe.get_button();
+        /*
+         * Ignore the buttons above 20 due to the bit limit for
+         * InputEvent.BUTTON_DOWN_MASK.
+         * One more bit is reserved for FIRST_HIGH_BIT.
+         */
+        if (lbutton > SunToolkit.MAX_BUTTONS_SUPPORTED) {
+            return;
+        }
         int type = xev.get_type();
         when = xbe.get_time();
         long jWhen = XToolkit.nowMillisUTC_offset(when);
@@ -795,8 +803,9 @@
         //this doesn't work for extra buttons because Xsystem is sending state==0 for every extra button event.
         // we can't correct it in MouseEvent class as we done it with modifiers, because exact type (DRAG|MOVE)
         // should be passed from XWindow.
-        //TODO: eliminate it with some other value obtained w/o AWTLock.
-        for (int i = 0; i < XToolkit.getNumMouseButtons(); i++){
+        final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
+
+        for (int i = 0; i < buttonsNumber; i++){
             // TODO : here is the bug in WM: extra buttons doesn't have state!=0 as they should.
             if ((i != 4) && (i != 5)) {
                 mouseKeyState = mouseKeyState | (xme.get_state() & XConstants.buttonsMask[i]);