src/macosx/classes/sun/lwawt/LWToolkit.java

Print this page

        

@@ -216,10 +216,27 @@
         targetCreatedPeer(target, peer);
         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) {
         PlatformComponent platformComponent = createPlatformComponent();
         PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.SIMPLEWINDOW);
         return createDelegatedPeer(target, platformComponent, platformWindow, LWWindowPeer.PeerType.SIMPLEWINDOW);

@@ -500,10 +517,12 @@
      */
     protected abstract PlatformWindow createPlatformWindow(LWWindowPeer.PeerType peerType);
 
     protected abstract PlatformComponent createPlatformComponent();
 
+    protected abstract PlatformComponent createLwPlatformComponent();    
+
     protected abstract FileDialogPeer createFileDialogPeer(FileDialog target);
 
     // ---- UTILITY METHODS ---- //
 
     /*

@@ -529,17 +548,31 @@
         postEvent(targetToAppContext(event.getSource()), event);
     }
 
     @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();
         }
     }
 
     @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);
         }
     }
 }