8204496: backout fix for 8203796 which was pushed under another ID
Reviewed-by: serb
--- a/src/java.desktop/share/classes/javax/print/ServiceUI.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/share/classes/javax/print/ServiceUI.java Wed Jun 06 12:35:44 2018 -0700
@@ -25,6 +25,8 @@
package javax.print;
+import java.awt.Dialog;
+import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
@@ -33,11 +35,11 @@
import javax.print.attribute.Attribute;
import javax.print.attribute.AttributeSet;
-import javax.print.attribute.standard.DialogOwner;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Destination;
import javax.print.attribute.standard.Fidelity;
+import sun.print.DialogOwner;
import sun.print.ServiceDialog;
import sun.print.SunAlternateMedia;
@@ -183,7 +185,6 @@
DialogOwner dlgOwner = (DialogOwner)attributes.get(DialogOwner.class);
Window owner = (dlgOwner != null) ? dlgOwner.getOwner() : null;
- boolean setOnTop = (dlgOwner != null) && (owner == null);
Rectangle gcBounds = (gc == null) ? GraphicsEnvironment.
getLocalGraphicsEnvironment().getDefaultScreenDevice().
@@ -191,17 +192,21 @@
x += gcBounds.x;
y += gcBounds.y;
- ServiceDialog dialog = new ServiceDialog(gc,
- x,
- y,
- services, defaultIndex,
- flavor, attributes,
- owner);
- if (setOnTop) {
- try {
- dialog.setAlwaysOnTop(true);
- } catch (SecurityException e) {
- }
+ ServiceDialog dialog;
+ if (owner instanceof Frame) {
+ dialog = new ServiceDialog(gc,
+ x,
+ y,
+ services, defaultIndex,
+ flavor, attributes,
+ (Frame)owner);
+ } else {
+ dialog = new ServiceDialog(gc,
+ x,
+ y,
+ services, defaultIndex,
+ flavor, attributes,
+ (Dialog)owner);
}
Rectangle dlgBounds = dialog.getBounds();
--- a/src/java.desktop/share/classes/javax/print/attribute/standard/DialogOwner.java Wed Jun 06 10:44:27 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,142 +0,0 @@
-/*
- * Copyright (c) 2018, 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.
- */
-
-package javax.print.attribute.standard;
-
-import java.awt.Window;
-import javax.print.attribute.Attribute;
-import javax.print.attribute.PrintRequestAttribute;
-import sun.print.DialogOwnerAccessor;
-
-/**
- * An attribute class used to support requesting a print or page setup dialog
- * be kept displayed on top of all windows or some specific window.
- * <p>
- * Constructed without any arguments it will request that a print or page
- * setup dialog be configured as if the application directly was to specify
- * {@code java.awt.Window.setAlwaysOnTop(true)}, subject to permission checks.
- * <p>
- * Constructed with a {@link java.awt.Window} parameter, it requests that
- * the dialog be owned by the specified window.
- *
- * @since 11
- */
-public final class DialogOwner implements PrintRequestAttribute {
-
- private static class Accessor extends DialogOwnerAccessor {
-
- public long getOwnerID(DialogOwner owner) {
- return owner.getID();
- }
- }
-
- static private Accessor accessor = new Accessor();
- static {
- DialogOwnerAccessor.setAccessor(accessor);
- }
-
- private static final long serialVersionUID = -1901909867156076547L;
-
- private Window owner;
- private transient long id;
-
- /**
- * Constructs an instance which can be used to request
- * {@code java.awt.Window.setAlwaysOnTop(true)} behaviour.
- * This should be used where there is no application preferred owner window.
- * Whether this has any effect depends on if always on top is supported
- * for this platform and the particular dialog to be displayed.
- */
- public DialogOwner() {
- }
-
- /**
- * Constructs an instance which can be used to request that the
- * specified {@link java.awt.Window} be the owner of the dialog.
- * @param owner window.
- */
- public DialogOwner(Window owner) {
- this.owner = owner;
- }
-
- /**
- * Constructs an instance which requests that the dialog be displayed
- * as if it were a child of a native platform window, specified
- * using its opqaue platform identifier or handle.
- * This is useful mainly for the case where the id represents a window
- * which may not be an AWT {@code Window}, but instead was created by
- * another UI toolkit, such as OpenJFX.
- * Any effect is platform dependent.
- * @param id a native window identifier or handle
- */
- DialogOwner(long id) {
- this.id = id;
- }
-
- /**
- * Returns a native platform id or handle, if one was specified,
- * otherwise, zero.
- * @return a native platform id.
- */
- long getID() {
- return id;
- }
-
- /**
- * Returns a {@code Window owner}, if one was specified,
- * otherwise {@code null}.
- * @return an owner window.
- */
- public Window getOwner() {
- return owner;
- }
-
- /**
- * Get the printing attribute class which is to be used as the "category"
- * for this printing attribute value.
- * <p>
- * For class {@code DialogOwner}, the category is class
- * {@code DialogOwner} itself.
- *
- * @return printing attribute class (category), an instance of class
- * {@link Class java.lang.Class}
- */
- public final Class<? extends Attribute> getCategory() {
- return DialogOwner.class;
- }
-
- /**
- * Get the name of the category of which this attribute value is an
- * instance.
- * <p>
- * For class {@code DialogOwner}, the category name is
- * {@code "dialog-owner"}.
- *
- */
- public final String getName() {
- return "dialog-owner";
-
- }
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/share/classes/sun/print/DialogOnTop.java Wed Jun 06 12:35:44 2018 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2017, 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.
+ */
+
+package sun.print;
+
+import javax.print.attribute.Attribute;
+import javax.print.attribute.PrintRequestAttribute;
+
+/*
+ * An implementation class used to request the dialog be set always-on-top.
+ * It needs to be read and honoured by the dialog code which will use
+ * java.awt.Window.setAlwaysOnTop(true) in cases where it is supported.
+ */
+public class DialogOnTop implements PrintRequestAttribute {
+
+ private static final long serialVersionUID = -1901909867156076547L;
+
+ long id;
+
+ public DialogOnTop() {
+ }
+
+ public DialogOnTop(long id) {
+ this.id = id;
+ }
+
+ public final Class<? extends Attribute> getCategory() {
+ return DialogOnTop.class;
+ }
+
+ public long getID() {
+ return id;
+ }
+
+ public final String getName() {
+ return "dialog-on-top";
+ }
+
+ public String toString() {
+ return "dialog-on-top";
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/share/classes/sun/print/DialogOwner.java Wed Jun 06 12:35:44 2018 -0700
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2007, 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.
+ */
+
+package sun.print;
+
+import java.awt.Dialog;
+import javax.print.attribute.Attribute;
+import javax.print.attribute.PrintRequestAttribute;
+import java.awt.Frame;
+import java.awt.Window;
+
+/**
+ * Class DialogOwner is a printing attribute class that identifies
+ * the window that owns the print dialog.
+ *
+ * <P>
+ * <B>IPP Compatibility:</B> This is not an IPP attribute.
+ * <P>
+ *
+ */
+@SuppressWarnings("serial") // JDK-implementation class
+public final class DialogOwner
+ implements PrintRequestAttribute {
+
+ private Window dlgOwner;
+
+ /**
+ * Construct a new dialog owner attribute with the given frame.
+ *
+ * @param frame the frame that owns the print dialog
+ */
+ public DialogOwner(Frame frame) {
+ dlgOwner = frame;
+ }
+
+ /**
+ * Construct a new dialog owner attribute with the given dialog.
+ *
+ * @param dialog the dialog that owns the print dialog
+ */
+ public DialogOwner(Dialog dialog) {
+ dlgOwner = dialog;
+ }
+
+ /**
+ * Returns the string table for class DialogOwner.
+ */
+ public Window getOwner() {
+ return dlgOwner;
+ }
+
+
+ /**
+ * Get the printing attribute class which is to be used as the "category"
+ * for this printing attribute value.
+ * <P>
+ * For class DialogOwner the category is class
+ * DialogOwner itself.
+ *
+ * @return Printing attribute class (category), an instance of class
+ * {@link java.lang.Class java.lang.Class}.
+ */
+ public Class<? extends Attribute> getCategory() {
+ return DialogOwner.class;
+ }
+
+
+ /**
+ * Get the name of the category of which this attribute value is an
+ * instance.
+ * <P>
+ * For class DialogOwner the category name is
+ * {@code "dialog-owner"}.
+ *
+ * @return Attribute category name.
+ */
+ public String getName() {
+ return "dialog-owner";
+ }
+
+}
--- a/src/java.desktop/share/classes/sun/print/DialogOwnerAccessor.java Wed Jun 06 10:44:27 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2018, 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.
- */
-
-package sun.print;
-
-import javax.print.attribute.standard.DialogOwner;
-
-public abstract class DialogOwnerAccessor {
-
- public abstract long getOwnerID(DialogOwner owner);
-
- public static DialogOwnerAccessor accessor = null;
-
- public static void setAccessor(DialogOwnerAccessor acc) {
- accessor = acc;
- }
-
- public static long getID(DialogOwner owner) {
- if (accessor == null || owner == null) {
- return 0;
- } else {
- return accessor.getOwnerID(owner);
- }
- }
-}
--- a/src/java.desktop/share/classes/sun/print/PrintJob2D.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/share/classes/sun/print/PrintJob2D.java Wed Jun 06 12:35:44 2018 -0700
@@ -60,7 +60,6 @@
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Destination;
import javax.print.attribute.standard.DialogTypeSelection;
-import javax.print.attribute.standard.DialogOwner;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.MediaSize;
import javax.print.attribute.standard.PrintQuality;
--- a/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java Wed Jun 06 12:35:44 2018 -0700
@@ -74,7 +74,6 @@
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Destination;
import javax.print.attribute.standard.DialogTypeSelection;
-import javax.print.attribute.standard.DialogOwner;
import javax.print.attribute.standard.Fidelity;
import javax.print.attribute.standard.JobName;
import javax.print.attribute.standard.JobSheets;
@@ -831,24 +830,17 @@
int x = gcBounds.x+50;
int y = gcBounds.y+50;
ServiceDialog pageDialog;
- boolean setOnTop = false;
if (onTop != null) {
attributes.add(onTop);
- Window owner = onTop.getOwner();
- if (owner != null) {
- w = owner; // use the one specifed by the app
- } else if (DialogOwnerAccessor.getID(onTop) == 0) {
- setOnTop = true;
- }
}
+ if (w instanceof Frame) {
pageDialog = new ServiceDialog(gc, x, y, service,
DocFlavor.SERVICE_FORMATTED.PAGEABLE,
- attributes, w);
- if (setOnTop) {
- try {
- pageDialog.setAlwaysOnTop(true);
- } catch (SecurityException e) {
- }
+ attributes,(Frame)w);
+ } else {
+ pageDialog = new ServiceDialog(gc, x, y, service,
+ DocFlavor.SERVICE_FORMATTED.PAGEABLE,
+ attributes, (Dialog)w);
}
Rectangle dlgBounds = pageDialog.getBounds();
@@ -996,7 +988,8 @@
* (it might be set in java.awt.PrintJob.printDialog)
*/
if (attributes.get(DialogOwner.class) == null) {
- attributes.add(new DialogOwner(w));
+ attributes.add(w instanceof Frame ? new DialogOwner((Frame)w) :
+ new DialogOwner((Dialog)w));
}
} else {
grCfg = GraphicsEnvironment.getLocalGraphicsEnvironment().
@@ -2588,7 +2581,7 @@
}
}
- private DialogOwner onTop = null;
+ private DialogOnTop onTop = null;
private long parentWindowID = 0L;
@@ -2604,9 +2597,9 @@
private void setParentWindowID(PrintRequestAttributeSet attrs) {
parentWindowID = 0L;
- onTop = (DialogOwner)attrs.get(DialogOwner.class);
+ onTop = (DialogOnTop)attrs.get(DialogOnTop.class);
if (onTop != null) {
- parentWindowID = DialogOwnerAccessor.getID(onTop);
+ parentWindowID = onTop.getID();
}
}
}
--- a/src/java.desktop/share/classes/sun/print/ServiceDialog.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/share/classes/sun/print/ServiceDialog.java Wed Jun 06 12:35:44 2018 -0700
@@ -38,7 +38,6 @@
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
-import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
@@ -137,13 +136,33 @@
int defaultServiceIndex,
DocFlavor flavor,
PrintRequestAttributeSet attributes,
- Window window)
+ Dialog dialog)
{
- super(window, getMsg("dialog.printtitle"), Dialog.DEFAULT_MODALITY_TYPE, gc);
+ super(dialog, getMsg("dialog.printtitle"), true, gc);
initPrintDialog(x, y, services, defaultServiceIndex,
flavor, attributes);
}
+
+
+ /**
+ * Constructor for the "standard" print dialog (containing all relevant
+ * tabs)
+ */
+ public ServiceDialog(GraphicsConfiguration gc,
+ int x, int y,
+ PrintService[] services,
+ int defaultServiceIndex,
+ DocFlavor flavor,
+ PrintRequestAttributeSet attributes,
+ Frame frame)
+ {
+ super(frame, getMsg("dialog.printtitle"), true, gc);
+ initPrintDialog(x, y, services, defaultServiceIndex,
+ flavor, attributes);
+ }
+
+
/**
* Initialize print dialog.
*/
@@ -165,22 +184,8 @@
isAWT = true;
}
- if (attributes.get(DialogOwner.class) != null) {
- DialogOwner owner = (DialogOwner)attributes.get(DialogOwner.class);
- /* When the ServiceDialog is constructed the caller of the
- * constructor checks for this attribute and if it specifies a
- * window then it will use that in the constructor instead of
- * inferring one from keyboard focus.
- * In this case the owner of the dialog is the same as that
- * specified in the attribute and we do not need to set the
- * on top property
- */
- if ((getOwner() == null) || (owner.getOwner() != getOwner())) {
- try {
- setAlwaysOnTop(true);
- } catch (SecurityException e) {
- }
- }
+ if (attributes.get(DialogOnTop.class) != null) {
+ setAlwaysOnTop(true);
}
Container c = getContentPane();
c.setLayout(new BorderLayout());
@@ -239,13 +244,28 @@
PrintService ps,
DocFlavor flavor,
PrintRequestAttributeSet attributes,
- Window window)
+ Dialog dialog)
{
- super(window, getMsg("dialog.pstitle"), Dialog.DEFAULT_MODALITY_TYPE, gc);
+ super(dialog, getMsg("dialog.pstitle"), true, gc);
initPageDialog(x, y, ps, flavor, attributes);
}
/**
+ * Constructor for the solitary "page setup" dialog
+ */
+ public ServiceDialog(GraphicsConfiguration gc,
+ int x, int y,
+ PrintService ps,
+ DocFlavor flavor,
+ PrintRequestAttributeSet attributes,
+ Frame frame)
+ {
+ super(frame, getMsg("dialog.pstitle"), true, gc);
+ initPageDialog(x, y, ps, flavor, attributes);
+ }
+
+
+ /**
* Initialize "page setup" dialog
*/
void initPageDialog(int x, int y,
@@ -258,15 +278,8 @@
this.asOriginal = attributes;
this.asCurrent = new HashPrintRequestAttributeSet(attributes);
- if (attributes.get(DialogOwner.class) != null) {
- /* See comments in same block in initPrintDialog */
- DialogOwner owner = (DialogOwner)attributes.get(DialogOwner.class);
- if ((getOwner() == null) || (owner.getOwner() != getOwner())) {
- try {
- setAlwaysOnTop(true);
- } catch (SecurityException e) {
- }
- }
+ if (attributes.get(DialogOnTop.class) != null) {
+ setAlwaysOnTop(true);
}
Container c = getContentPane();
--- a/src/java.desktop/unix/classes/sun/print/IPPPrintService.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/unix/classes/sun/print/IPPPrintService.java Wed Jun 06 12:35:44 2018 -0700
@@ -25,8 +25,6 @@
package sun.print;
-import java.awt.GraphicsEnvironment;
-import java.awt.Toolkit;
import javax.print.attribute.*;
import javax.print.attribute.standard.*;
import javax.print.DocFlavor;
@@ -1073,11 +1071,6 @@
catList.add(PrinterResolution.class);
}
- if (GraphicsEnvironment.isHeadless() == false) {
- catList.add(DialogOwner.class);
- catList.add(DialogTypeSelection.class);
- }
-
supportedCats = new Class<?>[catList.size()];
catList.toArray(supportedCats);
Class<?>[] copyCats = new Class<?>[supportedCats.length];
@@ -1399,38 +1392,10 @@
}
}
return false;
- } else if (attr.getCategory() == PrinterResolution.class) {
+ } if (attr.getCategory() == PrinterResolution.class) {
if (attr instanceof PrinterResolution) {
return isSupportedResolution((PrinterResolution)attr);
}
- } else if (attr.getCategory() == DialogOwner.class) {
- DialogOwner owner = (DialogOwner)attr;
- // ID not supported on any dialog type on Unix platforms.
- if (DialogOwnerAccessor.getID(owner) != 0) {
- return false;
- }
- // On Mac we have no control over the native dialog.
- DialogTypeSelection dst = (attributes == null) ? null :
- (DialogTypeSelection)attributes.get(DialogTypeSelection.class);
- if (PrintServiceLookupProvider.isMac() &&
- dst == DialogTypeSelection.NATIVE) {
- return false;
- }
- // The other case is always a Swing dialog on all Unix platforms.
- // So we only need to check that the toolkit supports
- // always on top.
- if (owner.getOwner() != null) {
- return true;
- } else {
- return Toolkit.getDefaultToolkit().isAlwaysOnTopSupported();
- }
- } else if (attr.getCategory() == DialogTypeSelection.class) {
- if (PrintServiceLookupProvider.isMac()) {
- return true;
- } else {
- DialogTypeSelection dst = (DialogTypeSelection)attr;
- return attr == DialogTypeSelection.COMMON;
- }
}
return true;
}
--- a/src/java.desktop/unix/classes/sun/print/UnixPrintService.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/unix/classes/sun/print/UnixPrintService.java Wed Jun 06 12:35:44 2018 -0700
@@ -31,8 +31,6 @@
import java.util.ArrayList;
import java.util.Locale;
-import java.awt.GraphicsEnvironment;
-import java.awt.Toolkit;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
@@ -56,8 +54,6 @@
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.CopiesSupported;
import javax.print.attribute.standard.Destination;
-import javax.print.attribute.standard.DialogOwner;
-import javax.print.attribute.standard.DialogTypeSelection;
import javax.print.attribute.standard.Fidelity;
import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaPrintableArea;
@@ -623,15 +619,10 @@
}
public Class<?>[] getSupportedAttributeCategories() {
- ArrayList<Class<?>> categList = new ArrayList<>(otherAttrCats.length);
- for (Class<?> c : otherAttrCats) {
- categList.add(c);
- }
- if (GraphicsEnvironment.isHeadless() == false) {
- categList.add(DialogOwner.class);
- categList.add(DialogTypeSelection.class);
- }
- return categList.toArray(new Class<?>[categList.size()]);
+ int totalCats = otherAttrCats.length;
+ Class<?>[] cats = new Class<?>[totalCats];
+ System.arraycopy(otherAttrCats, 0, cats, 0, otherAttrCats.length);
+ return cats;
}
public boolean
@@ -1032,24 +1023,6 @@
flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE))) {
return false;
}
- } else if (attr.getCategory() == DialogOwner.class) {
- DialogOwner owner = (DialogOwner)attr;
- // ID not supported on any dialog type on Unix platforms.
- if (DialogOwnerAccessor.getID(owner) != 0) {
- return false;
- }
- // UnixPrintService is not used on Mac, so this is
- // always some Unix system that does not have CUPS/IPP
- // Which means we always use a Swing dialog and we need
- // only check if alwaysOnTop is supported by the toolkit.
- if (owner.getOwner() != null) {
- return true;
- } else {
- return Toolkit.getDefaultToolkit().isAlwaysOnTopSupported();
- }
- } else if (attr.getCategory() == DialogTypeSelection.class) {
- DialogTypeSelection dts = (DialogTypeSelection)attr;
- return dts == DialogTypeSelection.COMMON;
}
return true;
}
--- a/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java Wed Jun 06 12:35:44 2018 -0700
@@ -79,7 +79,6 @@
import javax.print.attribute.standard.SheetCollate;
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.Destination;
-import javax.print.attribute.standard.DialogOwner;
import javax.print.attribute.standard.OrientationRequested;
import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaSizeName;
@@ -96,6 +95,7 @@
import sun.print.Win32PrintService;
import sun.print.PrintServiceLookupProvider;
import sun.print.ServiceDialog;
+import sun.print.DialogOwner;
import java.awt.Frame;
import java.io.FilePermission;
--- a/src/java.desktop/windows/classes/sun/print/Win32PrintService.java Wed Jun 06 10:44:27 2018 -0700
+++ b/src/java.desktop/windows/classes/sun/print/Win32PrintService.java Wed Jun 06 12:35:44 2018 -0700
@@ -25,8 +25,6 @@
package sun.print;
-import java.awt.GraphicsEnvironment;
-import java.awt.Toolkit;
import java.awt.Window;
import java.awt.print.PrinterJob;
import java.io.File;
@@ -56,8 +54,6 @@
import javax.print.attribute.standard.Copies;
import javax.print.attribute.standard.CopiesSupported;
import javax.print.attribute.standard.Destination;
-import javax.print.attribute.standard.DialogOwner;
-import javax.print.attribute.standard.DialogTypeSelection;
import javax.print.attribute.standard.Fidelity;
import javax.print.attribute.standard.Media;
import javax.print.attribute.standard.MediaSizeName;
@@ -1046,10 +1042,6 @@
categList.add(PrinterResolution.class);
}
- if (GraphicsEnvironment.isHeadless() == false) {
- categList.add(DialogOwner.class);
- categList.add(DialogTypeSelection.class);
- }
return categList.toArray(new Class<?>[categList.size()]);
}
@@ -1593,23 +1585,6 @@
(isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) {
return false;
}
- } else if (category == DialogTypeSelection.class) {
- return true; // isHeadless was checked by category support
- } else if (category == DialogOwner.class) {
- DialogOwner owner = (DialogOwner)attr;
- DialogTypeSelection dts = (attributes == null) ? null :
- (DialogTypeSelection)attributes.get(DialogTypeSelection.class);
- if (dts == DialogTypeSelection.NATIVE) {
- return DialogOwnerAccessor.getID(owner) != 0;
- } else {
- if (DialogOwnerAccessor.getID(owner) != 0) {
- return false;
- } else if (owner.getOwner() != null) {
- return true;
- } else {
- return Toolkit.getDefaultToolkit().isAlwaysOnTopSupported();
- }
- }
}
return true;
}
--- a/test/jdk/java/awt/print/Dialog/DialogOwnerTest.java Wed Jun 06 10:44:27 2018 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2018, 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 8203796
- @run main/manual DialogOwnerTest
- @summary Test DialogOwner API
-*/
-
-import java.util.ArrayList;
-import java.util.List;
-import java.awt.GraphicsConfiguration;
-import java.awt.GridLayout;
-import java.awt.Window;
-import java.awt.event.ActionEvent;
-import java.awt.print.PrinterJob;
-import javax.print.PrintService;
-import javax.print.PrintServiceLookup;
-import javax.print.ServiceUI;
-import javax.print.attribute.HashPrintRequestAttributeSet;
-import javax.print.attribute.PrintRequestAttributeSet;
-import javax.print.attribute.standard.DialogOwner;
-import javax.print.attribute.standard.DialogTypeSelection;
-import javax.swing.JButton;
-import javax.swing.JCheckBox;
-import javax.swing.JFrame;
-import javax.swing.JPanel;
-import javax.swing.JTextArea;
-import javax.swing.SwingUtilities;
-
-public class DialogOwnerTest extends JPanel {
-
- static final int NONE = 0x0;
- static final int PRINT = 0x1;
- static final int PAGE = 0x2;
- static final int SWING2D = 0x4;
- static final int NATIVE2D = 0x8;
- static final int SERVICEUI = 0x10;
-
- static final int ONTOP = 0x20;
- static final int OWNED = 0x40;
-
- static PrintService[] services =
- PrintServiceLookup.lookupPrintServices(null, null);
-
- public static void main(String[] args) {
- if (services.length == 0) {
- System.out.println("No printers, exiting");
- return;
- } else {
- service = PrinterJob.getPrinterJob().getPrintService();
- }
- SwingUtilities.invokeLater(() -> {
- createUI();
- });
- while (!testFinished) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e){
- }
- }
- if (!testPassed) {
- throw new RuntimeException("TEST FAILED.");
- }
- }
-
-
- static final String otherText =
- "This window is used to test on top behaviour\n" +
- "For tests that are 'Owned' or 'On Top' the dialog\n" +
- "must always stay above this window. Verify this\n " +
- "by moving the dialog so that it partially obscures\n" +
- "this window and then trying to raise this window.";
-
- static final String instructions =
- " Instructions\n" +
- "This tests that a print dialog stays on top of either another\n" +
- "window, or on top of all windows.\n" +
- "For Owned tests the window titled 'Owner Window' should always \n" +
- "stay behind the print dialog.\n" +
- "For On Top tests all windows should stay behind the owner window.\n" +
- "This test tracks if you have checked all the scenarios and will\n" +
- "not allow the test to pass unless you have visited them all.\n";
-
- static PrintService service;
-
- public DialogOwnerTest() {
- super();
- //setLayout(new GridLayout(24, 1));
- }
-
- static boolean isNative(int flags) {
- return (flags & NATIVE2D) != 0;
- }
-
- static boolean isCommon(int flags) {
- return (flags & SWING2D) != 0;
- }
-
- static boolean is2D(int flags) {
- return (flags & SWING2D|NATIVE2D) != 0;
- }
-
- static boolean isPage(int flags) {
- return (flags & PAGE ) != 0;
- }
-
- static JFrame frame;
- static JFrame other;
- static JButton pass;
- static ArrayList<JPanel> panelList = new ArrayList<JPanel>();
- static volatile boolean testPassed, testFinished;
-
- int testCount = 0;
- List<String> testList = new ArrayList<String>();
-
- static void createUI() {
- other = new JFrame("Owner Window");
- JTextArea otherTextArea = new JTextArea(otherText, 10, 40);
- other.add(otherTextArea);
- other.pack();
- other.setVisible(true);
- other.setLocation(800, 100);
-
- frame = new JFrame("Test Dialog Owner");
- frame.pack();
- JTextArea instructionsPanel = new JTextArea(instructions, 10, 50);
- instructionsPanel.setEditable(false);
- frame.add("North", instructionsPanel);
- DialogOwnerTest test = new DialogOwnerTest();
-
- test.addTest("Owned Swing Print", OWNED, frame, PRINT|SWING2D);
- test.addTest("On Top Swing Print", ONTOP, null, PRINT|SWING2D);
-
- test.addTest("Owned Swing Page", OWNED, frame, PAGE|SWING2D);
- test.addTest("On Top Swing Page", ONTOP, null, PAGE|SWING2D);
-
- test.addTest("Owned javax.print", OWNED, frame, PRINT|SERVICEUI);
- test.addTest("On Top javax.print", OWNED, null, PRINT|SERVICEUI);
-
- test.addTest("Owned Native Print", OWNED, frame, PRINT|NATIVE2D);
- test.addTest("On Top Native Print", OWNED, null, PRINT|NATIVE2D);
-
- test.addTest("Owned Native Page", OWNED, frame, PAGE|NATIVE2D);
- test.addTest("On Top Native Page", OWNED, null, PAGE|NATIVE2D);
-
- test.setLayout(new GridLayout(panelList.size()+2, 1));
-
- pass = new JButton("Pass");
- pass.setEnabled(false);
- pass.addActionListener((ActionEvent e) -> {
- if (test.testList.size() > 0) {
- return;
- }
- frame.dispose();
- other.dispose();
- System.out.println("User says test passed.");
- testPassed = true;
- testFinished = true;
- });
-
- JButton fail = new JButton("Fail");
- fail.addActionListener((ActionEvent e) -> {
- frame.dispose();
- other.dispose();
- System.out.println("User says test failed.");
- testPassed = false;
- testFinished = true;
- });
-
- JPanel p = new JPanel();
- p.add(pass);
- p.add(fail);
- test.add(p);
-
-
- for (JPanel panel : panelList) {
- test.add(panel);
- }
-
- frame.add("Center", test);
- frame.pack();
- frame.setLocation(0,0);
- frame.setVisible(true);
- }
-
- boolean isSupported(PrintRequestAttributeSet aset,
- int ownerFlags, Window owner, int dlgFlags) {
-
- boolean supported = true;
- DialogOwner ownerAttr = null;
- if (ownerFlags != NONE) {
- if (ownerFlags == ONTOP) {
- ownerAttr = new DialogOwner();
- } else if (ownerFlags == OWNED) {
- ownerAttr = new DialogOwner(owner);
- }
- aset.add(ownerAttr);
- }
- if (is2D(dlgFlags)) {
- DialogTypeSelection dst = null;
- if (isNative(dlgFlags)) {
- dst = DialogTypeSelection.NATIVE;
- } else if (isCommon(dlgFlags)) {
- dst = DialogTypeSelection.COMMON;
- }
- if (dst != null &&
- !service.isAttributeValueSupported(dst, null, aset)) {
- //System.out.println("This DialogType not supported");
- supported = false;
- }
- if (dst != null) {
- aset.add(dst);
- }
- if (ownerAttr != null &&
- !service.isAttributeValueSupported(ownerAttr, null, aset)) {
- //System.out.println("This DialogOwner not supported");
- supported = false;
- }
- }
- return supported;
- }
-
- void addTest(String title, int ownerFlags, Window owner, int dlgFlags) {
-
- PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
- if (!isSupported(aset, ownerFlags, owner, dlgFlags)) {
- return;
- }
-
- // if we are here then this is supportable and worth testing
- // and the attribute set is configured.
-
- String label = title + " Dialog";
- JButton button = new JButton(label);
- JCheckBox tested = new JCheckBox("Tested");
- tested.setEnabled(false);
- JPanel panel = new JPanel();
- panel.add(tested);
- panel.add(button);
- panelList.add(panel);
- //add(panel);
- testList.add(title);
- if (++testCount != testList.size()) {
- throw new RuntimeException("Test titles must be unique");
- }
-
- button.addActionListener((ActionEvent e) -> {
- tested.setSelected(true);
- testList.remove(title);
- if (testList.isEmpty()) {
- pass.setEnabled(true);
- }
-
- if (is2D(dlgFlags)) {
- PrinterJob job = PrinterJob.getPrinterJob();
- if (isPage(dlgFlags)) {
- job.pageDialog(aset);
- } else {
- job.printDialog(aset);
- }
- } else {
- GraphicsConfiguration gc = null;
- int x = 0, y = 0;
- ServiceUI.printDialog(gc, x, y, services, services[0], null,aset);
- }
- });
- }
-}