Stage Manager Problems

Jeremy Wood mickleness at gmail.com
Thu Feb 16 10:04:11 UTC 2023


Harshitha,

Thanks for the suggestions. I think those don’t really resolve the 
problem, though.

In the original sample program (having only 1 frame) watching the 
keyboard focus could help identify when there’s a change, but if there’s 
a second frame: that second window could retain the focus and the first 
window still can’t answer the question, “Are you minimized now?”

(I have an updated sample program 
<https://drive.google.com/file/d/1uzUUDnAlPoHlFdbVgunwpFKvn4Ies-6-/view?usp=sharing> 
here with two frames if anyone’s interested.)

Further: the window could lose the focus at any time (if a system dialog 
came up), so I don’t think focus should act as a proxy for visibility.

I did find tonight a work-around for our app a few hours ago. We have 
some native code that identifies all visible windows, their bounds and 
their title. If I consult that list: I see a window that matches our 
(sufficiently unique) window title. And its bounds do not at all match 
with what Java says our window’s bounds are. And it is positioned so 99% 
of it overlaps with a window called “Gesture Blocking Overlay”. (All 
Stage Manager thumbnails appear to have an overlay window with this 
title.) So it’s a very kludgy and brittle work around, for for the time 
being it works.

This leads me to believe the Mac OS windowing system doesn’t consider 
the frame to be “hidden”. I think the window remains technically 
visible. And Mac OS knows it has new bounds. But the peer in Java is 
oblivious to the new bounds/state. (I examined the peer LWWindowPeer in 
a debugger: it still thinks the window is visible (technically true) and 
its bounds are unchanged (not true).)

The more I look at this: I’m afraid the crux of this problem is Stage 
Manager has introduced a new window state that Java’s AWT architecture 
can’t really describe yet. (But I’d love to be proved wrong…?)

  - Jeremy

------ Original Message ------
>From "Harshitha Onkar" <harshitha.onkar at oracle.com>
To "Jeremy Wood" <mickleness at gmail.com>
Cc "client-libs-dev at openjdk.org" <client-libs-dev at openjdk.org>
Date 2/16/2023 1:57:56 AM
Subject RE: Stage Manager Problems

>Hi Jeremy,
>
>
>
>Does any of the following options help in your case to determine 
>whether or not the frame is iconified?
>
>
>
>frame.isActive()
>frame.isFocused()
>frame.isAlwaysOnTop()
>
>
>Thanks & Regards,
>
>Harshitha Onkar
>
>
>
>From: client-libs-dev <client-libs-dev-retn at openjdk.org> On Behalf Of 
>Jeremy Wood
>Sent: Wednesday, February 15, 2023 10:08 PM
>To:client-libs-dev at openjdk.org
>Subject: Stage Manager Problems
>
>
>
>We’re experiencing problems related JFrames while Stage Manager 
><https://www.computerworld.com/article/3667999/what-is-apple-stage-manager-and-how-is-it-used.html> 
>is active Mac.
>
>
>
>When Stage Manager is active the yellow minimize button on our JFrame’s 
>appears to “minimize” our app. But as far as our Frame is concerned:
>
>1. Frame.getExtendedState() does not indicate we’re in an ICONIFIED 
>state
>
>2. Frame.isShowing() returns true
>
>3. a java.awt.desktop.AppForegroundListener believes our app is in the 
>foreground.
>
>
>
>We want to identify when we’re in this hidden state. Is there any other 
>property we can consult to help identify this state?
>
>
>
>I’m happy to submit an openjdk ticket if needed, but first I wanted to 
>sanity check that I’m not missing something. (I also tried querying 
><https://bugs.openjdk.org/issues/?jql=text%20~%20%22%5C%22Stage%20Manager%5C%22%22> 
>the openJDK bug database, but didn’t see any hits.)
>
>
>
>I tried rummaging around in Mac-specific classes (like 
>CPlatformWindow), but I didn’t see any promising leads. It’s always 
>possible I missed something, though.
>
>
>
>Attached is a small 200-line demo app.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/client-libs-dev/attachments/20230216/78dc7a2c/attachment.htm>


More information about the client-libs-dev mailing list