<AWT Dev> Review-request for 8143227: Platform-Specific Desktop Features

Alexander Zvegintsev alexander.zvegintsev at oracle.com
Fri Jan 15 09:39:29 UTC 2016


Hi Semyon,

Yes, it is just LOCK/UNLOCK for now,  because it is the most common 
scenario of desktop usage.

Do you mean that we should consider remote desktop logins too? Something 
like:

          if (wParam == WTS_CONSOLE_CONNECT
                   || wParam == WTS_CONSOLE_DISCONNECT
                   || wParam == WTS_REMOTE_CONNECT
                   || wParam == WTS_REMOTE_DISCONNECT
                   || wParam == WTS_SESSION_UNLOCK
                   || wParam == WTS_SESSION_LOCK) {

               BOOL activate = wParam == WTS_CONSOLE_CONNECT
                                 || wParam == WTS_REMOTE_CONNECT
                                 || wParam == WTS_SESSION_UNLOCK;
               env->CallStaticVoidMethod(clzz, AwtToolkit::userSessionMID,
                                                 activate
                                                 ? JNI_TRUE
                                                 : JNI_FALSE);
           }

Or if you refer to WTS_SESSION_LOGOFF, then it seems useless for us,
AFAIK only services will receive this notification, and anyway all apps 
the user was running are already killed by this time.

--
Thanks,
Alexander.

On 12.01.2016 19:21, Semyon Sadetsky wrote:
> Hi Alexander,
>
> awt_Toolkit.cpp:
>
>       case WM_WTSSESSION_CHANGE: {
>           jclass clzz = env->FindClass("sun/awt/windows/WDesktopPeer");
>           DASSERT(clzz != NULL);
>           if (!clzz) throw std::bad_alloc();
>
>           if (wParam == WTS_SESSION_LOCK || wParam == 
> WTS_SESSION_UNLOCK) {
>               env->CallStaticVoidMethod(clzz, AwtToolkit::userSessionMID,
>                                             wParam == WTS_SESSION_UNLOCK
>                                                 ? JNI_TRUE
>                                                 : JNI_FALSE);
>           }
>           break;
>       }
>
> So only the WTS_SESSION_UNLOCK is propagated to java as a session 
> act/deact and other messages just ignored?
>
> Other messages:
> #define WTS_CONSOLE_CONNECT 0x1
> #define WTS_CONSOLE_DISCONNECT 0x2
> #define WTS_REMOTE_CONNECT 0x3
> #define WTS_REMOTE_DISCONNECT 0x4
> #define WTS_SESSION_LOGON 0x5
> #define WTS_SESSION_LOGOFF 0x6
> #define WTS_SESSION_LOCK 0x7
> #define WTS_SESSION_REMOTE_CONTROL
>
> some of them seems to me more suitable to be chosen as the session 
> act/deact event.  Could you comment that for me?
>
> --Semyon
>
> On 11/24/2015 6:02 PM, Alexander Zvegintsev wrote:
>> Please review the updated fix:
>> http://cr.openjdk.java.net/~azvegint/jdk/9/8143227/03/
>>
>> removed fullscreen related code (moved to JDK-8143914 [0])
>> fix serialization in AppEvent
>>
>> [0] https://bugs.openjdk.java.net/browse/JDK-8143914
>>
>> Thanks,
>>
>> Alexander.
>> On 11/21/2015 03:33 AM, Alexander Zvegintsev wrote:
>>> Hi Phil,
>>>
>>>> Can someone explain why this is needed given the existing support of
>>>> GraphicsDevice.setFullScreenWindow(Window) ? 
>>>
>>> GraphicsDevice.setFullScreenWindow is used for an exclusive full 
>>> screen mode.
>>> Mac OS has another option to create a virtual desktop with provided 
>>> window in it.
>>> You can switch between them by three-finger horizontal swipe.
>>>
>>>> Why does it have to be a RootPaneContainer ? Why is this tied to 
>>>> Swing ?
>>>> This appears to narrow it to JDialog and JWindow. 
>>> It reuses swing code to set native windows style bits.
>>>
>>>
>>> Please see updated webrev:
>>> http://cr.openjdk.java.net/~azvegint/jdk/9/8143227/02/
>>> updated permission
>>> added missing @throws @since and @implNote
>>> browseFileDirectory is now return void
>>> RootPaneContainer -> JDialog and JWindow
>>>
>>> -- 
>>> Thanks,
>>> Alexander.
>>>
>>> On 11/20/2015 09:03 PM, Phil Race wrote:
>>>> On 11/20/2015 09:12 AM, Sergey Bylokhov wrote:
>>>>>
>>>>> I am worried about setWindowCanFullScreen and 
>>>>> requestToggleFullScreen.
>>>>> On the latest osx this functionality was merged with maximize 
>>>>> button. So probably it will be better to change behavior of 
>>>>> window.setExtendedState() + MAXIMIZED_BOTH?
>>>>
>>>> Can someone explain why this is needed given the existing support of
>>>> GraphicsDevice.setFullScreenWindow(Window) ?
>>>>
>>>> And what happens if you use *both* ? They still need to play well 
>>>> together
>>>> if there is some reason the new one is needed.
>>>>
>>>> Other comments :
>>>> >   * Note, Aqua Look and Feel should be active to support this on 
>>>> Mac OS.
>>>>
>>>>
>>>> Needs @implNote
>>>>
>>>> There seems to be lots of missing SecurityException tags given all 
>>>> the checkAWTPermission() calls.
>>>> is checkAWTPermission() really the right call for all of these 
>>>> actions ?
>>>> Does it "cover" being able to delete files and quit the app ? I am 
>>>> not sure it is
>>>> correct in all cases.
>>>>
>>>> And also there are missing @since tags.
>>>>
>>>>
>>>>  Opens a folder containing the {@code file} in a default system 
>>>> file manager.
>>>>  933      * @param file the file
>>>>  934      * @return returns true if successfully opened
>>>>  935      * @throws NullPointerException if {@code file} is {@code 
>>>> null}
>>>>  936      * @throws IllegalArgumentException if the specified file 
>>>> doesn't
>>>>  937      * exist
>>>>  938      */
>>>>  939     public boolean browseFileDirectory(File file) {
>>>>
>>>> So what happens if there is no "support" for this ? Exception or 
>>>> "false" ?
>>>> Are you comfortable that all these APIs that return "true" if 
>>>> successful are
>>>> implementable on all platforms. i.e I mean that does the platform 
>>>> return
>>>> a value you can pass on as success/failure.
>>>>
>>>> ---
>>>>
>>>> 861      * Attaches a {@link FullScreenListener} to the specified 
>>>> top-level
>>>>  862      * {@link Window}.
>>>>  863      *
>>>>  864      * @param window to attach the {@link FullScreenListener} to
>>>>  865      * @param listener to be notified when a full screen event 
>>>> occurs
>>>>  866      * @throws IllegalArgumentException if window is not a
>>>>  867      * {@link javax.swing.RootPaneContainer}
>>>>  868      */
>>>>  869     public void addWindowFullScreenListener(final Window window,
>>>>  870                                               final 
>>>> FullScreenListener listener) {
>>>>
>>>> -------
>>>>
>>>> Why does it have to be a RootPaneContainer ? Why is this tied to 
>>>> Swing ?
>>>> This appears to narrow it to JDialog and JWindow.
>>>>
>>>> -phil.
>>>>
>>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20160115/043c38fc/attachment-0001.html>


More information about the awt-dev mailing list