< prev index next >

src/java.desktop/unix/classes/sun/print/UnixPrintService.java

Print this page

        

@@ -29,10 +29,12 @@
 import java.net.URI;
 import java.net.URISyntaxException;
 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;
 import javax.print.ServiceUIFactory;
 import javax.print.attribute.Attribute;

@@ -52,10 +54,12 @@
 import javax.print.attribute.standard.Chromaticity;
 import javax.print.attribute.standard.ColorSupported;
 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;
 import javax.print.attribute.standard.MediaSize;
 import javax.print.attribute.standard.MediaSizeName;

@@ -617,14 +621,19 @@
         }
         return false;
     }
 
     public Class<?>[] getSupportedAttributeCategories() {
-        int totalCats = otherAttrCats.length;
-        Class<?>[] cats = new Class<?>[totalCats];
-        System.arraycopy(otherAttrCats, 0, cats, 0, otherAttrCats.length);
-        return cats;
+        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()]);
     }
 
     public boolean
         isAttributeCategorySupported(Class<? extends Attribute> category)
     {

@@ -1021,10 +1030,28 @@
             if (flavor != null &&
                 !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
                 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;
     }
 
     public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
< prev index next >