diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java index e34298a13e7..377b12271ff 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeysym.java @@ -952,7 +952,7 @@ public class XKeysym { keysym2UCSHash.put( (long)0x9f4, (char)0x251c); // XK_leftt --> BOX DRAWINGS LIGHT VERTICAL AND RIGHT keysym2UCSHash.put( (long)0x9f5, (char)0x2524); // XK_rightt --> BOX DRAWINGS LIGHT VERTICAL AND LEFT keysym2UCSHash.put( (long)0x9f6, (char)0x2534); // XK_bott --> BOX DRAWINGS LIGHT UP AND HORIZONTAL - keysym2UCSHash.put( (long)0x9f7, (char)0x242c); // XK_topt --> + keysym2UCSHash.put( (long)0x9f7, (char)0x252c); // XK_topt --> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL keysym2UCSHash.put( (long)0x9f8, (char)0x2502); // XK_vertbar --> BOX DRAWINGS LIGHT VERTICAL keysym2UCSHash.put( (long)0xaa1, (char)0x2003); // XK_emspace --> EM SPACE keysym2UCSHash.put( (long)0xaa2, (char)0x2002); // XK_enspace --> EN SPACE diff --git a/jdk/src/java.desktop/unix/classes/sun/awt/X11/keysym2ucs.h b/jdk/src/java.desktop/unix/classes/sun/awt/X11/keysym2ucs.h index b0c75b313fa..11bbf7e4721 100644 --- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/keysym2ucs.h +++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/keysym2ucs.h @@ -1685,7 +1685,7 @@ SOFTWARE. 0x251c #define XK_leftt 0x9f4 0x2524 #define XK_rightt 0x9f5 0x2534 #define XK_bott 0x9f6 -0x242c #define XK_topt 0x9f7 +0x252c #define XK_topt 0x9f7 0x2502 #define XK_vertbar 0x9f8 #endif /* XK_SPECIAL */ diff --git a/jdk/test/java/awt/keyboard/Bug8158478/Test8158478.java b/jdk/test/java/awt/keyboard/Bug8158478/Test8158478.java new file mode 100644 index 00000000000..f4c6d8c7697 --- /dev/null +++ b/jdk/test/java/awt/keyboard/Bug8158478/Test8158478.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2016, 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 8158478 +* @requires (os.family == "linux") +* @summary To Verify X11 Keysym unicode for topt +* @run main/manual Test8158478 + */ +import java.awt.Button; +import java.awt.Frame; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Panel; +import java.awt.TextArea; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.concurrent.CountDownLatch; + +public class Test8158478 { + + public static void main(String args[]) throws Exception { + final CountDownLatch latch = new CountDownLatch(1); + + X11KeysymTest test = new X11KeysymTest(latch); + Thread T1 = new Thread(test); + T1.start(); + + // wait for latch to complete + latch.await(); + + if (test.testResult == false) { + throw new RuntimeException("User Clicked Fail! " + + "Wrong Unicode Character"); + } + } +} + +class X11KeysymTest implements Runnable { + + private static GridBagLayout layout; + private static Panel mainControlPanel; + private static Panel resultButtonPanel; + private static TextArea instructionTextArea; + private static Button passButton; + private static Button failButton; + private static Frame mainFrame; + private static TextArea testArea; + private final CountDownLatch latch; + public volatile boolean testResult = false; + + public X11KeysymTest(CountDownLatch latch) { + this.latch = latch; + } + + @Override + public void run() { + createUI(); + } + + public final void createUI() { + + mainFrame = new Frame("X11 Keysym Test"); + layout = new GridBagLayout(); + mainControlPanel = new Panel(layout); + resultButtonPanel = new Panel(layout); + + GridBagConstraints gbc = new GridBagConstraints(); + String instructions + = "INSTRUCTIONS:" + + "\n Have a custom X11 keyboard layout with" + + " \"topt\" assigned to some key: " + + "\n Map \"topt\" key to \"Caps_Lock\" by executing" + + " following command in Terminal:" + + "\n xmodmap -e \"keysym Caps_Lock = topt\"." + + "\n Go to TextArea below and press \"CAPSLOCK\" key" + + "\n If Symbol: " + "\u252c" + " is displayed then test Pass," + + "\n If Symbol: " + "\u242c" + " is displayed then test Fail," + + "\n Execute the below command to reset the above settigs, " + + "\n setxkbmap -layout us"; + + instructionTextArea = new TextArea(); + instructionTextArea.setText(instructions); + instructionTextArea.setEnabled(true); + + gbc.gridx = 0; + gbc.gridy = 0; + gbc.fill = GridBagConstraints.HORIZONTAL; + mainControlPanel.add(instructionTextArea, gbc); + + testArea = new TextArea("TextArea"); + gbc.gridx = 0; + gbc.gridy = 1; + mainControlPanel.add(testArea, gbc); + passButton = new Button("Pass"); + passButton.setActionCommand("Pass"); + passButton.addActionListener((ActionEvent e) -> { + testResult = true; + mainFrame.dispose(); + latch.countDown(); + + }); + failButton = new Button("Fail"); + failButton.setActionCommand("Fail"); + failButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + testResult = false; + mainFrame.dispose(); + latch.countDown(); + } + }); + gbc.gridx = 0; + gbc.gridy = 0; + resultButtonPanel.add(passButton, gbc); + gbc.gridx = 1; + gbc.gridy = 0; + resultButtonPanel.add(failButton, gbc); + + gbc.gridx = 0; + gbc.gridy = 2; + mainControlPanel.add(resultButtonPanel, gbc); + + mainFrame.add(mainControlPanel); + mainFrame.pack(); + mainFrame.setVisible(true); + } + +} +