49 import java.awt.peer.WindowPeer;
50 import java.io.UnsupportedEncodingException;
51 import java.security.AccessController;
52 import java.security.PrivilegedAction;
53 import java.util.ArrayList;
54 import java.util.HashSet;
55 import java.util.Iterator;
56 import java.util.Set;
57 import java.util.Vector;
58 import java.util.concurrent.atomic.AtomicBoolean;
59
60 import sun.awt.AWTAccessor;
61 import sun.awt.AWTAccessor.ComponentAccessor;
62 import sun.awt.DisplayChangedListener;
63 import sun.awt.IconInfo;
64 import sun.awt.SunToolkit;
65 import sun.awt.X11GraphicsDevice;
66 import sun.awt.X11GraphicsEnvironment;
67 import sun.java2d.pipe.Region;
68 import sun.util.logging.PlatformLogger;
69
70 class XWindowPeer extends XPanelPeer implements WindowPeer,
71 DisplayChangedListener {
72
73 private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWindowPeer");
74 private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XWindowPeer");
75 private static final PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWindowPeer");
76 private static final PlatformLogger grabLog = PlatformLogger.getLogger("sun.awt.X11.grab.XWindowPeer");
77 private static final PlatformLogger iconLog = PlatformLogger.getLogger("sun.awt.X11.icon.XWindowPeer");
78
79 // should be synchronized on awtLock
80 private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
81
82
83 private boolean cachedFocusableWindow;
84 XWarningWindow warningWindow;
85
86 private boolean alwaysOnTop;
87 private boolean locationByPlatform;
88
2013 if (typeAtom != null) {
2014 XAtomList wtype = new XAtomList();
2015 wtype.add(typeAtom);
2016 protocol.XA_NET_WM_WINDOW_TYPE.
2017 setAtomListProperty(getWindow(), wtype);
2018 } else {
2019 protocol.XA_NET_WM_WINDOW_TYPE.
2020 DeleteProperty(getWindow());
2021 }
2022 }
2023
2024 @Override
2025 public void xSetVisible(boolean visible) {
2026 if (log.isLoggable(PlatformLogger.Level.FINE)) {
2027 log.fine("Setting visible on " + this + " to " + visible);
2028 }
2029 XToolkit.awtLock();
2030 try {
2031 this.visible = visible;
2032 if (visible) {
2033 applyWindowType();
2034 XlibWrapper.XMapRaised(XToolkit.getDisplay(), getWindow());
2035 } else {
2036 XlibWrapper.XUnmapWindow(XToolkit.getDisplay(), getWindow());
2037 }
2038 XlibWrapper.XFlush(XToolkit.getDisplay());
2039 }
2040 finally {
2041 XToolkit.awtUnlock();
2042 }
2043 }
2044
2045 // should be synchronized on awtLock
2046 private int dropTargetCount = 0;
2047
2048 public void addDropTarget() {
2049 XToolkit.awtLock();
2050 try {
2051 if (dropTargetCount == 0) {
2052 long window = getWindow();
|
49 import java.awt.peer.WindowPeer;
50 import java.io.UnsupportedEncodingException;
51 import java.security.AccessController;
52 import java.security.PrivilegedAction;
53 import java.util.ArrayList;
54 import java.util.HashSet;
55 import java.util.Iterator;
56 import java.util.Set;
57 import java.util.Vector;
58 import java.util.concurrent.atomic.AtomicBoolean;
59
60 import sun.awt.AWTAccessor;
61 import sun.awt.AWTAccessor.ComponentAccessor;
62 import sun.awt.DisplayChangedListener;
63 import sun.awt.IconInfo;
64 import sun.awt.SunToolkit;
65 import sun.awt.X11GraphicsDevice;
66 import sun.awt.X11GraphicsEnvironment;
67 import sun.java2d.pipe.Region;
68 import sun.util.logging.PlatformLogger;
69 import sun.font.FontUtilities;
70
71 class XWindowPeer extends XPanelPeer implements WindowPeer,
72 DisplayChangedListener {
73
74 private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWindowPeer");
75 private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.X11.focus.XWindowPeer");
76 private static final PlatformLogger insLog = PlatformLogger.getLogger("sun.awt.X11.insets.XWindowPeer");
77 private static final PlatformLogger grabLog = PlatformLogger.getLogger("sun.awt.X11.grab.XWindowPeer");
78 private static final PlatformLogger iconLog = PlatformLogger.getLogger("sun.awt.X11.icon.XWindowPeer");
79
80 // should be synchronized on awtLock
81 private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
82
83
84 private boolean cachedFocusableWindow;
85 XWarningWindow warningWindow;
86
87 private boolean alwaysOnTop;
88 private boolean locationByPlatform;
89
2014 if (typeAtom != null) {
2015 XAtomList wtype = new XAtomList();
2016 wtype.add(typeAtom);
2017 protocol.XA_NET_WM_WINDOW_TYPE.
2018 setAtomListProperty(getWindow(), wtype);
2019 } else {
2020 protocol.XA_NET_WM_WINDOW_TYPE.
2021 DeleteProperty(getWindow());
2022 }
2023 }
2024
2025 @Override
2026 public void xSetVisible(boolean visible) {
2027 if (log.isLoggable(PlatformLogger.Level.FINE)) {
2028 log.fine("Setting visible on " + this + " to " + visible);
2029 }
2030 XToolkit.awtLock();
2031 try {
2032 this.visible = visible;
2033 if (visible) {
2034 if (FontUtilities.isAIX) {
2035 /* On Motif Window Manager, non-focusable window should not set WM_TAKE_FOCUS */
2036 XAtomList currentWMProtocols = wm_protocols.getAtomListPropertyList(this);
2037 if (isFocusableWindow()) {
2038 if (!currentWMProtocols.contains(wm_take_focus)) {
2039 currentWMProtocols.add(wm_take_focus);
2040 wm_protocols.setAtomListProperty(this, currentWMProtocols);
2041 }
2042 } else {
2043 if (XWM.isMotif()) {
2044 if (currentWMProtocols.contains(wm_take_focus)) {
2045 currentWMProtocols.remove(wm_take_focus);
2046 wm_protocols.setAtomListProperty(this, currentWMProtocols);
2047 }
2048 }
2049 }
2050 }
2051 applyWindowType();
2052 XlibWrapper.XMapRaised(XToolkit.getDisplay(), getWindow());
2053 } else {
2054 XlibWrapper.XUnmapWindow(XToolkit.getDisplay(), getWindow());
2055 }
2056 XlibWrapper.XFlush(XToolkit.getDisplay());
2057 }
2058 finally {
2059 XToolkit.awtUnlock();
2060 }
2061 }
2062
2063 // should be synchronized on awtLock
2064 private int dropTargetCount = 0;
2065
2066 public void addDropTarget() {
2067 XToolkit.awtLock();
2068 try {
2069 if (dropTargetCount == 0) {
2070 long window = getWindow();
|