jdk/src/solaris/classes/sun/awt/X11/XToolkit.java
changeset 2810 fa49c6a06baf
parent 2803 e0fa1a27f1c1
child 3083 1954edd3b7a7
--- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java	Thu May 21 15:04:23 2009 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java	Fri May 22 16:09:45 2009 +0400
@@ -85,21 +85,6 @@
     private static boolean areExtraMouseButtonsEnabled = true;
 
     /**
-     * Number of buttons.
-     * By default it's taken from the system. If system value does not
-     * fit into int type range, use our own MAX_BUTTONS_SUPPORT value.
-     */
-    private static int numberOfButtons = 0;
-
-    /* XFree standard mention 24 buttons as maximum:
-     * http://www.xfree86.org/current/mouse.4.html
-     * We workaround systems supporting more than 24 buttons.
-     * Otherwise, we have to use long type values as masks
-     * which leads to API change.
-     */
-    private static int MAX_BUTTONS_SUPPORT = 24;
-
-    /**
      * True when the x settings have been loaded.
      */
     private boolean loadedXSettings;
@@ -1458,19 +1443,26 @@
             desktopProperties.put("awt.multiClickInterval",
                                   Integer.valueOf(getMultiClickTime()));
             desktopProperties.put("awt.mouse.numButtons",
-                                  Integer.valueOf(getNumMouseButtons()));
+                                  Integer.valueOf(getNumberOfButtons()));
         }
     }
 
-    public static int getNumMouseButtons() {
+    /**
+     * This method runs through the XPointer and XExtendedPointer array.
+     * XExtendedPointer has priority because on some systems XPointer
+     * (which is assigned to the virtual pointer) reports the maximum
+     * capabilities of the mouse pointer (i.e. 32 physical buttons).
+     */
+    private native synchronized int getNumberOfButtonsImpl();
+
+    @Override
+    public int getNumberOfButtons(){
         awtLock();
         try {
             if (numberOfButtons == 0) {
-                numberOfButtons = Math.min(
-                    XlibWrapper.XGetPointerMapping(XToolkit.getDisplay(), 0, 0),
-                    MAX_BUTTONS_SUPPORT);
+                numberOfButtons = getNumberOfButtonsImpl();
             }
-            return numberOfButtons;
+            return (numberOfButtons > MAX_BUTTONS_SUPPORTED)? MAX_BUTTONS_SUPPORTED : numberOfButtons;
         } finally {
             awtUnlock();
         }