[OpenJDK 2D-Dev] RFR: 8203796: Define API to support specifying ownership of print dialogs.
Phil Race
philip.race at oracle.com
Tue Jun 5 21:39:10 UTC 2018
Updated webrev: http://cr.openjdk.java.net/~prr/8203796.3/
The if/else pattern you point to is removed and ServiceDialog now has just
a Window constructor.
-phil.
On 06/05/2018 02:19 PM, Phil Race wrote:
> Good point. When this code was written (JDK 1.4) Dialog's constructors
> supported only Dialog and Frame owners. 1.6 added support for Window
>
> So this code is now out-dated. I will see if I can just rework
> everything to use the new
> Window constructor and simplify the code a bit.
>
> -phil.
>
> On 06/05/2018 01:52 PM, Sergey Bylokhov wrote:
>> Hi, Phil.
>> What owners are expected to be supported in this fix? I see that the
>> new DialogOwner mentioned a "Window" as a possible owner. But in the
>> implementation there are some casts to Dialog/Frame:
>> ServiceUI.java
>> 97 if (owner instanceof Frame) {
>> 198 dialog = new ServiceDialog(gc,
>> 199 x,
>> 200 y,
>> 201 services, defaultIndex,
>> 202 flavor, attributes,
>> 203 (Frame)owner);
>> 204 } else {
>> 205 dialog = new ServiceDialog(gc,
>> 206 x,
>> 207 y,
>> 208 services, defaultIndex,
>> 209 flavor, attributes,
>> 210 (Dialog)owner);
>> 211 }
>>
>>
>> One small note is about unnecessary final keywords on methods in
>> final class DialogOwner.
>>
>> On 05/06/2018 12:29, Phil Race wrote:
>>>
>>>
>>> On 06/05/2018 11:46 AM, Kevin Rushforth wrote:
>>>> My testing of the fix on Windows (with the corresponding FX fix)
>>>> looks good. A couple comments / questions:
>>>>
>>>> DialogOwner.java:
>>>>
>>>> * The docs should probably say what the behavior is if the
>>>> application does not have the alwaysOnTop permission. I presume
>>>> that the attribute will be silently ignored without that
>>>> permission? Have you tested this?
>>>
>>> I expect a security exception will be thrown. Although it is
>>> unlikely that an application
>>> will have print permission and not this permission.
>>> Since the application does not control the size/appearance/content
>>> of the dialog
>>> the reasons for the permission do not apply, so if it did not, it is
>>> not a concern if
>>> it was to always appear on top, but also if the application does not
>>> have this permission
>>> it is not important enough to assert it.
>>> So a change to catch the exception should be sufficient and I will
>>> make that change.
>>>
>>>>
>>>> PrintJob2D.java:
>>>>
>>>> * The only change appears to be adding an unused import.
>>>
>>> It is not unused. Previously DialogOwner was in the same package.
>>> Now it is not, so an import is now needed.
>>>
>>>>
>>>>
>>>> DialogOwnerTest.java:
>>>>
>>>> * Does the test need '@key headful' or is this not needed because
>>>> it is a manual test?
>>>
>>> right, all our manual tests require interaction so are headful.
>>>>
>>>> * The new unit test fails to compile for me, but maybe I'm doing
>>>> something wrong (I just ran it with jtreg with no special arguments).
>>>
>>> fixed
>>>
>>> updated webrev : http://cr.openjdk.java.net/~prr/8203796.2/
>>>
>>> -phil.
>>>
>>>>
>>>> -- Kevin
>>>>
>>>>
>>>> On 6/4/2018 12:39 PM, Phil Race wrote:
>>>>> I have posted an updated webrev
>>>>> http://cr.openjdk.java.net/~prr/8203796.1
>>>>> which removes the "native id" case from the public API. Now the
>>>>> plan is
>>>>> that any code that needs to specify this will need to use native
>>>>> code to set it.
>>>>> The CSR text is also updated, and so is the referenced FX webrev
>>>>> http://cr.openjdk.java.net/~prr/8195808.1
>>>>>
>>>>> -phil.
>>>>>
>>>>> On 05/25/2018 11:04 AM, Phil Race wrote:
>>>>>> This defines a new class "DialogOwner" implementing
>>>>>> PrintRequestAttribute
>>>>>> which allows an application to specify that a Print or Page
>>>>>> dialog be one of
>>>>>> 1) owned by an application specified AWT window
>>>>>> 2) owned by an application specified foreign (non-AWT) window
>>>>>> 3) use AWT's alwaysOnTop functionality where supported.
>>>>>>
>>>>>> JDK bug: https://bugs.openjdk.java.net/browse/JDK-8203796
>>>>>> CSR : https://bugs.openjdk.java.net/browse/JDK-8203834
>>>>>> JDK webrev : http://cr.openjdk.java.net/~prr/8203796/
>>>>>>
>>>>>> Please review the webrev and the CSR.
>>>>>>
>>>>>> The webrev will show that this functionality was already mostly
>>>>>> available but only as internal API.
>>>>>>
>>>>>> To help applications be able to query what is supported, the various
>>>>>> PrintService implementation classes needed to be updated, for
>>>>>> example "ID"
>>>>>> is reported as unsupported unless specifying using the native
>>>>>> dialog on windows.
>>>>>> That actually pointed out that back in JDK 7 when we added
>>>>>> DialogTypeSelection
>>>>>> to be able to choose native or Swing there was no query support
>>>>>> for that to be
>>>>>> added. It was not a problem though as if it was not supported it
>>>>>> really just meant
>>>>>> that applications would have to live with what dialog was
>>>>>> provided, as before.
>>>>>> But it made a test for this new API more difficult .. so I added
>>>>>> code needed for that.
>>>>>> The test is manual. An automated test might be possible, but
>>>>>> probably very flaky.
>>>>>> But the test only makes you run through the scenarios that we
>>>>>> know are supportable.
>>>>>>
>>>>>> The motivation for this new public API is to help OpenJFX since
>>>>>> it uses the Java 2D PrinterJob class
>>>>>> to implement its own printing, so there is also an FX side to
>>>>>> switch to using this instead
>>>>>> of the earlier internal API which it can not access when it is
>>>>>> outside the JDK :
>>>>>>
>>>>>> FX bug : https://bugs.openjdk.java.net/browse/JDK-8195808
>>>>>> FX webrev: http://cr.openjdk.java.net/~prr/8195808/
>>>>>>
>>>>>> -phil.
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>
More information about the 2d-dev
mailing list