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

Print this page

        

@@ -143,10 +143,20 @@
     // handleWindowFocusEvent is called for all applets, when the browser
     // becomes active/inactive. This event should be filtered out for
     // non-focused applet. This method can be called from different threads.
     public void handleWindowFocusEvent(boolean parentWindowActive) {
         this.parentWindowActive = parentWindowActive;
+        // If several applets are running in different browser's windows, it is necessary to
+        // detect the switching between the parent windows and update focusedWindow accordingly.
+        synchronized (classLock) {
+            if (parentWindowActive && focusedWindow != this &&
+                (focusedWindow == null || (focusedWindow != null && !focusedWindow.isParentWindowActive()))) {
+                // It looks like we have switched to another browser window, let's set focus to
+                // the first applet in this window.
+                focusedWindow = this;
+            }
+        }
         // ignore focus "lost" native request as it may mistakenly
         // deactivate active window (see 8001161)
         if (focusedWindow == this && parentWindowActive) {
             responder.handleWindowFocusEvent(parentWindowActive, null);
         }