From 9710a8e4f5f22fc9ae63ecf55afe0ccf32414944 Mon Sep 17 00:00:00 2001 From: Jiri Vanek Date: Fri, 27 Mar 2015 13:04:20 +0100 Subject: [PATCH] Sync with f21 --- ...utCharsWithPostscriptOutputCorrectly.patch | 148 +++++++++++ 1182694_javaApplicationMenuMisbehave.patch | 232 ++++++++++++++++++ java-1.8.0-openjdk.spec | 15 +- 3 files changed, 394 insertions(+), 1 deletion(-) create mode 100644 1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch create mode 100644 1182694_javaApplicationMenuMisbehave.patch diff --git a/1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch b/1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch new file mode 100644 index 0000000..ab6c3b6 --- /dev/null +++ b/1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch @@ -0,0 +1,148 @@ + +# HG changeset patch +# User neugens +# Date 1421686672 -3600 +# Node ID 868404fc8be0163f50c242f473ecfbe4eccfe519 +# Parent 36c8318010acb190176744eb0a67a321ae23e711 +8067364: Printing to Postscript doesn't support dieresis +Summary: Fix regression caused by fix for 8023990 +Reviewed-by: bae, prr +Contributed-by: neugens@redhat.com, philip.race@oracle.com + +diff -r 36c8318010ac -r 868404fc8be0 src/solaris/classes/sun/font/FcFontConfiguration.java +--- jdk8/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java Tue Dec 16 19:46:22 2014 +0000 ++++ jdk8/jdk/src/solaris/classes/sun/font/FcFontConfiguration.java Mon Jan 19 17:57:52 2015 +0100 +@@ -180,7 +180,7 @@ + String[] componentFaceNames = cfi[idx].getComponentFaceNames(); + FontDescriptor[] ret = new FontDescriptor[componentFaceNames.length]; + for (int i = 0; i < componentFaceNames.length; i++) { +- ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.UTF_8.newEncoder(), new int[0]); ++ ret[i] = new FontDescriptor(componentFaceNames[i], StandardCharsets.ISO_8859_1.newEncoder(), new int[0]); + } + + return ret; +diff -r 36c8318010ac -r 868404fc8be0 test/javax/print/PrintSEUmlauts/PrintSEUmlauts.java +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ jdk8/jdk/test/javax/print/PrintSEUmlauts/PrintSEUmlauts.java Mon Jan 19 17:57:52 2015 +0100 +@@ -0,0 +1,120 @@ ++/* ++ * Copyright (c) 2014, 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. Oracle designates this ++ * particular file as subject to the "Classpath" exception as provided ++ * by Oracle in the LICENSE file that accompanied this code. ++ * ++ * 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 java.awt.Graphics; ++import java.awt.GraphicsEnvironment; ++import java.awt.print.PageFormat; ++import java.awt.print.Printable; ++import java.io.File; ++import java.io.FileInputStream; ++import java.io.FileOutputStream; ++import java.io.IOException; ++import java.nio.charset.StandardCharsets; ++import javax.print.DocFlavor; ++import javax.print.DocPrintJob; ++import javax.print.SimpleDoc; ++import javax.print.StreamPrintService; ++import javax.print.StreamPrintServiceFactory; ++import javax.print.attribute.HashDocAttributeSet; ++import javax.print.attribute.HashPrintRequestAttributeSet; ++import javax.print.event.PrintJobAdapter; ++import javax.print.event.PrintJobEvent; ++ ++/* ++ * @test ++ * @bug 8067364 ++ * @summary Printing to Postscript doesn't support dieresis ++ * @build PrintSEUmlauts ++ * @run main/othervm PrintSEUmlauts ++ */ ++public class PrintSEUmlauts implements Printable { ++ ++ public static void main(String[] args) throws Exception { ++ ++ GraphicsEnvironment.getLocalGraphicsEnvironment(); ++ ++ DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE; ++ String mime = DocFlavor.BYTE_ARRAY.POSTSCRIPT.getMimeType(); ++ ++ StreamPrintServiceFactory[] factories = ++ StreamPrintServiceFactory. ++ lookupStreamPrintServiceFactories(flavor, mime); ++ if (factories.length == 0) { ++ System.out.println("No print service found."); ++ return; ++ } ++ ++ FileOutputStream output = new FileOutputStream("out.ps"); ++ StreamPrintService service = factories[0].getPrintService(output); ++ ++ SimpleDoc doc = ++ new SimpleDoc(new PrintSEUmlauts(), ++ DocFlavor.SERVICE_FORMATTED.PRINTABLE, ++ new HashDocAttributeSet()); ++ DocPrintJob job = service.createPrintJob(); ++ job.addPrintJobListener(new PrintJobAdapter() { ++ @Override ++ public void printJobCompleted(PrintJobEvent pje) { ++ testPrintAndExit(); ++ } ++ }); ++ ++ job.print(doc, new HashPrintRequestAttributeSet()); ++ } ++ ++ private static final boolean DEBUG = false; ++ private static void testPrintAndExit() { ++ String expected = " 7.44 100.0 100.0 S"; ++ String content = ""; ++ ++ File file = new File("out.ps"); ++ if (!DEBUG) { ++ file.deleteOnExit(); ++ } ++ ++ try (FileInputStream stream = new FileInputStream(file)) { ++ byte[] data = new byte[(int) file.length()]; ++ stream.read(data); ++ content = new String(data, StandardCharsets.ISO_8859_1); ++ } catch (IOException ex) { ++ ex.printStackTrace(); ++ } ++ ++ if (!content.contains(expected)) { ++ System.err.println("FAIL"); ++ if (DEBUG) { ++ System.err.println("printing content"); ++ System.err.println(content); ++ } ++ throw new RuntimeException("Expected to represent 'ä' but not found!"); ++ } ++ System.err.println("SUCCESS"); ++ } ++ ++ public int print(Graphics g, PageFormat pf, int pg) { ++ if (pg > 0) return NO_SUCH_PAGE; ++ g.drawString("ä", 100, 100); ++ return PAGE_EXISTS; ++ } ++} + diff --git a/1182694_javaApplicationMenuMisbehave.patch b/1182694_javaApplicationMenuMisbehave.patch new file mode 100644 index 0000000..55da997 --- /dev/null +++ b/1182694_javaApplicationMenuMisbehave.patch @@ -0,0 +1,232 @@ +changeset: 10519:e1ca700aaa1f +tag: tip +user: neugens +date: Fri Feb 27 15:50:03 2015 +0100 +summary: 8071705: Java application menu misbehaves when running multiple screen stacked vertically + +diff --git jdk8/jdk/src/share/classes/javax/swing/JMenu.java jdk8/jdk/src/share/classes/javax/swing/JMenu.java +--- jdk8/jdk/src/share/classes/javax/swing/JMenu.java ++++ jdk8/jdk/src/share/classes/javax/swing/JMenu.java +@@ -475,7 +475,8 @@ + } + // Then the y: + y = s.height + yOffset; // Prefer dropping down +- if (position.y + y + pmSize.height >= screenBounds.height && ++ if (position.y + y + pmSize.height >= screenBounds.height ++ + screenBounds.y && + // popup doesn't fit - place it wherever there's more room + screenBounds.height - s.height < 2*(position.y + - screenBounds.y)) { +diff --git jdk8/jdk/test/javax/swing/JMenu/8071705/bug8071705.java jdk8/jdk/test/javax/swing/JMenu/8071705/bug8071705.java +new file mode 100644 +--- /dev/null ++++ jdk8/jdk/test/javax/swing/JMenu/8071705/bug8071705.java +@@ -0,0 +1,207 @@ ++/* ++ * Copyright (c) 2015, 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 8071705 ++ * @summary Java application menu misbehaves when running multiple screen stacked vertically ++ * @build bug8071705 ++ * @run main/othervm bug8071705 ++ */ ++ ++import java.awt.Dimension; ++import java.awt.GraphicsConfiguration; ++import java.awt.GraphicsDevice; ++import java.awt.GraphicsEnvironment; ++import java.awt.Point; ++import java.awt.Rectangle; ++import java.awt.Toolkit; ++import java.awt.event.ComponentAdapter; ++import java.awt.event.ComponentEvent; ++import java.awt.event.KeyEvent; ++import java.util.concurrent.CountDownLatch; ++ ++import javax.swing.JFrame; ++import javax.swing.JMenu; ++import javax.swing.JMenuBar; ++import javax.swing.JMenuItem; ++import javax.swing.JPopupMenu; ++import javax.swing.SwingUtilities; ++import javax.swing.UIManager; ++ ++public class bug8071705 { ++ ++ public static void main(String[] args) throws Exception { ++ ++ final CountDownLatch latch = new CountDownLatch(1); ++ final boolean [] result = new boolean[1]; ++ ++ SwingUtilities.invokeLater(new Runnable() { ++ @Override ++ public void run() { ++ JFrame frame = createGUI(); ++ GraphicsDevice[] devices = checkScreens(); ++ ++ // check if we have more than one and if they are stacked ++ // vertically ++ GraphicsDevice device = checkConfigs(devices); ++ if (device == null) { ++ // just pass the test ++ frame.dispose(); ++ result[0] = true; ++ latch.countDown(); ++ } else { ++ FrameListener listener = ++ new FrameListener(device, latch, result); ++ frame.addComponentListener(listener); ++ frame.setVisible(true); ++ } ++ } ++ }); ++ ++ latch.await(); ++ ++ if (result[0] == false) { ++ throw new RuntimeException("popup menu rendered in wrong position"); ++ } ++ ++ System.out.println("OK"); ++ } ++ ++ private static GraphicsDevice[] checkScreens() { ++ GraphicsEnvironment ge = ++ GraphicsEnvironment.getLocalGraphicsEnvironment(); ++ return ge.getScreenDevices(); ++ } ++ ++ private static JFrame createGUI() { ++ JMenuBar menuBar = new JMenuBar(); ++ JMenu menu = new JMenu("Some menu"); ++ menuBar.add(menu); ++ ++ for (int i = 0; i < 10; i++) { ++ menu.add(new JMenuItem("Some menu #" + i)); ++ } ++ ++ JFrame frame = new JFrame(); ++ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ++ frame.setMinimumSize(new Dimension(200, 200)); ++ frame.setJMenuBar(menuBar); ++ return frame; ++ } ++ ++ private static GraphicsDevice checkConfigs(GraphicsDevice[] devices) { ++ ++ GraphicsDevice correctDevice = null; ++ if (devices.length < 2) { ++ return correctDevice; ++ } ++ ++ Toolkit toolkit = Toolkit.getDefaultToolkit(); ++ Rectangle screenBounds = new Rectangle(toolkit.getScreenSize()); ++ int halfScreen = screenBounds.height/2; ++ ++ for(int i = 0; i < devices.length; i++) { ++ if(devices[i].getType() == GraphicsDevice.TYPE_RASTER_SCREEN) { ++ GraphicsConfiguration conf = ++ devices[i].getDefaultConfiguration(); ++ Rectangle bounds = conf.getBounds(); ++ if (bounds.y >= halfScreen) { ++ // found ++ correctDevice = devices[i]; ++ break; ++ } ++ } ++ } ++ return correctDevice; ++ } ++ ++ private static class FrameListener extends ComponentAdapter { ++ ++ private GraphicsDevice device; ++ private CountDownLatch latch; ++ private boolean [] result; ++ public FrameListener(GraphicsDevice device, ++ CountDownLatch latch, ++ boolean [] result) ++ { ++ this.device = device; ++ this.latch = latch; ++ this.result = result; ++ } ++ ++ @Override ++ public void componentShown(ComponentEvent e) { ++ JFrame frame = (JFrame) e.getComponent(); ++ ++ runActualTest(device, latch, frame, result); ++ ++ frame.setVisible(false); ++ frame.dispose(); ++ latch.countDown(); ++ } ++ } ++ ++ private static Rectangle setLocation(JFrame frame, GraphicsDevice device) { ++ GraphicsConfiguration conf = device.getDefaultConfiguration(); ++ Rectangle bounds = conf.getBounds(); ++ ++ // put just below half screen ++ int x = bounds.x + bounds.width/2; ++ int y = bounds.y + bounds.height/2; ++ frame.setLocation(x, y); ++ ++ return bounds; ++ } ++ ++ private static void runActualTest(GraphicsDevice device, ++ CountDownLatch latch, ++ JFrame frame, ++ boolean [] result) ++ { ++ Rectangle screenBounds = setLocation(frame, device); ++ JMenu menu = frame.getJMenuBar().getMenu(0); ++ menu.doClick(); ++ ++ Point location = menu.getLocationOnScreen(); ++ JPopupMenu pm = menu.getPopupMenu(); ++ Dimension pmSize = pm.getSize(); ++ ++ int yOffset = UIManager.getInt("Menu.submenuPopupOffsetY"); ++ int height = location.y + yOffset + pmSize.height + menu.getHeight(); ++ int available = screenBounds.y + screenBounds.height - height; ++ if (available > 0) { ++ Point origin = pm.getLocationOnScreen(); ++ if (origin.y < location.y) { ++ // growing upward, wrong! ++ result[0] = false; ++ } else { ++ // growing downward, ok! ++ result[0] = true; ++ } ++ } else { ++ // there is no space, growing upward would be ok, so we pass ++ result[0] = true; ++ } ++ } ++} + diff --git a/java-1.8.0-openjdk.spec b/java-1.8.0-openjdk.spec index da3b4f9..107fc8c 100644 --- a/java-1.8.0-openjdk.spec +++ b/java-1.8.0-openjdk.spec @@ -635,7 +635,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%1 Name: java-%{javaver}-%{origin} Version: %{javaver}.%{updatever} -Release: 23.%{buildver}%{?dist} +Release: 24.%{buildver}%{?dist} # java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons, # and this change was brought into RHEL-4. java-1.5.0-ibm packages # also included the epoch in their virtual provides. This created a @@ -725,6 +725,11 @@ Patch400: ppc_stack_overflow_fix.patch Patch401: fix_ZERO_ARCHDEF_ppc.patch Patch402: atomic_linux_zero.inline.hpp.patch +#both upstreamed, will fly away in u60 +Patch501: 1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch +Patch502: 1182694_javaApplicationMenuMisbehave.patch + + Patch9999: enableArm64.patch BuildRequires: autoconf @@ -1017,6 +1022,9 @@ tar xzf %{SOURCE8} %patch300 +%patch501 +%patch502 + %if %{include_debug_build} cp -r tapset tapset%{debug_suffix} %endif @@ -1697,6 +1705,11 @@ end %changelog +* Fri Mar 27 2015 Jiri Vanek - 1:1.8.0.40-24.b25 +- added patch501 1182011_JavaPrintApiDoesNotPrintUmlautCharsWithPostscriptOutputCorrectly.patch +- added patch502 1182694_javaApplicationMenuMisbehave.patch +- both upstreamed, will be gone with u60 + * Wed Mar 25 2015 Omair Majid - 1:1.8.0.40-23.b25 - Disable various EC algorithms in configuration