< prev index next >

src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java

Print this page

        

*** 23,57 **** * questions. */ package sun.lwawt.macosx; ! import com.apple.eawt.FullScreenAdapter; ! import com.apple.eawt.FullScreenUtilities; ! import com.apple.eawt.event.FullScreenEvent; ! import java.awt.*; import java.awt.Dialog.ModalityType; ! import java.awt.event.*; ! import java.beans.*; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; ! import javax.swing.*; ! import sun.awt.*; import sun.awt.AWTAccessor.ComponentAccessor; import sun.awt.AWTAccessor.WindowAccessor; import sun.java2d.SurfaceData; import sun.java2d.opengl.CGLSurfaceData; ! import sun.lwawt.*; import sun.util.logging.PlatformLogger; - import com.apple.laf.*; import com.apple.laf.ClientPropertyApplicator.Property; import com.sun.awt.AWTUtilities; import sun.lwawt.LWWindowPeer.PeerType; public class CPlatformWindow extends CFRetainedResource implements PlatformWindow { --- 23,74 ---- * questions. */ package sun.lwawt.macosx; ! import java.awt.Color; ! import java.awt.Component; ! import java.awt.DefaultKeyboardFocusManager; ! import java.awt.Dialog; import java.awt.Dialog.ModalityType; ! import java.awt.Font; ! import java.awt.FontMetrics; ! import java.awt.Frame; ! import java.awt.GraphicsDevice; ! import java.awt.Insets; ! import java.awt.MenuBar; ! import java.awt.Point; ! import java.awt.Rectangle; ! import java.awt.Toolkit; ! import java.awt.Window; ! import java.awt.event.FocusEvent; ! import java.awt.event.WindowEvent; ! import java.beans.PropertyChangeEvent; ! import java.beans.PropertyChangeListener; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; + import java.util.Comparator; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicReference; ! import javax.swing.JRootPane; ! import javax.swing.RootPaneContainer; ! import javax.swing.SwingUtilities; ! import com.apple.laf.ClientPropertyApplicator; ! import sun.awt.AWTAccessor; import sun.awt.AWTAccessor.ComponentAccessor; import sun.awt.AWTAccessor.WindowAccessor; import sun.java2d.SurfaceData; import sun.java2d.opengl.CGLSurfaceData; ! import sun.lwawt.LWToolkit; ! import sun.lwawt.LWWindowPeer; ! import sun.lwawt.PlatformWindow; import sun.util.logging.PlatformLogger; import com.apple.laf.ClientPropertyApplicator.Property; import com.sun.awt.AWTUtilities; import sun.lwawt.LWWindowPeer.PeerType; public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
*** 222,231 **** --- 239,262 ---- final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); if (root == null || acc.getPeer(root) == null) return null; return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow(); } }; + private final Comparator<Window> siblingsComparator = (w1, w2) -> { + if (w1 == w2) { + return 0; + } + ComponentAccessor componentAccessor = AWTAccessor.getComponentAccessor(); + Object p1 = componentAccessor.getPeer(w1); + Object p2 = componentAccessor.getPeer(w2); + if (p1 instanceof LWWindowPeer && p2 instanceof LWWindowPeer) { + return Long.compare( + ((CPlatformWindow) (((LWWindowPeer) p1).getPlatformWindow())).lastBecomeMainTime, + ((CPlatformWindow) (((LWWindowPeer) p2).getPlatformWindow())).lastBecomeMainTime); + } + return 0; + }; // Bounds of the native widget but in the Java coordinate system. // In order to keep it up-to-date we will update them on // 1) setting native bounds via nativeSetBounds() call // 2) getting notification from the native level via deliverMoveResizeEvent()
*** 243,252 **** --- 274,284 ---- protected CPlatformWindow owner; protected boolean visible = false; // visibility status from native perspective private boolean undecorated; // initialized in getInitialStyleBits() private Rectangle normalBounds = null; // not-null only for undecorated maximized windows private CPlatformResponder responder; + private long lastBecomeMainTime; // this is necessary to preserve right siblings order public CPlatformWindow() { super(0, true); }
*** 1170,1181 **** private void orderAboveSiblingsImpl(Window[] windows) { ArrayList<Window> childWindows = new ArrayList<Window>(); final ComponentAccessor componentAccessor = AWTAccessor.getComponentAccessor(); final WindowAccessor windowAccessor = AWTAccessor.getWindowAccessor(); ! // Go through the list of windows and perform ordering. for (Window w : windows) { boolean iconified = false; final Object p = componentAccessor.getPeer(w); if (p instanceof LWWindowPeer) { CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow(); --- 1202,1214 ---- private void orderAboveSiblingsImpl(Window[] windows) { ArrayList<Window> childWindows = new ArrayList<Window>(); final ComponentAccessor componentAccessor = AWTAccessor.getComponentAccessor(); final WindowAccessor windowAccessor = AWTAccessor.getWindowAccessor(); ! Arrays.sort(windows, siblingsComparator); // Go through the list of windows and perform ordering. + CPlatformWindow pwUnder = null; for (Window w : windows) { boolean iconified = false; final Object p = componentAccessor.getPeer(w); if (p instanceof LWWindowPeer) { CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
*** 1185,1199 **** // the window should be ordered above its siblings; otherwise the window is just ordered // above its nearest parent. if (pw.isOneOfOwnersOrSelf(this)) { pw.execute(CWrapper.NSWindow::orderFront); } else { ! pw.owner.execute(ownerPtr -> { pw.execute(ptr -> { ! CWrapper.NSWindow.orderWindow(ptr, CWrapper.NSWindow.NSWindowAbove, ownerPtr); }); }); } pw.applyWindowLevel(w); } } // Retrieve the child windows for each window from the list except iconified ones --- 1218,1236 ---- // the window should be ordered above its siblings; otherwise the window is just ordered // above its nearest parent. if (pw.isOneOfOwnersOrSelf(this)) { pw.execute(CWrapper.NSWindow::orderFront); } else { ! if (pwUnder == null) { ! pwUnder = pw.owner; ! } ! pwUnder.execute(underPtr -> { pw.execute(ptr -> { ! CWrapper.NSWindow.orderWindow(ptr, CWrapper.NSWindow.NSWindowAbove, underPtr); }); }); + pwUnder = pw; } pw.applyWindowLevel(w); } } // Retrieve the child windows for each window from the list except iconified ones
*** 1226,1235 **** --- 1263,1273 ---- private void windowWillMiniaturize() { isIconifyAnimationActive = true; } private void windowDidBecomeMain() { + lastBecomeMainTime = System.currentTimeMillis(); if (checkBlockingAndOrder()) return; // If it's not blocked, make sure it's above its siblings orderAboveSiblings(); }
< prev index next >