Mercurial > hg > release > icedtea6-1.11
changeset 2648:67985e03e768
S6711682: JCheckBox in JTable: checkbox doesn't always respond to the
first mouse click
author | ptisnovs |
---|---|
date | Fri, 08 Jul 2011 14:10:47 +0200 |
parents | 0911ad28ea98 |
children | 4ca76ee4a7a1 |
files | ChangeLog Makefile.am NEWS patches/openjdk/6711682-JCheckBox_in_JTable_does_not_respond_to_click.patch |
diffstat | 4 files changed, 187 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Thu Jul 07 14:19:34 2011 +0100 +++ b/ChangeLog Fri Jul 08 14:10:47 2011 +0200 @@ -1,3 +1,10 @@ +2011-07-08 Pavel Tisnovsky <ptisnovs@redhat.com> + + * Makefile.am: added new patch + * NEWS: updated with backport + * patches/openjdk/6711682-JCheckBox_in_JTable_does_not_respond_to_click.patch: + Backport of 6711682. + 2011-07-07 Andrew John Hughes <ahughes@redhat.com> * Makefile.am:
--- a/Makefile.am Thu Jul 07 14:19:34 2011 +0100 +++ b/Makefile.am Fri Jul 08 14:10:47 2011 +0200 @@ -361,7 +361,8 @@ patches/jtreg-remove-test-6987555.patch \ patches/jtreg-remove-test-6991596.patch \ patches/openjdk/7036220-shark_llvm_29_headers.patch \ - patches/openjdk/7029152-String_intrinsics_miss_optimization.patch + patches/openjdk/7029152-String_intrinsics_miss_optimization.patch \ + patches/openjdk/6711682-JCheckBox_in_JTable_does_not_respond_to_click.patch if WITH_RHINO ICEDTEA_PATCHES += \
--- a/NEWS Thu Jul 07 14:19:34 2011 +0100 +++ b/NEWS Fri Jul 08 14:10:47 2011 +0200 @@ -48,6 +48,7 @@ - S6679308: Poor text rendering on translucent image - S6842838: 64-bit failure in handling invalid manifest in launcher. - S6882768: Test for 6842838 is broken + - S6711682: JCheckBox in JTable: checkbox doesn't always respond to the first mouse click * Bug fixes - PR637: make check should exit with an error code if any regression test failed. - G356743: Support libpng 1.5.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/patches/openjdk/6711682-JCheckBox_in_JTable_does_not_respond_to_click.patch Fri Jul 08 14:10:47 2011 +0200 @@ -0,0 +1,177 @@ +# HG changeset patch +# User alexp +# Date 1278084531 -14400 +# Node ID e94a94d176f9c4b91b454ab7dfaf5f013497f9dd +# Parent 46306a419ba32857169849cfcf30cfca328c2db4 +6711682: JCheckBox in JTable: checkbox doesn't alaways respond to the first mouse click +Reviewed-by: rupashka + +diff -r 46306a419ba3 -r e94a94d176f9 src/share/classes/javax/swing/plaf/basic/BasicButtonListener.java +--- openjdk.orig/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonListener.java Thu Jul 01 18:47:56 2010 +0400 ++++ openjdk/jdk/src/share/classes/javax/swing/plaf/basic/BasicButtonListener.java Fri Jul 02 19:28:51 2010 +0400 +@@ -195,9 +195,8 @@ + } + + ButtonModel model = b.getModel(); ++ model.setPressed(false); + model.setArmed(false); +- model.setPressed(false); +- + b.repaint(); + } + +diff -r 46306a419ba3 -r e94a94d176f9 test/javax/swing/AbstractButton/6711682/bug6711682.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ openjdk/jdk/test/javax/swing/AbstractButton/6711682/bug6711682.java Fri Jul 02 19:28:51 2010 +0400 +@@ -0,0 +1,151 @@ ++/* ++ * Copyright (c) 2009, 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. ++ */ ++ ++/* @test ++ @bug 6711682 ++ @summary JCheckBox in JTable: checkbox doesn't alaways respond to the first mouse click ++ @author Alexander Potochkin ++ @run main bug6711682 ++*/ ++ ++import sun.awt.SunToolkit; ++ ++import javax.swing.*; ++import javax.swing.event.CellEditorListener; ++import javax.swing.table.TableCellEditor; ++import javax.swing.table.TableCellRenderer; ++import java.awt.*; ++import java.awt.event.InputEvent; ++import java.awt.event.KeyEvent; ++import java.util.EventObject; ++ ++public class bug6711682 { ++ private static JCheckBox editorCb; ++ private static JCheckBox rendererCb; ++ private static JTable table; ++ ++ public static void main(String[] args) throws Exception { ++ Robot robot = new Robot(); ++ robot.setAutoDelay(50); ++ SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); ++ SwingUtilities.invokeAndWait(new Runnable() { ++ public void run() { ++ createAndShowGUI(); ++ } ++ }); ++ toolkit.realSync(); ++ Point l = table.getLocationOnScreen(); ++ int h = table.getRowHeight(); ++ for (int i = 0; i < 3; i++) { ++ robot.mouseMove(l.x + 5, l.y + 5 + i * h); ++ robot.mousePress(InputEvent.BUTTON1_MASK); ++ robot.mouseRelease(InputEvent.BUTTON1_MASK); ++ } ++ // Without pressing F2 the last table's cell ++ // reported <code>false</code> value ++ // note that I can't press it inside the for loop ++ // because it doesn't reproduce the bug ++ robot.keyPress(KeyEvent.VK_F2); ++ robot.keyRelease(KeyEvent.VK_F2); ++ ++ for (int i = 0; i < 3; i++) { ++ if (!Boolean.TRUE.equals(table.getValueAt(i, 0))) { ++ throw new RuntimeException("Row #" + i + " checkbox is not selected"); ++ } ++ } ++ for (int i = 2; i >= 0; i--) { ++ robot.mouseMove(l.x + 5, l.y + 5 + i * h); ++ robot.mousePress(InputEvent.BUTTON1_MASK); ++ robot.mouseRelease(InputEvent.BUTTON1_MASK); ++ } ++ robot.keyPress(KeyEvent.VK_F2); ++ robot.keyRelease(KeyEvent.VK_F2); ++ for (int i = 0; i < 3; i++) { ++ if (Boolean.TRUE.equals(table.getValueAt(i, 0))) { ++ throw new RuntimeException("Row #" + i + " checkbox is selected"); ++ } ++ } ++ } ++ ++ private static void createAndShowGUI() { ++ editorCb = new JCheckBox(); ++ rendererCb = new JCheckBox(); ++ JFrame f = new JFrame("Table with CheckBox"); ++ Container p = f.getContentPane(); ++ p.setLayout(new BorderLayout()); ++ table = new JTable(new Object[][]{{false}, {false}, {false}}, new Object[]{"CheckBox"}); ++ TableCellEditor editor = new TableCellEditor() { ++ int editedRow; ++ ++ public Component getTableCellEditorComponent(JTable table, ++ Object value, boolean isSelected, int row, int column) { ++ this.editedRow = row; ++ editorCb.setSelected(Boolean.TRUE.equals(value)); ++ editorCb.setBackground(UIManager.getColor("Table.selectionBackground")); ++ return editorCb; ++ } ++ ++ public void addCellEditorListener(CellEditorListener l) { ++ } ++ ++ public void cancelCellEditing() { ++ } ++ ++ public Object getCellEditorValue() { ++ return editorCb.isSelected(); ++ } ++ ++ public boolean isCellEditable(EventObject anEvent) { ++ return true; ++ } ++ ++ public void removeCellEditorListener(CellEditorListener l) { ++ } ++ ++ public boolean shouldSelectCell(EventObject anEvent) { ++ return true; ++ } ++ ++ public boolean stopCellEditing() { ++ table.getModel().setValueAt(editorCb.isSelected(), editedRow, 0); ++ return true; ++ } ++ }; ++ table.getColumnModel().getColumn(0).setCellEditor(editor); ++ ++ TableCellRenderer renderer = new TableCellRenderer() { ++ public Component getTableCellRendererComponent(JTable table, ++ Object value, boolean isSelected, boolean hasFocus, ++ int row, int column) { ++ rendererCb.setSelected(Boolean.TRUE.equals(value)); ++ return rendererCb; ++ } ++ }; ++ table.getColumnModel().getColumn(0).setCellRenderer(renderer); ++ ++ p.add(table, BorderLayout.CENTER); ++ ++ f.pack(); ++ f.setVisible(true); ++ } ++}