jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java
changeset 2471 71401ceec494
parent 1962 6c293d33645b
child 2810 fa49c6a06baf
equal deleted inserted replaced
2470:45c5e082f53d 2471:71401ceec494
   840             final int eventMask = (int) (XConstants.ButtonPressMask | XConstants.ButtonReleaseMask
   840             final int eventMask = (int) (XConstants.ButtonPressMask | XConstants.ButtonReleaseMask
   841                 | XConstants.EnterWindowMask | XConstants.LeaveWindowMask | XConstants.PointerMotionMask
   841                 | XConstants.EnterWindowMask | XConstants.LeaveWindowMask | XConstants.PointerMotionMask
   842                 | XConstants.ButtonMotionMask);
   842                 | XConstants.ButtonMotionMask);
   843             final int ownerEvents = 1;
   843             final int ownerEvents = 1;
   844 
   844 
   845             int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
   845 
   846                 getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
   846             //6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs
   847                 XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
   847             //process on Linux
   848                 XConstants.CurrentTime);
   848             //The user must pass the sun.awt.disablegrab property to disable
   849             // Check grab results to be consistent with X server grab
   849             //taking grabs. This prevents hanging of the GUI when a breakpoint
   850             if (ptrGrab != XConstants.GrabSuccess) {
   850             //is hit while a popup window taking the grab is open.
   851                 XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
   851             if (!XToolkit.getSunAwtDisableGrab()) {
   852                 XAwtState.setGrabWindow(null);
   852                 int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(),
   853                 grabLog.fine("    Grab Failure - mouse");
   853                         getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync,
   854                 return false;
   854                         XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None),
   855             }
   855                         XConstants.CurrentTime);
   856 
   856                 // Check grab results to be consistent with X server grab
   857             int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
   857                 if (ptrGrab != XConstants.GrabSuccess) {
   858                 getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
   858                     XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
   859                 XConstants.CurrentTime);
   859                     XAwtState.setGrabWindow(null);
   860             if (keyGrab != XConstants.GrabSuccess) {
   860                     grabLog.fine("    Grab Failure - mouse");
   861                 XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
   861                     return false;
   862                 XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
   862                 }
   863                 XAwtState.setGrabWindow(null);
   863 
   864                 grabLog.fine("    Grab Failure - keyboard");
   864                 int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(),
   865                 return false;
   865                         getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync,
       
   866                         XConstants.CurrentTime);
       
   867                 if (keyGrab != XConstants.GrabSuccess) {
       
   868                     XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
       
   869                     XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
       
   870                     XAwtState.setGrabWindow(null);
       
   871                     grabLog.fine("    Grab Failure - keyboard");
       
   872                     return false;
       
   873                 }
   866             }
   874             }
   867             if (prevGrabWindow != null) {
   875             if (prevGrabWindow != null) {
   868                 prevGrabWindow.ungrabInputImpl();
   876                 prevGrabWindow.ungrabInputImpl();
   869             }
   877             }
   870             XAwtState.setGrabWindow(this);
   878             XAwtState.setGrabWindow(this);
   880         try {
   888         try {
   881             XBaseWindow grabWindow = XAwtState.getGrabWindow();
   889             XBaseWindow grabWindow = XAwtState.getGrabWindow();
   882             grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow});
   890             grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow});
   883             if (grabWindow != null) {
   891             if (grabWindow != null) {
   884                 grabWindow.ungrabInputImpl();
   892                 grabWindow.ungrabInputImpl();
   885                 XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
   893                 if (!XToolkit.getSunAwtDisableGrab()) {
   886                 XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
   894                     XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime);
       
   895                     XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime);
       
   896                 }
   887                 XAwtState.setGrabWindow(null);
   897                 XAwtState.setGrabWindow(null);
   888                 // we need to call XFlush() here to force ungrab
   898                 // we need to call XFlush() here to force ungrab
   889                 // see 6384219 for details
   899                 // see 6384219 for details
   890                 XlibWrapper.XFlush(XToolkit.getDisplay());
   900                 XlibWrapper.XFlush(XToolkit.getDisplay());
   891             }
   901             }