From c51406a1cab66e9ac7710694c56b9fee13b6b352 Mon Sep 17 00:00:00 2001 From: Damon Nguyen Date: Sat, 23 Nov 2024 20:39:30 -0800 Subject: [PATCH 1/3] Initial commit for backout --- .../swing/plaf/basic/BasicScrollBarUI.java | 45 ----------- .../JComboBox/JComboBoxScrollFocusTest.java | 75 ------------------- 2 files changed, 120 deletions(-) delete mode 100644 test/jdk/javax/swing/JComboBox/JComboBoxScrollFocusTest.java diff --git a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java index 9fc9b64314cb9..60274d766cd70 100644 --- a/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java +++ b/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java @@ -31,7 +31,6 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; -import java.awt.KeyboardFocusManager; import java.awt.LayoutManager; import java.awt.Point; import java.awt.Rectangle; @@ -123,8 +122,6 @@ public class BasicScrollBarUI protected ArrowButtonListener buttonListener; /** Model listener */ protected ModelListener modelListener; - /** KeyboardFocusListener */ - protected KeyboardFocusListener keyboardFocusListener; /** Thumb rectangle */ protected Rectangle thumbRect; @@ -359,15 +356,12 @@ protected void installListeners(){ buttonListener = createArrowButtonListener(); modelListener = createModelListener(); propertyChangeListener = createPropertyChangeListener(); - keyboardFocusListener = createKeyboardFocusListener(); scrollbar.addMouseListener(trackListener); scrollbar.addMouseMotionListener(trackListener); scrollbar.getModel().addChangeListener(modelListener); scrollbar.addPropertyChangeListener(propertyChangeListener); scrollbar.addFocusListener(getHandler()); - KeyboardFocusManager.getCurrentKeyboardFocusManager() - .addPropertyChangeListener(keyboardFocusListener); if (incrButton != null) { incrButton.addMouseListener(buttonListener); @@ -449,8 +443,6 @@ protected void uninstallListeners() { incrButton.removeMouseListener(buttonListener); } - KeyboardFocusManager.getCurrentKeyboardFocusManager() - .removePropertyChangeListener(keyboardFocusListener); scrollbar.getModel().removeChangeListener(modelListener); scrollbar.removeMouseListener(trackListener); scrollbar.removeMouseMotionListener(trackListener); @@ -517,14 +509,6 @@ protected PropertyChangeListener createPropertyChangeListener() { return getHandler(); } - /** - * Creates a keyboard focus listener. - * @return a keyboard focus listener - */ - protected KeyboardFocusListener createKeyboardFocusListener() { - return new KeyboardFocusListener(); - } - private void updateThumbState(int x, int y) { Rectangle rect = getThumbBounds(); @@ -1218,35 +1202,6 @@ public boolean getSupportsAbsolutePositioning() { return supportsAbsolutePositioning; } - /** - * A listener to listen for keyboard focus changes. - */ - protected class KeyboardFocusListener implements PropertyChangeListener { - /** - * Constructs a {@code KeyboardFocusListener}. - */ - protected KeyboardFocusListener() {} - - @Override - public void propertyChange(PropertyChangeEvent e) { - String propertyName = e.getPropertyName(); - - if ("focusOwner" == propertyName) { - // Stop scrolling if no longer focus owner - if (e.getNewValue() == null && scrollTimer.isRunning()) { - scrollTimer.stop(); - buttonListener.handledEvent = false; - scrollbar.setValueIsAdjusting(false); - if (incrButton.getModel().isPressed()) { - incrButton.getModel().setPressed(false); - } else if (decrButton.getModel().isPressed()) { - decrButton.getModel().setPressed(false); - } - } - } - } - } - /** * A listener to listen for model changes. */ diff --git a/test/jdk/javax/swing/JComboBox/JComboBoxScrollFocusTest.java b/test/jdk/javax/swing/JComboBox/JComboBoxScrollFocusTest.java deleted file mode 100644 index 4d2c3bd19ccfe..0000000000000 --- a/test/jdk/javax/swing/JComboBox/JComboBoxScrollFocusTest.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2024, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import javax.swing.JComboBox; -import javax.swing.JFrame; - -/* - * @test - * @bug 6672644 - * @library /java/awt/regtesthelpers - * @build PassFailJFrame - * @summary Tests JComboBox scrollbar behavior when alt-tabbing - * @requires os.family != "mac" - * @run main/manual JComboBoxScrollFocusTest - */ - -public class JComboBoxScrollFocusTest { - private static final String INSTRUCTIONS = - """ - Click on the dropdown button for the JComboBox in the test frame. - Then, press and hold the left click button on the down arrow button - in the popup list. While holding the left click button, the list - should be scrolling down. Press ALT + TAB while holding down the - left click to switch focus to a different window. Then release the - left click button. Focus the test frame again and click the - dropdown button for the JComboBox again. The list should be - stationary and not be automatically scrolling. - - If you are able to execute all steps successfully then the test - passes, otherwise it fails. - """; - - public static void main(String[] args) throws Exception { - PassFailJFrame - .builder() - .title("JComboBoxScrollFocusTest Test Instructions") - .instructions(INSTRUCTIONS) - .columns(40) - .testUI(JComboBoxScrollFocusTest::createAndShowGUI) - .build() - .awaitAndCheck(); - } - - private static JFrame createAndShowGUI() { - JFrame frame = new JFrame("JComboBoxScrollFocusTest Test Frame"); - JComboBox combobox = new JComboBox<>(); - for (int i = 0; i < 100; i++) { - combobox.addItem(String.valueOf(i)); - } - frame.add(combobox); - frame.setSize(400, 200); - frame.setLocationRelativeTo(null); - return frame; - } -} From f5e1521ba21b90e7787af9f83636d5762c0ce355 Mon Sep 17 00:00:00 2001 From: Damon Nguyen Date: Thu, 4 Sep 2025 18:19:25 -0700 Subject: [PATCH 2/3] Initial commit --- .../unix/native/libawt_xawt/awt/awt_GraphicsEnv.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c index 1f73a3256b096..174a233cebd8a 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c @@ -1286,8 +1286,12 @@ Java_sun_awt_X11GraphicsDevice_pGetBounds(JNIEnv *env, jobject this, jint screen &xwa); AWT_UNLOCK (); - bounds = (*env)->NewObject(env, clazz, mid, 0, 0, - xwa.width, xwa.height); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } else { + bounds = (*env)->NewObject(env, clazz, mid, 0, 0, + xwa.width, xwa.height); + } } if ((*env)->ExceptionCheck(env)) { From 5b00dc81303c28710750b3538f9cd9cdeacc5066 Mon Sep 17 00:00:00 2001 From: Damon Nguyen Date: Wed, 10 Sep 2025 20:09:52 -0700 Subject: [PATCH 3/3] Change fix to return NULLs instead. --- .../unix/native/libawt_xawt/awt/awt_GraphicsEnv.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c index 174a233cebd8a..3b027678f9d10 100644 --- a/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c +++ b/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c @@ -1267,12 +1267,16 @@ Java_sun_awt_X11GraphicsDevice_pGetBounds(JNIEnv *env, jobject this, jint screen xinInfo[screen].y_org, xinInfo[screen].width, xinInfo[screen].height); + if (!bounds) { + return NULL; + } XFree(xinInfo); } } else { jclass exceptionClass = (*env)->FindClass(env, "java/lang/IllegalArgumentException"); if (exceptionClass != NULL) { (*env)->ThrowNew(env, exceptionClass, "Illegal screen index"); + return NULL; } } } @@ -1286,12 +1290,8 @@ Java_sun_awt_X11GraphicsDevice_pGetBounds(JNIEnv *env, jobject this, jint screen &xwa); AWT_UNLOCK (); - if ((*env)->ExceptionCheck(env)) { - return NULL; - } else { - bounds = (*env)->NewObject(env, clazz, mid, 0, 0, - xwa.width, xwa.height); - } + bounds = (*env)->NewObject(env, clazz, mid, 0, 0, + xwa.width, xwa.height); } if ((*env)->ExceptionCheck(env)) {