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) {
|