equal
deleted
inserted
replaced
25 |
25 |
26 |
26 |
27 package sun.awt.X11; |
27 package sun.awt.X11; |
28 |
28 |
29 import java.awt.*; |
29 import java.awt.*; |
30 import java.util.logging.Level; |
30 import sun.util.logging.PlatformLogger; |
31 import java.util.logging.Logger; |
|
32 |
31 |
33 class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { |
32 class XWINProtocol extends XProtocol implements XStateProtocol, XLayerProtocol { |
34 final static Logger log = Logger.getLogger("sun.awt.X11.XWINProtocol"); |
33 final static PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XWINProtocol"); |
35 |
34 |
36 /* Gnome WM spec */ |
35 /* Gnome WM spec */ |
37 XAtom XA_WIN_SUPPORTING_WM_CHECK = XAtom.get("_WIN_SUPPORTING_WM_CHECK"); |
36 XAtom XA_WIN_SUPPORTING_WM_CHECK = XAtom.get("_WIN_SUPPORTING_WM_CHECK"); |
38 XAtom XA_WIN_PROTOCOLS = XAtom.get("_WIN_PROTOCOLS"); |
37 XAtom XA_WIN_PROTOCOLS = XAtom.get("_WIN_PROTOCOLS"); |
39 XAtom XA_WIN_STATE = XAtom.get("_WIN_STATE"); |
38 XAtom XA_WIN_STATE = XAtom.get("_WIN_STATE"); |
62 req.set_window(window.getWindow()); |
61 req.set_window(window.getWindow()); |
63 req.set_message_type(XA_WIN_STATE.getAtom()); |
62 req.set_message_type(XA_WIN_STATE.getAtom()); |
64 req.set_format(32); |
63 req.set_format(32); |
65 req.set_data(0, (WIN_STATE_MAXIMIZED_HORIZ | WIN_STATE_MAXIMIZED_VERT)); |
64 req.set_data(0, (WIN_STATE_MAXIMIZED_HORIZ | WIN_STATE_MAXIMIZED_VERT)); |
66 req.set_data(1, win_state); |
65 req.set_data(1, win_state); |
67 if (log.isLoggable(Level.FINE)) log.fine("Sending WIN_STATE to root to change the state to " + win_state); |
66 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Sending WIN_STATE to root to change the state to " + win_state); |
68 try { |
67 try { |
69 XToolkit.awtLock(); |
68 XToolkit.awtLock(); |
70 XlibWrapper.XSendEvent(XToolkit.getDisplay(), |
69 XlibWrapper.XSendEvent(XToolkit.getDisplay(), |
71 XlibWrapper.RootWindow(XToolkit.getDisplay(), |
70 XlibWrapper.RootWindow(XToolkit.getDisplay(), |
72 window.getScreenNumber()), |
71 window.getScreenNumber()), |
110 win_state |= WIN_STATE_MAXIMIZED_HORIZ; |
109 win_state |= WIN_STATE_MAXIMIZED_HORIZ; |
111 } else { |
110 } else { |
112 win_state &= ~WIN_STATE_MAXIMIZED_HORIZ; |
111 win_state &= ~WIN_STATE_MAXIMIZED_HORIZ; |
113 } |
112 } |
114 if ((old_win_state ^ win_state) != 0) { |
113 if ((old_win_state ^ win_state) != 0) { |
115 if (log.isLoggable(Level.FINE)) log.fine("Setting WIN_STATE on " + window + " to change the state to " + win_state); |
114 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting WIN_STATE on " + window + " to change the state to " + win_state); |
116 XA_WIN_STATE.setCard32Property(window, win_state); |
115 XA_WIN_STATE.setCard32Property(window, win_state); |
117 } |
116 } |
118 } |
117 } |
119 } |
118 } |
120 |
119 |
155 req.set_message_type(XA_WIN_LAYER.getAtom()); |
154 req.set_message_type(XA_WIN_LAYER.getAtom()); |
156 req.set_format(32); |
155 req.set_format(32); |
157 req.set_data(0, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP); |
156 req.set_data(0, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP); |
158 req.set_data(1, 0); |
157 req.set_data(1, 0); |
159 req.set_data(2, 0); |
158 req.set_data(2, 0); |
160 if (log.isLoggable(Level.FINE)) log.fine("Setting layer " + layer + " by root message : " + req); |
159 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting layer " + layer + " by root message : " + req); |
161 XToolkit.awtLock(); |
160 XToolkit.awtLock(); |
162 try { |
161 try { |
163 XlibWrapper.XSendEvent(XToolkit.getDisplay(), |
162 XlibWrapper.XSendEvent(XToolkit.getDisplay(), |
164 XlibWrapper.RootWindow(XToolkit.getDisplay(), |
163 XlibWrapper.RootWindow(XToolkit.getDisplay(), |
165 window.getScreenNumber()), |
164 window.getScreenNumber()), |
170 finally { |
169 finally { |
171 XToolkit.awtUnlock(); |
170 XToolkit.awtUnlock(); |
172 } |
171 } |
173 req.dispose(); |
172 req.dispose(); |
174 } else { |
173 } else { |
175 if (log.isLoggable(Level.FINE)) log.fine("Setting layer property to " + layer); |
174 if (log.isLoggable(PlatformLogger.FINE)) log.fine("Setting layer property to " + layer); |
176 XA_WIN_LAYER.setCard32Property(window, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP); |
175 XA_WIN_LAYER.setCard32Property(window, layer == LAYER_NORMAL ? WIN_LAYER_NORMAL : WIN_LAYER_ONTOP); |
177 } |
176 } |
178 } |
177 } |
179 |
178 |
180 XAtom XA_WIN_LAYER = XAtom.get("_WIN_LAYER"); |
179 XAtom XA_WIN_LAYER = XAtom.get("_WIN_LAYER"); |
196 if (supportChecked) { |
195 if (supportChecked) { |
197 return; |
196 return; |
198 } |
197 } |
199 WinWindow = checkAnchor(XA_WIN_SUPPORTING_WM_CHECK, XAtom.XA_CARDINAL); |
198 WinWindow = checkAnchor(XA_WIN_SUPPORTING_WM_CHECK, XAtom.XA_CARDINAL); |
200 supportChecked = true; |
199 supportChecked = true; |
201 if (log.isLoggable(Level.FINE)) log.fine("### " + this + " is active: " + (WinWindow != 0)); |
200 if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " is active: " + (WinWindow != 0)); |
202 } |
201 } |
203 |
202 |
204 boolean active() { |
203 boolean active() { |
205 detect(); |
204 detect(); |
206 return WinWindow != 0; |
205 return WinWindow != 0; |
207 } |
206 } |
208 boolean doStateProtocol() { |
207 boolean doStateProtocol() { |
209 boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_STATE); |
208 boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_STATE); |
210 if (log.isLoggable(Level.FINE)) log.fine("### " + this + " supports state: " + res); |
209 if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " supports state: " + res); |
211 return res; |
210 return res; |
212 } |
211 } |
213 |
212 |
214 boolean doLayerProtocol() { |
213 boolean doLayerProtocol() { |
215 boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_LAYER); |
214 boolean res = active() && checkProtocol(XA_WIN_PROTOCOLS, XA_WIN_LAYER); |
216 if (log.isLoggable(Level.FINE)) log.fine("### " + this + " supports layer: " + res); |
215 if (log.isLoggable(PlatformLogger.FINE)) log.fine("### " + this + " supports layer: " + res); |
217 return res; |
216 return res; |
218 } |
217 } |
219 } |
218 } |