--- old/src/macosx/classes/sun/lwawt/LWToolkit.java 2013-02-15 13:37:38.000000000 +0400 +++ new/src/macosx/classes/sun/lwawt/LWToolkit.java 2013-02-15 13:37:37.000000000 +0400 @@ -217,6 +217,23 @@ peer.initialize(); return peer; } + + private LWLightweightFramePeer createDelegatedLwPeer(LightweightFrame target, + PlatformComponent platformComponent, + PlatformWindow platformWindow) + { + LWLightweightFramePeer peer = new LWLightweightFramePeer(target, platformComponent, platformWindow); + targetCreatedPeer(target, peer); + peer.initialize(); + return peer; + } + + @Override + public FramePeer createLightweightFrame(LightweightFrame target) { + PlatformComponent platformComponent = createLwPlatformComponent(); + PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.LW_FRAME); + return createDelegatedLwPeer(target, platformComponent, platformWindow); + } @Override public WindowPeer createWindow(Window target) { @@ -501,6 +518,8 @@ protected abstract PlatformWindow createPlatformWindow(LWWindowPeer.PeerType peerType); protected abstract PlatformComponent createPlatformComponent(); + + protected abstract PlatformComponent createLwPlatformComponent(); protected abstract FileDialogPeer createFileDialogPeer(FileDialog target); @@ -531,6 +550,13 @@ @Override public void grab(Window w) { + // When grab/ungrab API is public, + // it should go through Window.grab(), + // not via SunToolkit.grab(Window). + if (w instanceof LightweightFrame) { + ((LightweightFrame)w).grabFocus(); + return; + } if (w.getPeer() != null) { ((LWWindowPeer)w.getPeer()).grab(); } @@ -538,6 +564,13 @@ @Override public void ungrab(Window w) { + // When grab/ungrab API is public, + // it should go through Window.ungrab(boolean), + // not via SunToolkit.ungrab(Window). + if (w instanceof LightweightFrame) { + ((LightweightFrame)w).ungrabFocus(false); + return; + } if (w.getPeer() != null) { ((LWWindowPeer)w.getPeer()).ungrab(false); }