src/java.desktop/unix/classes/sun/awt/X11/XWindow.java

Print this page




  38 
  39 import sun.awt.*;
  40 
  41 import sun.awt.image.PixelConverter;
  42 
  43 import sun.java2d.SunGraphics2D;
  44 import sun.java2d.SurfaceData;
  45 
  46 class XWindow extends XBaseWindow implements X11ComponentPeer {
  47     private static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWindow");
  48     private static PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWindow");
  49     private static PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XWindow");
  50     private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XWindow");
  51     private static PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XWindow");
  52   /* If a motion comes in while a multi-click is pending,
  53    * allow a smudge factor so that moving the mouse by a small
  54    * amount does not wipe out the multi-click state variables.
  55    */
  56     private final static int AWT_MULTICLICK_SMUDGE = 4;
  57     // ButtonXXX events stuff
  58     static int rbutton = 0;
  59     static int lastX = 0, lastY = 0;
  60     static long lastTime = 0;
  61     static long lastButton = 0;
  62     static WeakReference<XWindow> lastWindowRef = null;
  63     static int clickCount = 0;
  64 
  65     // used to check if we need to re-create surfaceData.
  66     int oldWidth = -1;
  67     int oldHeight = -1;
  68 
  69     protected PropMwmHints mwm_hints;
  70     protected static XAtom wm_protocols;
  71     protected static XAtom wm_delete_window;
  72     protected static XAtom wm_take_focus;
  73 
  74     private boolean stateChanged; // Indicates whether the value on savedState is valid
  75     private int savedState; // Holds last known state of the top-level window
  76 
  77     XWindowAttributesData winAttr;
  78 


 615         int mods = stroke.getModifiers();
 616         int res = 0;
 617         if ((mods & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
 618             res |= XConstants.ShiftMask;
 619         }
 620         if ((mods & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
 621             res |= XConstants.ControlMask;
 622         }
 623         if ((mods & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
 624             res |= XToolkit.altMask;
 625         }
 626         if ((mods & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
 627             res |= XToolkit.metaMask;
 628         }
 629         if ((mods & (InputEvent.ALT_GRAPH_DOWN_MASK | InputEvent.ALT_GRAPH_MASK)) != 0) {
 630             res |= XToolkit.modeSwitchMask;
 631         }
 632         return res;
 633     }
 634 
 635     /**
 636      * Returns true if this event is disabled and shouldn't be passed to Java.
 637      * Default implementation returns false for all events.
 638      */
 639     static int getRightButtonNumber() {
 640         if (rbutton == 0) { // not initialized yet
 641             XToolkit.awtLock();
 642             try {
 643                 rbutton = XlibWrapper.XGetPointerMapping(XToolkit.getDisplay(), XlibWrapper.ibuffer, 3);
 644             }
 645             finally {
 646                 XToolkit.awtUnlock();
 647             }
 648         }
 649         return rbutton;
 650     }
 651 
 652     static int getMouseMovementSmudge() {
 653         //TODO: It's possible to read corresponding settings
 654         return AWT_MULTICLICK_SMUDGE;
 655     }
 656 
 657     public void handleButtonPressRelease(XEvent xev) {
 658         super.handleButtonPressRelease(xev);
 659         XButtonEvent xbe = xev.get_xbutton();
 660         if (isEventDisabled(xev)) {
 661             return;
 662         }
 663         if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
 664             eventLog.fine(xbe.toString());
 665         }
 666         long when;
 667         int modifiers;
 668         boolean popupTrigger = false;
 669         int button=0;
 670         boolean wheel_mouse = false;
 671         int lbutton = xbe.get_button();


 699             if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) {
 700                 eventLog.finest("lastWindow = " + lastWindow + ", lastButton "
 701                 + lastButton + ", lastTime " + lastTime + ", multiClickTime "
 702                 + XToolkit.getMultiClickTime());
 703             }
 704             if (lastWindow == this && lastButton == lbutton && (when - lastTime) < XToolkit.getMultiClickTime()) {
 705                 clickCount++;
 706             } else {
 707                 clickCount = 1;
 708                 lastWindowRef = new WeakReference<>(this);
 709                 lastButton = lbutton;
 710                 lastX = x;
 711                 lastY = y;
 712             }
 713             lastTime = when;
 714 
 715 
 716             /*
 717                Check for popup trigger !!
 718             */
 719             if (lbutton == getRightButtonNumber() || lbutton > 2) {
 720                 popupTrigger = true;
 721             } else {
 722                 popupTrigger = false;
 723             }
 724         }
 725 
 726         button = XConstants.buttons[lbutton - 1];
 727         // 4 and 5 buttons are usually considered assigned to a first wheel
 728         if (lbutton == XConstants.buttons[3] ||
 729             lbutton == XConstants.buttons[4]) {
 730             wheel_mouse = true;
 731         }
 732 
 733         // mapping extra buttons to numbers starting from 4.
 734         if ((button > XConstants.buttons[4]) && (!Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled())){
 735             return;
 736         }
 737 
 738         if (button > XConstants.buttons[4]){
 739             button -= 2;
 740         }
 741         modifiers = getModifiers(xbe.get_state(),button,0, type, wheel_mouse);
 742 
 743         if (!wheel_mouse) {




  38 
  39 import sun.awt.*;
  40 
  41 import sun.awt.image.PixelConverter;
  42 
  43 import sun.java2d.SunGraphics2D;
  44 import sun.java2d.SurfaceData;
  45 
  46 class XWindow extends XBaseWindow implements X11ComponentPeer {
  47     private static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWindow");
  48     private static PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWindow");
  49     private static PlatformLogger eventLog = PlatformLogger.getLogger("sun.awt.X11.event.XWindow");
  50     private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XWindow");
  51     private static PlatformLogger keyEventLog = PlatformLogger.getLogger("sun.awt.X11.kye.XWindow");
  52   /* If a motion comes in while a multi-click is pending,
  53    * allow a smudge factor so that moving the mouse by a small
  54    * amount does not wipe out the multi-click state variables.
  55    */
  56     private final static int AWT_MULTICLICK_SMUDGE = 4;
  57     // ButtonXXX events stuff

  58     static int lastX = 0, lastY = 0;
  59     static long lastTime = 0;
  60     static long lastButton = 0;
  61     static WeakReference<XWindow> lastWindowRef = null;
  62     static int clickCount = 0;
  63 
  64     // used to check if we need to re-create surfaceData.
  65     int oldWidth = -1;
  66     int oldHeight = -1;
  67 
  68     protected PropMwmHints mwm_hints;
  69     protected static XAtom wm_protocols;
  70     protected static XAtom wm_delete_window;
  71     protected static XAtom wm_take_focus;
  72 
  73     private boolean stateChanged; // Indicates whether the value on savedState is valid
  74     private int savedState; // Holds last known state of the top-level window
  75 
  76     XWindowAttributesData winAttr;
  77 


 614         int mods = stroke.getModifiers();
 615         int res = 0;
 616         if ((mods & (InputEvent.SHIFT_DOWN_MASK | InputEvent.SHIFT_MASK)) != 0) {
 617             res |= XConstants.ShiftMask;
 618         }
 619         if ((mods & (InputEvent.CTRL_DOWN_MASK | InputEvent.CTRL_MASK)) != 0) {
 620             res |= XConstants.ControlMask;
 621         }
 622         if ((mods & (InputEvent.ALT_DOWN_MASK | InputEvent.ALT_MASK)) != 0) {
 623             res |= XToolkit.altMask;
 624         }
 625         if ((mods & (InputEvent.META_DOWN_MASK | InputEvent.META_MASK)) != 0) {
 626             res |= XToolkit.metaMask;
 627         }
 628         if ((mods & (InputEvent.ALT_GRAPH_DOWN_MASK | InputEvent.ALT_GRAPH_MASK)) != 0) {
 629             res |= XToolkit.modeSwitchMask;
 630         }
 631         return res;
 632     }
 633 

















 634     static int getMouseMovementSmudge() {
 635         //TODO: It's possible to read corresponding settings
 636         return AWT_MULTICLICK_SMUDGE;
 637     }
 638 
 639     public void handleButtonPressRelease(XEvent xev) {
 640         super.handleButtonPressRelease(xev);
 641         XButtonEvent xbe = xev.get_xbutton();
 642         if (isEventDisabled(xev)) {
 643             return;
 644         }
 645         if (eventLog.isLoggable(PlatformLogger.Level.FINE)) {
 646             eventLog.fine(xbe.toString());
 647         }
 648         long when;
 649         int modifiers;
 650         boolean popupTrigger = false;
 651         int button=0;
 652         boolean wheel_mouse = false;
 653         int lbutton = xbe.get_button();


 681             if (eventLog.isLoggable(PlatformLogger.Level.FINEST)) {
 682                 eventLog.finest("lastWindow = " + lastWindow + ", lastButton "
 683                 + lastButton + ", lastTime " + lastTime + ", multiClickTime "
 684                 + XToolkit.getMultiClickTime());
 685             }
 686             if (lastWindow == this && lastButton == lbutton && (when - lastTime) < XToolkit.getMultiClickTime()) {
 687                 clickCount++;
 688             } else {
 689                 clickCount = 1;
 690                 lastWindowRef = new WeakReference<>(this);
 691                 lastButton = lbutton;
 692                 lastX = x;
 693                 lastY = y;
 694             }
 695             lastTime = when;
 696 
 697 
 698             /*
 699                Check for popup trigger !!
 700             */
 701             popupTrigger = (lbutton == 3);




 702         }
 703 
 704         button = XConstants.buttons[lbutton - 1];
 705         // 4 and 5 buttons are usually considered assigned to a first wheel
 706         if (lbutton == XConstants.buttons[3] ||
 707             lbutton == XConstants.buttons[4]) {
 708             wheel_mouse = true;
 709         }
 710 
 711         // mapping extra buttons to numbers starting from 4.
 712         if ((button > XConstants.buttons[4]) && (!Toolkit.getDefaultToolkit().areExtraMouseButtonsEnabled())){
 713             return;
 714         }
 715 
 716         if (button > XConstants.buttons[4]){
 717             button -= 2;
 718         }
 719         modifiers = getModifiers(xbe.get_state(),button,0, type, wheel_mouse);
 720 
 721         if (!wheel_mouse) {