提交 8f9460fa 编写于 作者: L leonidr

7124376: [macosx] Modal dialog lost focus

Reviewed-by: anthony
上级 4120c120
...@@ -409,6 +409,8 @@ public class LWWindowPeer ...@@ -409,6 +409,8 @@ public class LWWindowPeer
synchronized (getPeerTreeLock()) { synchronized (getPeerTreeLock()) {
this.blocker = blocked ? (LWWindowPeer)blocker.getPeer() : null; this.blocker = blocked ? (LWWindowPeer)blocker.getPeer() : null;
} }
platformWindow.setModalBlocked(blocked);
} }
@Override @Override
......
...@@ -108,6 +108,8 @@ public interface PlatformWindow { ...@@ -108,6 +108,8 @@ public interface PlatformWindow {
public void flip(int x1, int y1, int x2, int y2, public void flip(int x1, int y1, int x2, int y2,
BufferCapabilities.FlipContents flipAction); BufferCapabilities.FlipContents flipAction);
public void setModalBlocked(boolean blocked);
public void toFront(); public void toFront();
public void toBack(); public void toBack();
......
...@@ -205,4 +205,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { ...@@ -205,4 +205,7 @@ public class CPlatformEmbeddedFrame implements PlatformWindow {
@Override @Override
public void setWindowState(int windowState) {} public void setWindowState(int windowState) {}
@Override
public void setModalBlocked(boolean blocked) {}
} }
...@@ -61,6 +61,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo ...@@ -61,6 +61,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage); private static native void nativeSetNSWindowMinimizedIcon(long nsWindowPtr, long nsImage);
private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename); private static native void nativeSetNSWindowRepresentedFilename(long nsWindowPtr, String representedFilename);
private static native void nativeSetNSWindowSecurityWarningPositioning(long nsWindowPtr, double x, double y, float biasX, float biasY); private static native void nativeSetNSWindowSecurityWarningPositioning(long nsWindowPtr, double x, double y, float biasX, float biasY);
private static native void nativeSetEnabled(long nsWindowPtr, boolean isEnabled);
private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr); private static native void nativeSynthesizeMouseEnteredExitedEvents(long nsWindowPtr);
private static native int nativeGetScreenNSWindowIsOn_AppKitThread(long nsWindowPtr); private static native int nativeGetScreenNSWindowIsOn_AppKitThread(long nsWindowPtr);
...@@ -800,6 +801,15 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo ...@@ -800,6 +801,15 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
// value when the native notification comes to us // value when the native notification comes to us
} }
@Override
public void setModalBlocked(boolean blocked) {
if (target.getModalExclusionType() == Dialog.ModalExclusionType.APPLICATION_EXCLUDE) {
return;
}
nativeSetEnabled(getNSWindowPtr(), !blocked);
}
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
// UTILITY METHODS // UTILITY METHODS
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
......
...@@ -302,6 +302,15 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -302,6 +302,15 @@ AWT_ASSERT_APPKIT_THREAD;
*/ */
-(void) deliverJavaMouseEvent: (NSEvent *) event { -(void) deliverJavaMouseEvent: (NSEvent *) event {
BOOL isEnabled = YES;
NSWindow* window = [self window];
if ([window isKindOfClass: [AWTWindow class]]) {
isEnabled = [(AWTWindow*)window isEnabled];
}
if (!isEnabled) {
return;
}
NSEventType type = [event type]; NSEventType type = [event type];
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
NSSize javaMinSize; NSSize javaMinSize;
NSSize javaMaxSize; NSSize javaMaxSize;
jint styleBits; jint styleBits;
BOOL isEnabled;
} }
@property (nonatomic, retain) JNFWeakJObjectWrapper *javaPlatformWindow; @property (nonatomic, retain) JNFWeakJObjectWrapper *javaPlatformWindow;
...@@ -49,6 +50,7 @@ ...@@ -49,6 +50,7 @@
@property (nonatomic) NSSize javaMinSize; @property (nonatomic) NSSize javaMinSize;
@property (nonatomic) NSSize javaMaxSize; @property (nonatomic) NSSize javaMaxSize;
@property (nonatomic) jint styleBits; @property (nonatomic) jint styleBits;
@property (nonatomic) BOOL isEnabled;
- (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)javaPlatformWindow - (id) initWithPlatformWindow:(JNFWeakJObjectWrapper *)javaPlatformWindow
styleBits:(jint)styleBits styleBits:(jint)styleBits
......
...@@ -58,6 +58,7 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow"); ...@@ -58,6 +58,7 @@ static JNF_CLASS_CACHE(jc_CPlatformWindow, "sun/lwawt/macosx/CPlatformWindow");
@synthesize javaMinSize; @synthesize javaMinSize;
@synthesize javaMaxSize; @synthesize javaMaxSize;
@synthesize styleBits; @synthesize styleBits;
@synthesize isEnabled;
- (void) updateMinMaxSize:(BOOL)resizable { - (void) updateMinMaxSize:(BOOL)resizable {
if (resizable) { if (resizable) {
...@@ -157,6 +158,7 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -157,6 +158,7 @@ AWT_ASSERT_APPKIT_THREAD;
if (self == nil) return nil; // no hope if (self == nil) return nil; // no hope
self.isEnabled = YES;
self.javaPlatformWindow = platformWindow; self.javaPlatformWindow = platformWindow;
self.styleBits = bits; self.styleBits = bits;
[self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
...@@ -239,16 +241,15 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -239,16 +241,15 @@ AWT_ASSERT_APPKIT_THREAD;
[super dealloc]; [super dealloc];
} }
// NSWindow overrides // NSWindow overrides
- (BOOL) canBecomeKeyWindow { - (BOOL) canBecomeKeyWindow {
AWT_ASSERT_APPKIT_THREAD; AWT_ASSERT_APPKIT_THREAD;
return IS(self.styleBits, SHOULD_BECOME_KEY); return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_KEY);
} }
- (BOOL) canBecomeMainWindow { - (BOOL) canBecomeMainWindow {
AWT_ASSERT_APPKIT_THREAD; AWT_ASSERT_APPKIT_THREAD;
return IS(self.styleBits, SHOULD_BECOME_MAIN); return self.isEnabled && IS(self.styleBits, SHOULD_BECOME_MAIN);
} }
- (BOOL) worksWhenModal { - (BOOL) worksWhenModal {
...@@ -562,6 +563,27 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -562,6 +563,27 @@ AWT_ASSERT_APPKIT_THREAD;
size->height = MAX(size->height, minHeight); size->height = MAX(size->height, minHeight);
} }
- (void) setEnabled: (BOOL)flag {
self.isEnabled = flag;
if (IS(self.styleBits, CLOSEABLE)) {
[[self standardWindowButton:NSWindowCloseButton] setEnabled: flag];
}
if (IS(self.styleBits, MINIMIZABLE)) {
[[self standardWindowButton:NSWindowMiniaturizeButton] setEnabled: flag];
}
if (IS(self.styleBits, ZOOMABLE)) {
[[self standardWindowButton:NSWindowZoomButton] setEnabled: flag];
}
if (IS(self.styleBits, RESIZABLE)) {
[self updateMinMaxSize:flag];
[self setShowsResizeIndicator:flag];
}
}
@end // AWTWindow @end // AWTWindow
...@@ -1056,3 +1078,17 @@ JNF_COCOA_EXIT(env); ...@@ -1056,3 +1078,17 @@ JNF_COCOA_EXIT(env);
return underMouse; return underMouse;
} }
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CPlatformWindow_nativeSetEnabled
(JNIEnv *env, jclass clazz, jlong windowPtr, jboolean isEnabled)
{
JNF_COCOA_ENTER(env);
AWTWindow *window = OBJC(windowPtr);
[JNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
[window setEnabled: isEnabled];
}];
JNF_COCOA_EXIT(env);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册