jvanek pushed to java-1.8.0-openjdk (master). "Sync with f21"

notifications at fedoraproject.org notifications at fedoraproject.org
Fri Mar 27 12:04:32 UTC 2015


>From 9710a8e4f5f22fc9ae63ecf55afe0ccf32414944 Mon Sep 17 00:00:00 2001
From: Jiri Vanek <jvanek at redhat.com>
Date: Fri, 27 Mar 2015 13:04:20 +0100
Subject: Sync with f21


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 at redhat.com, philip.race at 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 = "<e4> 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 <e4> 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 <jvanek at redhat.com> - 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 <omajid at redhat.com> - 1:1.8.0.40-23.b25
 - Disable various EC algorithms in configuration
 
-- 
cgit v0.10.2


	http://pkgs.fedoraproject.org/cgit/java-1.8.0-openjdk.git/commit/?h=master&id=9710a8e4f5f22fc9ae63ecf55afe0ccf32414944


More information about the scm-commits mailing list