src/solaris/classes/sun/awt/X11/XBaseWindow.java

Print this page




 977     }
 978     public void handleKeyRelease(XEvent xev) {
 979     }
 980     public void handleExposeEvent(XEvent xev) {
 981     }
 982     /**
 983      * Activate automatic grab on first ButtonPress,
 984      * deactivate on full mouse release
 985      */
 986     public void handleButtonPressRelease(XEvent xev) {
 987         XButtonEvent xbe = xev.get_xbutton();
 988         /*
 989          * Ignore the buttons above 20 due to the bit limit for
 990          * InputEvent.BUTTON_DOWN_MASK.
 991          * One more bit is reserved for FIRST_HIGH_BIT.
 992          */
 993         if (xbe.get_button() > SunToolkit.MAX_BUTTONS_SUPPORTED) {
 994             return;
 995         }
 996         int buttonState = 0;
 997         final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
 998         for (int i = 0; i<buttonsNumber; i++){
 999             buttonState |= (xbe.get_state() & XConstants.buttonsMask[i]);
1000         }
1001         switch (xev.get_type()) {
1002         case XConstants.ButtonPress:
1003             if (buttonState == 0) {
1004                 XWindowPeer parent = getToplevelXWindow();
1005                 // See 6385277, 6981400.
1006                 if (parent != null && parent.isFocusableWindow()) {
1007                     // A click in a client area drops the actual focused window retaining.
1008                     parent.setActualFocusedWindow(null);
1009                     parent.requestWindowFocus(xbe.get_time(), true);
1010                 }
1011                 XAwtState.setAutoGrabWindow(this);
1012             }
1013             break;
1014         case XConstants.ButtonRelease:
1015             if (isFullRelease(buttonState, xbe.get_button())) {
1016                 XAwtState.setAutoGrabWindow(null);
1017             }
1018             break;
1019         }
1020     }
1021     public void handleMotionNotify(XEvent xev) {
1022     }
1023     public void handleXCrossingEvent(XEvent xev) {
1024     }
1025     public void handleConfigureNotifyEvent(XEvent xev) {
1026         XConfigureEvent xe = xev.get_xconfigure();
1027         insLog.finer("Configure, {0}", xe);
1028         x = xe.get_x();
1029         y = xe.get_y();
1030         width = xe.get_width();
1031         height = xe.get_height();
1032     }
1033     /**
1034      * Checks ButtonRelease released all Mouse buttons
1035      */
1036     static boolean isFullRelease(int buttonState, int button) {
1037         final int buttonsNumber = ((SunToolkit)(Toolkit.getDefaultToolkit())).getNumberOfButtons();
1038 
1039         if (button < 0 || button > buttonsNumber) {
1040             return buttonState == 0;
1041         } else {
1042             return buttonState == XConstants.buttonsMask[button - 1];
1043         }
1044     }
1045 
1046     static boolean isGrabbedEvent(XEvent ev, XBaseWindow target) {
1047         switch (ev.get_type()) {
1048           case XConstants.ButtonPress:
1049           case XConstants.ButtonRelease:
1050           case XConstants.MotionNotify:
1051           case XConstants.KeyPress:
1052           case XConstants.KeyRelease:
1053               return true;
1054           case XConstants.LeaveNotify:
1055           case XConstants.EnterNotify:
1056               // We shouldn't dispatch this events to the grabbed components (see 6317481)
1057               // But this logic is important if the grabbed component is top-level (see realSync)
1058               return (target instanceof XWindowPeer);
1059           default:
1060               return false;
1061         }
1062     }




 977     }
 978     public void handleKeyRelease(XEvent xev) {
 979     }
 980     public void handleExposeEvent(XEvent xev) {
 981     }
 982     /**
 983      * Activate automatic grab on first ButtonPress,
 984      * deactivate on full mouse release
 985      */
 986     public void handleButtonPressRelease(XEvent xev) {
 987         XButtonEvent xbe = xev.get_xbutton();
 988         /*
 989          * Ignore the buttons above 20 due to the bit limit for
 990          * InputEvent.BUTTON_DOWN_MASK.
 991          * One more bit is reserved for FIRST_HIGH_BIT.
 992          */
 993         if (xbe.get_button() > SunToolkit.MAX_BUTTONS_SUPPORTED) {
 994             return;
 995         }
 996         int buttonState = 0;
 997         buttonState = xbe.get_state() & XConstants.ALL_BUTTONS_MASK;



 998         switch (xev.get_type()) {
 999         case XConstants.ButtonPress:
1000             if (buttonState == 0) {
1001                 XWindowPeer parent = getToplevelXWindow();
1002                 // See 6385277, 6981400.
1003                 if (parent != null && parent.isFocusableWindow()) {
1004                     // A click in a client area drops the actual focused window retaining.
1005                     parent.setActualFocusedWindow(null);
1006                     parent.requestWindowFocus(xbe.get_time(), true);
1007                 }
1008                 XAwtState.setAutoGrabWindow(this);
1009             }
1010             break;
1011         case XConstants.ButtonRelease:
1012             if (isFullRelease(buttonState, xbe.get_button())) {
1013                 XAwtState.setAutoGrabWindow(null);
1014             }
1015             break;
1016         }
1017     }
1018     public void handleMotionNotify(XEvent xev) {
1019     }
1020     public void handleXCrossingEvent(XEvent xev) {
1021     }
1022     public void handleConfigureNotifyEvent(XEvent xev) {
1023         XConfigureEvent xe = xev.get_xconfigure();
1024         insLog.finer("Configure, {0}", xe);
1025         x = xe.get_x();
1026         y = xe.get_y();
1027         width = xe.get_width();
1028         height = xe.get_height();
1029     }
1030     /**
1031      * Checks ButtonRelease released all Mouse buttons
1032      */
1033     static boolean isFullRelease(int buttonState, int button) {
1034         final int buttonsNumber = XToolkit.getNumberOfButtonsForMask();
1035 
1036         if (button < 0 || button > buttonsNumber) {
1037             return buttonState == 0;
1038         } else {
1039             return buttonState == XlibUtil.getButtonMask(button);
1040         }
1041     }
1042 
1043     static boolean isGrabbedEvent(XEvent ev, XBaseWindow target) {
1044         switch (ev.get_type()) {
1045           case XConstants.ButtonPress:
1046           case XConstants.ButtonRelease:
1047           case XConstants.MotionNotify:
1048           case XConstants.KeyPress:
1049           case XConstants.KeyRelease:
1050               return true;
1051           case XConstants.LeaveNotify:
1052           case XConstants.EnterNotify:
1053               // We shouldn't dispatch this events to the grabbed components (see 6317481)
1054               // But this logic is important if the grabbed component is top-level (see realSync)
1055               return (target instanceof XWindowPeer);
1056           default:
1057               return false;
1058         }
1059     }