Review request for 7132809: [macosx] MAXIMIZED_BOTH set before setVisible(true) hides Frame (original) (raw)
Anthony Petrov anthony.petrov at oracle.com
Mon Jan 30 06:42:59 PST 2012
- Previous message: Review request for 7132809: [macosx] MAXIMIZED_BOTH set before setVisible(true) hides Frame
- Next message: Review request for 7132809: [macosx] MAXIMIZED_BOTH set before setVisible(true) hides Frame
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 01/30/12 18:41, Artem Ananiev wrote:
A minor comment: can we use peer.getState() instead of (instanceof check + target.getExtendedState()) in CPlatformWindow.setVisible()?
The LWWindowPeer.getState() returns the LWWindowPeer.windowState field that gets updated only from native notifications (notifyIconify()/notifyZoom()). While the window is hidden, the state isn't changed, and as such the notifications aren't sent which makes the windowState field value stale. I'm not sure about it. What I see is that LWWindowPeer.setState() is called from Frame: FramePeer peer = (FramePeer)this.peer; if (peer != null) { peer.setState(state); }
LWWindowPeer.setState() simply delegates to CPlatformWindow.setWindowState(). If the window is visible, this causes -zoom/-miniaturize native calls, and hence the notifications that results in LWWindowPeer.notifyZoom/notifyIconify() which finally update the LWWindowPeer.windowState.
However, if the window is hidden, the CPlatformWindow.setWindowState() is basically a no-op.
-- best regards, Anthony
At the same time, I don't see where LWWindowPeer.setState() is called from CPlatformWindow.
Thanks, Artem
As soon as the CPlatformWindow.setVisible(true) is called it needs to read the real current state of the frame, and since the peer's cached value is wrong, we read the state from the target.
-- best regards, Anthony
Thanks, Artem On 1/26/2012 7:41 PM, Anthony Petrov wrote: Hello, Please review a fix for http://bugs.sun.com/viewbug.do?bugid=7132809 at: http://cr.openjdk.java.net/~anthony/x-11-MaximizedBoth-7132809.0/ We shouldn't apply the extended state when a window is hidden. With this fix the CPlatformWindow.setVisible() re-applies the state when the window gets shown. -- best regards, Anthony
- Previous message: Review request for 7132809: [macosx] MAXIMIZED_BOTH set before setVisible(true) hides Frame
- Next message: Review request for 7132809: [macosx] MAXIMIZED_BOTH set before setVisible(true) hides Frame
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]