提交 f410e946 编写于 作者: A anthony

6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs process on Linux

Summary: Added the system property sun.awt.disablegrab
Reviewed-by: art, dcherepanov
上级 d199484c
...@@ -842,27 +842,35 @@ public class XBaseWindow { ...@@ -842,27 +842,35 @@ public class XBaseWindow {
| XConstants.ButtonMotionMask); | XConstants.ButtonMotionMask);
final int ownerEvents = 1; final int ownerEvents = 1;
int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
XConstants.CurrentTime);
// Check grab results to be consistent with X server grab
if (ptrGrab != XConstants.GrabSuccess) {
XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
XAwtState.setGrabWindow(null);
grabLog.fine(" Grab Failure - mouse");
return false;
}
int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(), //6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs
getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync, //process on Linux
XConstants.CurrentTime); //The user must pass the sun.awt.disablegrab property to disable
if (keyGrab != XConstants.GrabSuccess) { //taking grabs. This prevents hanging of the GUI when a breakpoint
XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); //is hit while a popup window taking the grab is open.
XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); if (!XToolkit.getSunAwtDisableGrab()) {
XAwtState.setGrabWindow(null); int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
grabLog.fine(" Grab Failure - keyboard"); getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
return false; XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
XConstants.CurrentTime);
// Check grab results to be consistent with X server grab
if (ptrGrab != XConstants.GrabSuccess) {
XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
XAwtState.setGrabWindow(null);
grabLog.fine(" Grab Failure - mouse");
return false;
}
int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
XConstants.CurrentTime);
if (keyGrab != XConstants.GrabSuccess) {
XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
XAwtState.setGrabWindow(null);
grabLog.fine(" Grab Failure - keyboard");
return false;
}
} }
if (prevGrabWindow != null) { if (prevGrabWindow != null) {
prevGrabWindow.ungrabInputImpl(); prevGrabWindow.ungrabInputImpl();
...@@ -882,8 +890,10 @@ public class XBaseWindow { ...@@ -882,8 +890,10 @@ public class XBaseWindow {
grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow}); grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow});
if (grabWindow != null) { if (grabWindow != null) {
grabWindow.ungrabInputImpl(); grabWindow.ungrabInputImpl();
XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); if (!XToolkit.getSunAwtDisableGrab()) {
XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
}
XAwtState.setGrabWindow(null); XAwtState.setGrabWindow(null);
// we need to call XFlush() here to force ungrab // we need to call XFlush() here to force ungrab
// see 6384219 for details // see 6384219 for details
......
...@@ -54,6 +54,7 @@ import sun.awt.*; ...@@ -54,6 +54,7 @@ import sun.awt.*;
import sun.font.FontManager; import sun.font.FontManager;
import sun.misc.PerformanceLogger; import sun.misc.PerformanceLogger;
import sun.print.PrintJob2D; import sun.print.PrintJob2D;
import sun.security.action.GetBooleanAction;
public final class XToolkit extends UNIXToolkit implements Runnable { public final class XToolkit extends UNIXToolkit implements Runnable {
private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit"); private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit");
...@@ -2305,4 +2306,12 @@ public final class XToolkit extends UNIXToolkit implements Runnable { ...@@ -2305,4 +2306,12 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
} }
return ((X11GraphicsConfig)gc).isTranslucencyCapable(); return ((X11GraphicsConfig)gc).isTranslucencyCapable();
} }
/**
* Returns the value of "sun.awt.disablegrab" property. Default
* value is {@code false}.
*/
public static boolean getSunAwtDisableGrab() {
return AccessController.doPrivileged(new GetBooleanAction("sun.awt.disablegrab"));
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册