--- old/src/macosx/classes/sun/lwawt/LWWindowPeer.java 2013-02-13 16:48:36.000000000 +0400 +++ new/src/macosx/classes/sun/lwawt/LWWindowPeer.java 2013-02-13 16:48:36.000000000 +0400 @@ -48,7 +48,8 @@ FRAME, DIALOG, EMBEDDED_FRAME, - VIEW_EMBEDDED_FRAME + VIEW_EMBEDDED_FRAME, + LW_FRAME } private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWWindowPeer"); @@ -1090,7 +1091,7 @@ return platformWindow.requestWindowFocus(); } - private boolean focusAllowedFor() { + protected boolean focusAllowedFor() { Window window = getTarget(); // TODO: check if modal blocked return window.isVisible() && window.isEnabled() && isFocusableWindow(); @@ -1112,11 +1113,16 @@ Window window = getTarget(); return !(window instanceof Dialog || window instanceof Frame); } + + @Override + public void emulateActivation(boolean activate) { + changeFocusedWindow(activate, null); + } /* * Changes focused window on java level. */ - private void changeFocusedWindow(boolean becomesFocused, Window opposite) { + protected void changeFocusedWindow(boolean becomesFocused, Window opposite) { if (focusLog.isLoggable(PlatformLogger.FINE)) { focusLog.fine((becomesFocused?"gaining":"loosing") + " focus window: " + this); } @@ -1196,13 +1202,23 @@ public long getLayerPtr() { return getPlatformWindow().getLayerPtr(); } + + @Override + public void grabFocus() { + grab(); + } + @Override + public void ungrabFocus(boolean postEvent) { + ungrab(postEvent); + } + void grab() { if (grabbingWindow != null && !isGrabbing()) { grabbingWindow.ungrab(); } grabbingWindow = this; - } + } final void ungrab(boolean doPost) { if (isGrabbing()) {