src/windows/classes/sun/awt/windows/WToolkit.java

Print this page

        

@@ -35,10 +35,11 @@
 import java.awt.TrayIcon;
 import java.beans.PropertyChangeListener;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import sun.awt.AWTAutoShutdown;
+import sun.awt.LightweightFrame;
 import sun.awt.SunToolkit;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.Win32GraphicsEnvironment;
 import sun.java2d.d3d.D3DRenderQueue;
 import sun.java2d.opengl.OGLRenderQueue;

@@ -396,10 +397,16 @@
         FramePeer peer = new WFramePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    public FramePeer createLightweightFrame(LightweightFrame target) {
+        FramePeer peer = new WLightweightFramePeer(target);
+        targetCreatedPeer(target, peer);
+        return peer;
+    }
+
     public CanvasPeer createCanvas(Canvas target) {
         CanvasPeer peer = new WCanvasPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }

@@ -976,19 +983,33 @@
         return !Win32GraphicsEnvironment.isDWMCompositionEnabled();
     }
 
     @SuppressWarnings("deprecation")
     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) {
             ((WWindowPeer)w.getPeer()).grab();
         }
     }
 
     @SuppressWarnings("deprecation")
     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) {
-           ((WWindowPeer)w.getPeer()).ungrab();
+           ((WWindowPeer)w.getPeer()).ungrab(false);
         }
     }
 
     public native boolean syncNativeQueue(final long timeout);
     public boolean isDesktopSupported() {