5076635: Double click speed is not honored in KDE linux
Reviewed-by: art, dcherepanov
--- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Fri Jul 25 15:19:11 2008 +0400
+++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Oct 08 12:50:17 2008 +0400
@@ -61,6 +61,10 @@
private static Logger keyEventLog = Logger.getLogger("sun.awt.X11.kye.XToolkit");
private static final Logger backingStoreLog = Logger.getLogger("sun.awt.X11.backingStore.XToolkit");
+ //There is 400 ms is set by default on Windows and 500 by default on KDE and GNOME.
+ //We use the same hardcoded constant.
+ private final static int AWT_MULTICLICK_DEFAULT_TIME = 500;
+
static final boolean PRIMARY_LOOP = false;
static final boolean SECONDARY_LOOP = true;
@@ -1211,7 +1215,6 @@
String multiclick_time_query = XlibWrapper.XGetDefault(XToolkit.getDisplay(), "*", "multiClickTime");
if (multiclick_time_query != null) {
awt_multiclick_time = (int)Long.parseLong(multiclick_time_query);
- // awt_multiclick_time = XtGetMultiClickTime(awt_display);
} else {
multiclick_time_query = XlibWrapper.XGetDefault(XToolkit.getDisplay(),
"OpenWindows", "MultiClickTimeout");
@@ -1221,20 +1224,19 @@
milliseconds */
awt_multiclick_time = (int)Long.parseLong(multiclick_time_query) * 100;
} else {
- awt_multiclick_time = 200;
- // awt_multiclick_time = XtGetMultiClickTime(awt_display);
+ awt_multiclick_time = AWT_MULTICLICK_DEFAULT_TIME;
}
}
} catch (NumberFormatException nf) {
- awt_multiclick_time = 200;
+ awt_multiclick_time = AWT_MULTICLICK_DEFAULT_TIME;
} catch (NullPointerException npe) {
- awt_multiclick_time = 200;
+ awt_multiclick_time = AWT_MULTICLICK_DEFAULT_TIME;
}
} finally {
awtUnlock();
}
if (awt_multiclick_time == 0) {
- awt_multiclick_time = 200;
+ awt_multiclick_time = AWT_MULTICLICK_DEFAULT_TIME;
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.html Wed Oct 08 12:50:17 2008 +0400
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+<!--
+ @test
+ @bug 6176814
+ @summary Metalworks frame maximizes after the move
+ @author Andrei.Dmitriev.Com area=Event
+ @run applet MaximizedFrameTest.html
+ -->
+<head>
+<title> </title>
+</head>
+<body>
+
+<h1>bug 6176814<br>Bug ID: 6176814 </h1>
+
+<p> This is an AUTOMATIC test, simply wait for completion </p>
+
+<APPLET CODE="MaximizedFrameTest.class" WIDTH=200 HEIGHT=200></APPLET>
+</body>
+</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Mouse/MaximizedFrameTest/MaximizedFrameTest.java Wed Oct 08 12:50:17 2008 +0400
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/*
+ test
+ @bug 6176814
+ @summary Metalworks frame maximizes after the move
+ @author Andrei.Dmitriev area=Event
+ @run applet MaximizedFrameTest.html
+*/
+
+import java.applet.Applet;
+import javax.swing.*;
+import java.awt.event.*;
+import java.awt.*;
+
+public class MaximizedFrameTest extends Applet
+{
+ final int ITERATIONS_COUNT = 20;
+ Robot robot;
+ Point framePosition;
+ Point newFrameLocation;
+ JFrame frame;
+ Rectangle gcBounds;
+ public static Object LOCK = new Object();
+
+ public void init()
+ {
+ String[] instructions =
+ {
+ "This is an AUTOMATIC test",
+ "simply wait until it is done"
+ };
+ JFrame.setDefaultLookAndFeelDecorated(true);
+ frame = new JFrame("JFrame Maximization Test");
+ frame.pack();
+ frame.setSize(450, 260);
+ }//End init()
+
+ public void start ()
+ {
+ frame.setVisible(true);
+ validate();
+ JLayeredPane lPane = frame.getLayeredPane();
+ // System.out.println("JFrame's LayeredPane " + lPane );
+ Component titleComponent = null;
+ boolean titleFound = false;
+ for (int j=0; j < lPane.getComponentsInLayer(JLayeredPane.FRAME_CONTENT_LAYER.intValue()).length; j++){
+ titleComponent = lPane.getComponentsInLayer(JLayeredPane.FRAME_CONTENT_LAYER.intValue())[j];
+ if (titleComponent.getClass().getName().equals("javax.swing.plaf.metal.MetalTitlePane")){
+ titleFound = true;
+ break;
+ }
+ }
+ if ( !titleFound ){
+ throw new RuntimeException("Test Failed. Unable to determine title's size.");
+ }
+ //--------------------------------
+ // it is sufficient to get maximized Frame only once.
+ Point tempMousePosition;
+ framePosition = frame.getLocationOnScreen();
+ try {
+ robot = new Robot();
+ tempMousePosition = new Point(framePosition.x +
+ frame.getWidth()/2,
+ framePosition.y +
+ titleComponent.getHeight()/2);
+ robot.mouseMove(tempMousePosition.x, tempMousePosition.y);
+ for (int iteration=0; iteration < ITERATIONS_COUNT; iteration++){
+ robot.mousePress(InputEvent.BUTTON1_MASK);
+ gcBounds =
+ GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices()[0].getConfigurations()[0].getBounds();
+ //Moving a mouse pointer less than a few pixels
+ //leads to rising a double click event.
+ //We have to use exceeded the AWT_MULTICLICK_SMUDGE
+ //const value (which is 4 by default on GNOME) to test that.
+ tempMousePosition.x += 5;
+ robot.mouseMove(tempMousePosition.x, tempMousePosition.y);
+ robot.delay(70);
+ robot.mouseRelease(InputEvent.BUTTON1_MASK);
+ if ( frame.getExtendedState() != 0 ){
+ throw new RuntimeException ("Test failed. JFrame was maximized. ExtendedState is : "+frame.getExtendedState());
+ }
+ robot.delay(500);
+ } //for iteration
+
+ }catch(AWTException e) {
+ throw new RuntimeException("Test Failed. AWTException thrown.");
+ }
+ System.out.println("Test passed.");
+ }// start()
+}// class